structured-outputs

1 개의 포스트

slack

에이전트를 활용한 (새 탭에서 열림)

Slack 보안 엔지니어링 팀은 수십억 건의 이벤트를 처리하는 보안 탐지 시스템의 알림 조사를 AI 에이전트로 효율화했다. 단일 프롬프트에 복잡한 조사 절차를 모두 맡기는 대신, 목적과 출력 형식이 명확한 여러 모델 호출을 연결해 조사 과정을 통제하는 구조를 택했다. Director·Expert·Critic 에이전트가 협력하고 서로의 결과를 검증함으로써 조사 품질의 일관성, 근거 교차검증, 환각 완화를 달성하려는 접근이다. ## 단일 프롬프트 프로토타입의 한계 - 초기 프로토타입은 약 300단어의 프롬프트와 MCP 서버, 코딩 에이전트 CLI를 실행 환경으로 사용했다. - 프롬프트는 다음 다섯 부분으로 구성됐다. - **Orientation**: 보안 분석가 역할 정의 - **Manifest**: 사용할 데이터 소스 설명 - **Methodology**: 조사 절차 지시 - **Formatting**: 조사 결과를 Markdown 보고서로 출력 - **Classification**: 대응 등급 분류 - MCP의 stdio 모드 서버를 통해 일부 보안 데이터 소스를 안전하게 도구 호출 방식으로 노출했다. - 어떤 경우에는 여러 데이터 소스의 증거를 훌륭하게 연결했지만, 다른 경우에는 충분한 검증 없이 편리하거나 잘못된 결론으로 빠르게 진행했다. - “가정을 의심하라”, “여러 출처로 검증하라”와 같은 지침을 프롬프트에 추가했지만, 프롬프트는 가이드라인일 뿐 세부적인 실행 흐름을 강제하기에는 한계가 있었다. ## 단계별 모델 호출과 구조화된 출력 - 복잡한 조사 전체를 하나의 프롬프트로 처리하지 않고, 조사 과정을 여러 개의 단순한 작업으로 분해했다. - 각 작업은 다음 요소를 갖는다. - 명확하게 정의된 단일 목적 - 애플리케이션이 해석하기 쉬운 구조화된 출력 - 다음 단계로 전달할 제한된 컨텍스트 - 각 모델 호출 결과는 JSON 스키마로 제한할 수 있는 구조화된 출력 형식으로 생성된다. - 구조화된 출력은 작업 간 계약 역할을 하므로, “증거를 의심하라” 같은 추상적인 지침도 독립적인 검토 작업으로 분리할 수 있다. - 다만 구조화된 출력에도 주의점이 있다. - 스키마가 지나치게 복잡하면 모델 실행 자체가 실패할 수 있다. - 모델이 형식을 형식적으로만 충족하거나, 여전히 환각을 포함할 수 있다. - 이 방식의 핵심 효과는 모델의 행동을 프롬프트 수준이 아니라 애플리케이션의 워크플로 수준에서 통제할 수 있다는 점이다. ## 페르소나 기반 조사 설계 - Slack은 메타 프롬프트와 다중 페르소나 자기협업 관련 연구, 보안 테이블톱 훈련에서 설계 아이디어를 얻었다. - 하나의 모델 호출 안에서 여러 페르소나를 연기하게 하는 대신, 각 페르소나를 독립적인 모델 호출로 구현했다. - 각 에이전트와 작업의 조합은 별도의 구조화된 출력 형식을 가지며, 애플리케이션이 호출 순서와 컨텍스트 전달을 orchestration한다. - 독립 호출 구조에서는 에이전트별로 모델 버전, 프롬프트, 지시사항, 도구, 출력 형식을 다르게 설정할 수 있다. ## Director·Expert·Critic 협업 구조 ### Director 에이전트 - 조사 전체를 시작부터 끝까지 진행하는 조사 책임자다. - 조사에 필요한 질문을 만들고 이를 도메인 전문가에게 전달한다. - 조사 진행 상황을 계획하고 정리하기 위해 저널링 도구를 사용한다. - 전문가의 결과와 Critic의 평가를 바탕으로 다음 조사 단계를 결정한다. ### Expert 에이전트 - 특정 도메인 지식과 데이터 소스를 담당한다. - Director의 질문에 답하기 위해 관련 도구를 호출하고 조사 결과를 생성한다. - 현재 네 종류의 전문가가 있다. - **Access**: 인증, 권한 부여, 경계 보안 서비스 - **Cloud**: 인프라, 컴퓨트, 오케스트레이션, 네트워킹 - **Code**: 소스 코드 및 구성 관리 분석 - **Threat**: 위협 분석과 위협 인텔리전스 데이터 - 각 전문가는 자신에게 필요한 데이터 소스에 집중하므로, 하나의 에이전트가 모든 영역을 무분별하게 조사하는 문제를 줄인다. ### Critic 에이전트 - 전문가 결과를 검토하는 메타 전문가다. - 사전에 정의한 평가 기준에 따라 각 발견 사항의 품질을 평가하고 정량화한다. - 전문가의 주장에 분석 내용을 추가하고, 각 발견 사항에 신뢰도 점수를 부여한다. - 가장 신뢰할 수 있는 결과를 바탕으로 타임라인을 구성해 Director에게 전달한다. - 전문가 그룹과 약한 적대적 관계를 형성함으로써 증거 해석의 편차와 환각을 완화한다. ## 반복형 조사 루프 - Director가 조사 질문을 제시한다. - 관련 Expert들이 각자의 데이터 소스를 조사해 발견 사항을 생성한다. - Critic이 발견 사항을 검토하고 신뢰도와 품질을 평가한다. - Critic은 중요한 결과를 선별하고 신뢰할 수 있는 증거를 이용해 사건 타임라인을 만든다. - Director는 검증된 발견 사항과 타임라인을 이용해 추가 조사가 필요한지, 다음 질문은 무엇인지 결정한다. - 이 루프를 통해 한 번의 응답으로 결론을 내리기보다, 질문·조사·검증·진행 결정이 반복되는 조사 프로세스를 구현한다. ## 지식 피라미드와 모델 비용 최적화 - 하위 단계에서는 도메인 전문가가 복잡한 데이터 소스를 직접 조회한다. - 이 과정은 도구 호출이 많고 반환된 데이터를 분석하는 데 많은 토큰이 필요하므로 상대적으로 비용이 높을 수 있다. - Critic은 전문가가 생성한 많은 결과를 검토해 중요하고 신뢰할 만한 발견 사항을 추린다. - 이후 상위 단계의 에이전트는 정제된 결과와 타임라인만 전달받아 더 높은 수준의 판단을 수행한다. - 이를 통해 모든 단계에서 가장 크고 비싼 모델을 사용하는 대신, 조사 단계별 요구 사항에 맞춰 모델을 선택할 수 있다. - 즉, 많은 원시 데이터를 처리하는 단계와 최종 판단을 내리는 단계를 분리해 비용과 성능을 함께 조정하는 구조다. ## 실용적인 설계 시사점 - 복잡한 보안 조사를 하나의 거대한 프롬프트에 담기보다, 목적이 명확한 작업과 구조화된 출력으로 분해하는 것이 안정적이다. - 에이전트 간 역할을 분리하고 독립적인 검토자를 두면 증거 검증과 환각 완화에 도움이 된다. - 데이터 소스별 전문 에이전트를 두면 각 모델이 불필요한 도구를 사용하거나 모든 영역을 피상적으로 조사하는 문제를 줄일 수 있다. - 모델 호출을 독립적으로 설계하면 작업별로 모델 크기, 도구, 프롬프트, 출력 스키마를 최적화할 수 있다. - 다만 구조화된 출력만으로 정확성이 보장되지는 않으므로, 다중 출처 검증과 별도 Critic 단계, 신뢰도 평가를 함께 구성하는 것이 중요하다.