Understanding "Handoffs" in LangChain(One Agent, Many Personalities)

개요

LangChain 에이전트에서 "handoffs" 패턴은 단일 에이전트가 대화 상태에 따라 다른 지시사항과 도구를 사용하도록 하여 여러 독립적인 에이전트를 사용하는 것보다 효율적으로 동작하게 만드는 기법입니다.

주요 내용

  • Handoffs의 개념: Handoffs는 새로운 에이전트가 작업을 넘겨받는 것이 아니라, 동일한 에이전트가 특정 상태(state)에 기반하여 지시사항과 사용 가능한 도구를 변경하는 방식입니다. 이는 고객 서비스 담당자가 티켓 단계에 따라 책상 위의 스크립트를 바꾸는 것에 비유될 수 있습니다.
  • 구현 방식: 에이전트의 상태(예: current_step 변수)로 현재 단계를 추적하며, 각 모델 호출 전에 이 변수를 확인하여 적절한 시스템 프롬프트와 도구 세트로 변경합니다. 도구 호출은 이 변수를 업데이트하여 대화를 다음 단계로 이동시킬 수 있습니다.
  • 예제 (지원 봇):
  • 상태 (SupportState): current_step (기본값: "triage")과 issue_type을 추적하여 에이전트의 현재 단계를 관리하고 문제 유형을 저장합니다.
  • 도구:
  • record_issue: 사용자로부터 문제 유형을 수집하고, issue_typecurrent_step을 "resolve"로 업데이트하는 Command를 반환합니다.
  • resolve_billing, resolve_technical, resolve_other: 각기 다른 유형의 문제를 해결하는 기능을 수행합니다.
  • end_conversation: 대화 종료를 나타내는 Command를 반환하며, current_step을 "done"으로 설정합니다.
  • 미들웨어 (apply_step_config): @wrap_model_call 데코레이터를 사용하여 각 모델 호출 직전에 실행됩니다. 현재 current_step 상태를 기반으로 적절한 시스템 프롬프트와 사용 가능한 도구 목록을 동적으로 구성하여 모델 요청을 재정의합니다. 이를 통해 "triage" 단계에서는 resolve_billing과 같은 도구가, "resolve" 단계에서는 record_issue 도구가 비활성화되는 등 각 단계에 맞는 환경을 강제합니다.
  • 에이전트 생성: create_agent 함수에 모든 도구, 사용자 정의 state_schema (SupportState), 그리고 apply_step_config 미들웨어를 전달하여 에이전트를 생성합니다. checkpointer를 사용하여 여러 호출 간에 상태를 유지합니다.
  • Handoffs 패턴의 장점:
  • 단일 메시지 기록: 모든 대화 기록이 동일한 컨텍스트 내에 유지되어 모델이 컨텍스트를 잃지 않습니다.
  • 관리 용이성: 상태 로직이 하나의 딕셔너리(configs)에 집중되어 있어 여러 에이전트 정의에 흩어지는 것보다 이해하기 쉽습니다.
  • 강력한 경계: 현재 단계에 필요한 도구만 노출되므로, 모델이 단계 순서를 건너뛰는 것을 방지하는 가드레일을 제공합니다.
  • 확장 용이성: 새로운 단계를 추가하는 것은 configs에 항목을 추가하고 관련 도구를 정의하는 것만으로 가능합니다.

시사점

Handoffs 패턴은 LangChain 에이전트 내에서 복잡한 워크플로우를 단일 에이전트 구조로 효율적으로 관리하고, 대화 상태에 따라 동적으로 에이전트의 행동을 제어할 수 있는 유연성을 제공합니다.

원문 읽기 →
원문을 불러오는 중...

댓글

GitHub Discussions