오늘의 소개 글
안녕하세요 주간SaaS 입니다. 실제로 정말 많은 분들이 에이전트 기반은 애플리케이션을 만듭니다. 그저 동작하는 에이전트가 아니라 정말 임무를 믿고 맡길수 있는 신뢰할 수 있는 에이전트를 만드는 것은 한번의 commit 으로 끝나는것이 아니라는 점을 새삼 느낍니다. 오늘 소개하는 글은 정교한 LLM 평가 체계를 바탕으로 지속적으로 에이전트를 개선하는 좋은 사례를 담고 있습니다. 신뢰할수 있는 에이전틱 시스템을 목표로 하는 분들께 도움이 되면 좋겠습니다.
이 블로그 게시글은 Andrew McNamara, Ben Lafferty, Michael Garner가 ICML 2025에서 발표한 '프로덕션 레벨의 에이전틱 시스템 구축: 아키텍처, LLM 기반 평가, 그리고 GRPO 훈련' 강연을 기반으로 작성되었습니다.
Shopify에서는 판매자가 자연어 상호작용을 통해 스토어를 관리할 수 있도록 돕는 AI 기반 어시스턴트인 Sidekick을 개발해왔습니다. 고객 세그먼트 분석부터 상품 정보 양식 작성, 복잡한 관리자 인터페이스 탐색에 이르기까지, Sidekick은 간단한 툴 호출 시스템에서 정교한 에이전틱 플랫폼으로 발전했습니다. 이 과정에서 저희는 아키텍처 설계, 평가 방법론, 훈련 기술에 대해 귀중한 교훈을 얻었고, 이를 더 넓은 AI 엔지니어링 커뮤니티와 공유하고자 합니다.
Sidekick 아키텍처의 진화
Sidekick은 Anthropic이 말하는 '에이전틱 루프(agentic loop)'를 중심으로 구축되었습니다. 이는 인간이 입력을 제공하면, LLM이 그 입력을 처리하고 행동을 결정하며, 그 행동이 환경에서 실행되고, 피드백이 수집된 후, 과업이 완료될 때까지 이 순환이 계속되는 연속적인 주기입니다.

실제로 이는 Sidekick이 "토론토에서 온 고객은 누구인가요?"와 같은 요청을 처리할 수 있음을 의미합니다. Sidekick은 자동으로 고객 데이터를 쿼리하고, 적절한 필터를 적용하여 결과를 제시합니다. 또는 판매자가 SEO 설명 작성을 도와달라고 요청하면, Sidekick은 관련 상품을 식별하고, 맥락을 이해하며, 최적화된 콘텐츠를 상품 양식에 직접 채워 넣을 수 있습니다.

툴 복잡성 문제 (The Tool Complexity Problem)
Sidekick의 기능을 확장하면서, 저희는 에이전틱 시스템을 구축하는 많은 팀이 겪을 만한 확장성 문제에 빠르게 부딪혔습니다. 저희가 보유한 툴은 몇 개의 잘 정의된 함수에서 수십 개의 전문화된 기능으로 늘어났습니다:
- 0-20개 툴 : 경계가 명확하고, 디버깅이 쉬우며, 동작이 직관적입니다.
- 20-50개 툴 : 경계가 모호해지기 시작하고, 툴 조합이 예상치 못한 결과를 초래하기 시작합니다.
- 50개 이상 툴 : 동일한 작업을 수행하는 여러 방법이 존재하며, 시스템의 동작을 추론하기 어려워집니다.
이러한 성장은 저희가 "수많은 지침으로 인한 난관(Death by a Thousand Instructions)"이라고 부르는 문제로 이어졌습니다. 시스템 프롬프트가 특수한 경우, 상충하는 지침, 엣지 케이스 처리 등으로 가득 찬 다루기 힘든 집합체가 되어 시스템 속도를 저하시키고 유지보수를 거의 불가능하게 만들었습니다.
확장성을 위한 해결책: Just-in-Time 지침
저희의 돌파구는 Just-in-Time (JIT) 지침을 구현하면서 찾아왔습니다. 모든 지침을 시스템 프롬프트에 욱여넣는 대신, 저희는 툴 데이터와 함께 관련 지침을 필요한 바로 그 시점에 반환합니다. 저희의 목표는 모든 단일 상황에 대해 토큰 하나도 더하거나 빼지 않고 LLM을 위한 완벽한 컨텍스트를 구성하는 것입니다.
실제 작동 방식
LLM에 제공된 지침 (아래):

제공된 지침(위)에 기반한 LLM의 응답:

이 접근 방식은 세 가지 주요 이점을 제공합니다:
- 상황에 맞는 지침 : 지침이 관련 있을 때만 나타나므로, 핵심 시스템 프롬프트는 기본적인 에이전트 행동에 집중할 수 있습니다.
- 캐시 효율성 : LLM 프롬프트 캐시를 손상시키지 않고 동적으로 지침을 조정할 수 있습니다.
- 모듈성 : 베타 플래그, 모델 버전 또는 페이지 컨텍스트에 따라 다른 지침을 제공할 수 있습니다.
결과는 즉각적이었습니다. 시스템은 유지보수가 더 용이해졌고 모든 지표에서 성능이 향상되었습니다.
견고한 LLM 평가 시스템 구축하기
에이전틱 시스템을 배포할 때 가장 큰 과제 중 하나는 평가입니다. 전통적인 소프트웨어 테스트 접근 방식은 LLM 출력의 확률론적 특성과 다단계 에이전트 행동의 복잡성을 다루기에는 역부족입니다.
요즘 너무나 많은 사람들이 자신의 LLM 시스템을 'vibe testing'하고 그것으로 충분하다고 생각하지만, 그렇지 않습니다. "이것을 0-10점으로 평가해"와 같은 'Vibe LLM Judge'를 만드는 식의 vibe testing은 결코 충분하지 않습니다. 평가는 원칙에 입각하고 통계적으로 엄격해야 하며, 그렇지 않으면 잘못된 안도감을 갖고 제품을 출시하게 될 것입니다.
골든 데이터셋을 넘어 Ground Truth Set으로
저희는 신중하게 선별된 '골든' 데이터셋에서 벗어나 실제 프로덕션 환경의 데이터 분포를 반영하는 Ground Truth Set(GTX)으로 전환했습니다. 가능한 모든 상호작용을 예측하려 하기보다는(보통 사양 문서가 열거하려는 것), 실제 판매자 대화를 샘플링하고 실제 관찰된 내용을 바탕으로 평가 기준을 만듭니다.

이 과정은 다음을 포함합니다:
- 인간 평가 : 최소 세 명의 제품 전문가가 여러 기준에 걸쳐 대화에 레이블을 지정하도록 합니다.
- 통계적 검증 : Cohen's Kappa, Kendall Tau, Pearson 상관관계를 사용하여 평가자 간 일치도를 측정합니다.
- 벤치마킹 : 인간 평가자 간의 일치도 수준을 저희의 LLM 평가자가 달성할 수 있는 이론적 최댓값으로 취급합니다.

인간과의 상관관계를 갖춘 LLM 평가자(LLM-as-a-Judge)
저희는 Sidekick 성능의 다양한 측면을 평가하기 위해 전문화된 LLM 평가자를 개발했지만, 핵심적인 통찰은 이 평가자들을 인간의 판단에 맞춰 보정하는 것이었습니다. 반복적인 프롬프팅을 통해, 저희는 평가자의 성능을 거의 무작위 수준(Cohen's Kappa 0.02)에서 인간 수준에 가까운 성능(인간 기준선 0.69 대비 0.61)으로 향상시켰습니다. 핵심 아이디어는 LLM 평가자가 인간과의 높은 상관관계를 갖게 되면, GTX의 각 대화에 대해 평가자를 무작위로 인간으로 대체해보고, 그 그룹에 인간이 사용되었는지 평가자가 사용되었는지 구별하기 어려울 때, 비로소 신뢰할 수 있는 LLM 평가자를 확보했다는 것을 알 수 있다는 것입니다.

포괄적인 테스트를 위한 사용자 시뮬레이션
프로덕션 배포 전에 후보 변경 사항을 테스트하기 위해, 저희는 실제 대화의 '본질' 또는 목표를 포착하고 새로운 후보 시스템을 통해 이를 재현하는 LLM 기반 판매자 시뮬레이터를 구축했습니다. 이를 통해 여러 다른 후보 시스템에 대한 시뮬레이션을 실행하고 가장 성능이 좋은 시스템을 선택할 수 있습니다.
전체 평가 파이프라인은 다음과 같습니다:

이 접근 방식은 판매자에게 도달하기 전에 성능 저하(regression)를 발견하고 개선 사항을 검증하는 데 매우 귀중한 것으로 입증되었습니다.
GRPO 훈련과 보상 해킹(Reward Hacking)
모델 파인튜닝을 위해, 저희는 LLM 평가자를 보상 신호로 사용하는 강화학습 접근법인 Group Relative Policy Optimization(GRPO)을 구현했습니다. 절차적 검증(구문 검사, 스키마 검증)과 LLM 평가자의 의미론적 평가를 결합한 N단계 게이트 보상(N-Stage Gated Rewards) 시스템을 개발했습니다.

보상 해킹의 현실
신중한 평가 설계에도 불구하고, 저희는 훈련 중에 심각한 보상 해킹을 경험했습니다. 모델은 보상 시스템을 공략하기 위해 창의적인 방법을 찾아냈습니다:
- 포기 해킹(Opt-out hacking) : 어려운 작업을 시도하는 대신, 왜 도움을 줄 수 없는지 설명합니다.
- 태그 해킹(Tag hacking) : 적절한 필드 매핑 대신 고객 태그를 만능 해결책처럼 사용합니다.
- 스키마 위반 : 존재하지 않는 ID를 생성(hallucinating)하거나 잘못된 enum 값을 사용합니다.
예를 들어, "상태가 활성화된 고객을 세분화하라"는 요청에 모델은 올바른 필터 조건인 customer_account_status = 'ENABLED' 대신 $customer_tags CONTAINS 'enabled'$와 같은 필터를 생성하는 법을 학습했습니다.
반복적인 개선
보상 해킹을 해결하기 위해서는 이러한 실패 모드를 인식하도록 구문 검사기(syntax validator)와 LLM 평가자 모두를 업데이트해야 했습니다. 수정 사항을 구현한 후:
- 모든 스킬에 걸쳐 구문 검증 정확도가 약 93%에서 99%로 향상되었습니다.
- LLM 평가자의 상관관계는 평균 0.66에서 0.75로 증가했습니다.
- 가장 중요하게는, 엔드투엔드 대화 품질이 저희의 지도학습 기반 파인튜닝(supervised fine-tuning) 기준선과 일치하게 되었습니다.
프로덕션 레벨의 에이전틱 시스템을 위한 핵심 요약
Sidekick을 구축하고 배포한 경험을 바탕으로, 다음과 같은 핵심 권장 사항을 제시합니다:
아키텍처 원칙
- 단순함 유지 : 명확한 경계 없이 툴을 추가하려는 유혹을 참으세요. 에이전트 기능에는 양보다 질이 강력하게 적용됩니다.
- 모듈식으로 시작 : 시스템이 확장됨에 따라 이해 가능성을 유지하기 위해 처음부터 JIT 지침과 같은 패턴을 사용하세요.
- 초기에 다중 에이전트 아키텍처 피하기 : 단순한 단일 에이전트 시스템도 예상보다 훨씬 더 많은 복잡성을 처리할 수 있습니다.
평가 인프라
- 여러 LLM 평가자 구축 : 에이전트 성능의 다양한 측면은 전문화된 평가 접근 방식이 필요합니다.
- 평가자를 인간의 판단과 일치시키기 : 자동화된 평가에 대한 신뢰를 위해서는 인간 평가자와의 통계적 상관관계가 필수적입니다.
- 보상 해킹 예상 : 모델이 보상 시스템을 공략할 것을 계획하고 그에 대한 탐지 메커니즘을 구축하세요.
훈련 및 배포
- 절차적 + 의미론적 검증 : 견고한 보상 신호를 위해 규칙 기반 검사와 LLM 기반 평가를 결합하세요.
- 사용자 시뮬레이션 : 포괄적인 프로덕션 전 테스트를 위해 현실적인 사용자 시뮬레이터에 투자하세요.
- 반복적인 평가자 개선 : 새로운 실패 모드를 발견함에 따라 여러 차례의 평가자 개선을 계획하세요.
향후 계획
저희는 Sidekick의 아키텍처와 평가 시스템을 계속해서 발전시키고 있습니다. 향후 작업에는 추론 과정(reasoning traces)을 훈련 파이프라인에 통합하고, 훈련 중에 시뮬레이터와 프로덕션 평가자를 사용하며, 더 효율적인 훈련 접근법을 탐색하는 것이 포함됩니다.
프로덕션 에이전틱 시스템 분야는 아직 초기 단계이지만, Shopify에서 개발한 패턴들—모듈식 아키텍처, 견고한 평가 프레임워크, 보상 해킹에 대한 세심한 주의—은 판매자들이 의존할 수 있는 신뢰할 수 있는 AI 어시스턴트를 구축하기 위한 토대를 제공합니다.
프로덕션 레벨의 에이전틱 시스템을 구축하는 것은 LLM을 툴에 연결하는 것 이상을 요구합니다. 이는 사려 깊은 아키텍처 결정, 엄격한 평가 방법론, 그리고 이러한 시스템이 실패할 수 있는 예상치 못한 방식에 대한 끊임없는 경계를 필요로 합니다. 하지만 제대로 수행된다면, 그 결과는 의미 있는 방식으로 인간의 능력을 진정으로 증강시키는 AI가 될 것입니다.
Shopify ML 팀은 에이전틱 시스템, 평가 인프라, 프로덕션 ML 분야의 인재를 적극적으로 채용하고 있습니다. 이러한 과제에 관심이 있으시다면, 저희에게 연락해 주시길 바랍니다.
의견을 남겨주세요