콘텐츠로 이동

멀티 에이전트 오케스트레이션

오케스트레이션은 앱에서 에이전트가 어떻게 흐르는지를 의미합니다. 어떤 에이전트를 어떤 순서로 실행하며, 다음에 무엇을 할지 어떻게 결정할까요? 에이전트를 오케스트레이션하는 주요 방법은 두 가지입니다:

  1. LLM 에 의한 의사결정 허용: LLM 의 지능을 활용해 계획하고 추론하여 다음 단계들을 결정합니다
  2. 코드 기반 오케스트레이션: 코드로 에이전트의 흐름을 결정합니다

이 패턴들은 혼합하여 사용할 수 있습니다. 각 방식에는 아래에 설명된 트레이드오프가 있습니다.

LLM 기반 오케스트레이션

에이전트는 지침(instructions), 도구(tools), 핸드오프(handoffs)로 무장한 LLM 입니다. 이는 개방형 과제가 주어졌을 때, LLM 이 도구를 사용해 행동하고 데이터를 수집하며, 핸드오프를 통해 하위 에이전트에 작업을 위임하는 방식으로 과제를 스스로 계획해 해결할 수 있음을 의미합니다. 예를 들어, 리서치 에이전트는 다음과 같은 도구를 갖출 수 있습니다:

  • 온라인에서 정보를 찾는 웹 검색
  • 독점 데이터와 연결을 검색하는 파일 검색 및 검색(조회)
  • 컴퓨터에서 작업을 수행하는 컴퓨터 사용
  • 데이터 분석을 위한 코드 실행
  • 기획, 보고서 작성 등에 특화된 에이전트로의 핸드오프

이 패턴은 과제가 개방형이고 LLM 의 지능에 의존하고자 할 때 유용합니다. 여기서 가장 중요한 전술은 다음과 같습니다:

  1. 좋은 프롬프트에 투자하세요. 사용할 수 있는 도구, 사용 방법, 그리고 운영해야 하는 매개변수를 명확히 하세요
  2. 앱을 모니터링하고 반복 개선하세요. 문제가 발생하는 지점을 파악하고 프롬프트를 개선하세요
  3. 에이전트가 성찰하고 개선하도록 허용하세요. 예를 들어 루프에서 실행하면서 스스로를 비판하게 하거나, 에러 메시지를 제공해 개선하도록 하세요
  4. 모든 것을 잘하는 범용 에이전트보다 하나의 작업에 뛰어난 특화 에이전트를 사용하세요
  5. evals 에 투자하세요. 이를 통해 에이전트를 훈련하여 작업 성능을 향상시킬 수 있습니다

코드 기반 오케스트레이션

LLM 기반 오케스트레이션은 강력하지만, 코드 기반 오케스트레이션은 속도, 비용, 성능 측면에서 작업을 더 결정적이고 예측 가능하게 만듭니다. 일반적인 패턴은 다음과 같습니다:

  • structured outputs 를 사용해 코드로 검사할 수 있는 적절한 형식의 데이터 를 생성합니다. 예를 들어, 에이전트에게 작업을 몇 개의 카테고리 로 분류하게 한 다음, 해당 카테고리 에 따라 다음 에이전트를 선택할 수 있습니다
  • 한 에이전트의 출력을 다음 에이전트의 입력으로 변환하여 여러 에이전트를 체이닝합니다. 블로그 글쓰기를 리서치, 개요 작성, 본문 작성, 비판, 개선의 일련의 단계로 분해할 수 있습니다 - do research, write an outline, write the blog post, critique it, and then improve it
  • 작업을 수행하는 에이전트를 평가 및 피드백을 제공하는 에이전트와 함께 while 루프에서 실행하여, 평가자가 출력이 특정 기준을 통과했다고 판단할 때까지 반복합니다
  • asyncio.gather 같은 파이썬 기본 구성 요소 를 통해 여러 에이전트를 병렬로 실행합니다. 서로 의존하지 않는 여러 작업이 있을 때 속도 향상에 유용합니다

examples/agent_patterns 에 여러 코드 예제가 있습니다.