---
search:
  exclude: true
---
# 멀티 에이전트 오케스트레이션

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

1. LLM 에 의사결정을 맡기기: LLM 의 지능을 활용해 계획하고 추론하며 그에 따라 다음 단계를 결정
2. 코드로 오케스트레이션하기: 코드로 에이전트의 흐름을 결정

이 패턴들은 섞어서 사용할 수 있습니다. 각 방식의 트레이드오프는 아래에 설명합니다.

## LLM 기반 오케스트레이션

에이전트는 instructions, tools 및 핸드오프를 갖춘 LLM 입니다. 즉, 개방형 태스크가 주어지면, LLM 은 도구를 사용해 조치를 취하고 데이터를 수집하며, 핸드오프를 통해 하위 에이전트에 작업을 위임하면서 스스로 태스크를 처리하는 계획을 세울 수 있습니다. 예를 들어, 리서치 에이전트는 다음과 같은 도구를 갖출 수 있습니다:

- 웹 검색으로 온라인 정보 찾기
- 파일 검색 및 검색을 통해 사내 데이터와 연결에서 찾기
- 컴퓨터 사용으로 컴퓨터에서 행동 수행
- 코드 실행으로 데이터 분석 수행
- 계획 수립, 보고서 작성 등에 특화된 에이전트로의 핸드오프

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

1. 좋은 프롬프트에 투자하세요. 사용 가능한 도구, 사용 방법, 그리고 운영해야 하는 매개변수를 명확히 하세요.
2. 앱을 모니터링하고 반복 개선하세요. 어디에서 문제가 발생하는지 확인하고 프롬프트를 개선하세요.
3. 에이전트가 자기 성찰하고 개선하도록 하세요. 예를 들어 루프로 실행하여 스스로 비평하게 하거나, 에러 메시지를 제공해 개선하게 하세요.
4. 범용 에이전트 하나가 모든 것을 잘하도록 기대하기보다, 하나의 태스크에 특화된 에이전트를 두세요.
5. [평가(evals)](https://platform.openai.com/docs/guides/evals)에 투자하세요. 이를 통해 에이전트를 훈련하고 과업 수행 능력을 향상할 수 있습니다.

## 코드 기반 오케스트레이션

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

- [structured outputs](https://platform.openai.com/docs/guides/structured-outputs)를 사용해 코드로 검사할 수 있는 적절한 형식의 데이터를 생성하기. 예를 들어, 에이전트에게 태스크를 몇 가지 카테고리로 분류하게 하고, 그 카테고리에 따라 다음 에이전트를 선택할 수 있습니다.
- 여러 에이전트를 체이닝하여 하나의 출력물을 다음 에이전트의 입력으로 변환하기. 블로그 글 작성 같은 태스크를 일련의 단계로 분해할 수 있습니다 - 연구하기, 개요 작성, 블로그 글 작성, 비평, 그리고 개선
- 태스크를 수행하는 에이전트를 평가와 피드백을 제공하는 에이전트와 함께 `while` 루프로 실행하고, 평가자가 출력이 특정 기준을 통과했다고 말할 때까지 반복하기
- 여러 에이전트를 병렬로 실행하기(예: `asyncio.gather` 같은 파이썬 기본 구성 요소 활용). 서로 의존하지 않는 여러 태스크가 있을 때 속도 향상에 유용합니다.

[`examples/agent_patterns`](https://github.com/openai/openai-agents-python/tree/main/examples/agent_patterns)에 다양한 code examples 가 있습니다.