프로덕트 엔지니어: 하루 500건 분석 요청을 처리하는 데이터 에이전트, 일을 돕는 AI에서 일을 수행하는 AI로
마이리얼트립이 슬랙 데이터 에이전트로 하루 500건 분석 요청을 처리했다.
마이리얼트립의 데이터 에이전트는 슬랙에 라이브된 지 일주일도 안 돼 2,000건이 넘는 분석 요청을 받았고, 어떤 날은 하루 500~600건을 처리했다. 기존에는 분석가 한 명이 하루 4~7건 정도만 소화했지만, 이제는 구성원 누구나 슬랙에서 에이전트를 태그해 어제 숙박 거래액, 취소분 제외, 전주 대비 같은 조건까지 붙인 결과를 바로 받는다.
핵심은 에이전트를 단순한 도구가 아니라 통제를 맡길 수 있는 AI 동료로 만드는 일이었다. 이를 위해 Harness는 워크플로·권한·안전망을 담당하고, Knowledge는 거래액 정의와 테이블 의미를 고정한다. 예를 들어 GMV_total 같은 메트릭은 YAML로 정의해 SUM(<payment_amount>) 기준을 명시하고, 취소분 반영 여부는 요청 맥락에 따라 분기한다.
슬랙 메시지는 Listener가 받고, Dispatcher가 잡담·중복·분석 요청을 가른 뒤, Parent Worker가 맥락을 정리해 서브 에이전트로 넘긴다. 워커는 간단한 분석, 복잡한 분석, 검색, 보고서, 시각화, 구글 시트로 분업하며, 여러 개의 Claude Code Max 계정을 Docker 클러스터로 띄워 운영한다. 분류용 모델은 Haiku에서 Sonnet으로 바꿨고, Opus 대비 1/8~1/10 토큰으로 안정적인 분류를 얻었다. 답변에 붙는 번호 이모지는 어느 워커가 해당 요청을 맡았는지 보여준다.
헤드리스 구조에서는 세션이 새로 뜰 때마다 룰을 다시 넣어야 하므로, Parent Worker는 본문 대신 주소만 들고 있는 Lazy Load 방식으로 바뀌었다. 그 결과 세션당 230K 토큰이 사라지던 낭비를 줄였고, Claude Setup Token과 헤드리스 모드를 써서 API 키 운영보다 비용도 낮췄다. 지식 체계는 Metric Registry -> DBT 메타데이터 -> 직접 탐색 순서로 동작하고, Auto Memory는 끈 채 명시적 Knowledge만 사용한다.
안전망은 Role / Gate / Rule / Hook 4겹이다.
- Role: 워커별 권한을 나눠 보고서 워커는 BigQuery를 직접 만지지 못하고, 분석 워커는 Confluence에 글을 쓰지 못하게 한다.
- Gate: 요청 범위가 비어 있거나 애매하면 워커를 띄우지 않고 되묻는다.
- Rule: Metric Registry와 워커별 작업 명세로 자연어 정책을 적어 둔다.
- Hook: SQL 실행 직전에 읽기 전용 여부, 스캔 한도, 개인정보 마스킹을 마지막으로 검증한다.
배포 전에는 100개가 넘는 shell test와 eval로 정확성·행동 경로·안정성·형식을 검증한다. 실패 사례가 나오면 원인을 분석해 Metric Registry나 rule을 고치고 새 eval을 추가하며, 워커가 5시간/주간 리밋에 걸리면 대기 중인 예비 워커가 즉시 이어받는다. 반복 워크플로는 사람이 매번 끼어드는 Human-in-the-loop보다, 사람이 빠져도 되는 Closure-loop으로 설계해야 한다는 메시지가 끝까지 이어진다.
이 요약은 원문 이해를 돕기 위한 큐레이션입니다. 저작권은 원저작자에게 있으며, 정확한 내용과 맥락은 원문을 확인하세요.
요약 오류, 출처 표기 문제, 삭제 요청은 문의 · 건의로 알려주세요.
