Skip to main content
이 문서는 대화형 노트북입니다. 로컬에서 실행하거나 다음 링크를 사용할 수 있습니다.
이 튜토리얼에서는 OpenAI의 구조화된 출력 기능을 활용하는 멀티 에이전트 시스템을 구축하고, Weave로 에이전트 간 상호작용을 트레이스하는 방법을 알아봅니다. 튜토리얼을 마치면 에이전트 4개로 구성된 데이터 분석 파이프라인이 완성되며, 중간 단계의 입력과 출력을 Weights & Biases UI에서 확인할 수 있습니다. OpenAI가 릴리스한 구조화된 출력을 사용하면 프롬프트에서 강하게 지시하지 않아도 모델이 항상 사용자가 제공한 JSON Schema를 준수하는 응답을 생성합니다. 따라서 형식이 올바르지 않은 응답을 검증하거나 재시도할 필요가 없습니다. strict: true 매개변수를 사용하면 응답이 제공된 스키마를 반드시 준수하도록 할 수 있습니다. 멀티 에이전트 시스템에서 구조화된 출력을 사용하면 에이전트 간에 일관되고 예측 가능한 형태로 데이터를 주고받을 수 있습니다. 또한 명시적인 거부를 지원하므로 재시도나 응답 검증이 필요하지 않습니다.
출처: 이 쿡북은 OpenAI의 구조화된 출력 샘플 코드를 기반으로 하며, Weave에서 더 잘 시각화할 수 있도록 일부 수정했습니다.

의존성 설치

먼저 이 튜토리얼에 필요한 라이브러리를 설치하세요. 이 튜토리얼에서는 다음 라이브러리를 사용합니다.
  • OpenAI: 멀티 에이전트 시스템을 구축하는 데 사용합니다.
  • Weave: LLM 워크플로를 추적하고 프롬프트 전략을 평가하는 데 사용합니다.
다음으로 자격 증명을 설정하고 Weave를 초기화하여 트레이스가 Weights & Biases 프로젝트에 로깅되도록 합니다. wandb.login()으로 로그인할 수 있도록 환경에 WANDB_API_KEY를 설정하세요. 이 값은 Colab에 시크릿으로 등록하세요. 로깅할 Weights & Biases 프로젝트를 name_of_wandb_project에 지정하세요.
트레이스를 로깅할 팀을 지정하려면 name_of_wandb_project를 [YOUR-TEAM]/[YOUR-PROJECT] 형식으로 입력할 수도 있습니다.
그런 다음 weave.init()을 호출하여 Weave 클라이언트를 가져오세요. 이 튜토리얼에서는 OpenAI API를 사용하므로 OpenAI API 키도 필요합니다. OpenAI 플랫폼에 가입하여 API 키를 발급받으세요. 이 키도 Colab에 시크릿으로 등록하세요.

에이전트 설정

Weave를 초기화했으면 시스템을 구성하는 에이전트를 정의합니다. 이 튜토리얼에서는 데이터 분석 작업을 사용 사례로 다룹니다. 먼저 4개의 에이전트로 구성된 시스템을 설정합니다.
  • 분류(Triaging) 에이전트: 호출할 에이전트를 결정합니다.
  • 데이터 전처리 에이전트: 데이터 정리 등을 통해 분석할 데이터를 준비합니다.
  • 데이터 분석 에이전트: 데이터를 분석합니다.
  • 데이터 시각화 에이전트: 분석 출력을 시각화하여 인사이트를 도출합니다.
우선 각 에이전트의 system 프롬프트를 정의합니다. 이 프롬프트는 각 에이전트의 역할과 호출할 수 있는 도구를 지정합니다.
다음으로, 각 에이전트의 도구를 정의합니다. 분류 에이전트를 제외한 각 에이전트에는 역할에 맞는 전용 도구가 있습니다. 데이터 전처리 에이전트: 데이터 정제, 데이터 변환, 데이터 집계. 데이터 분석 에이전트: 통계 분석, 상관관계 분석, 회귀 분석. 데이터 시각화 에이전트: 막대 차트 생성, 선 차트 생성, 원형 차트 생성.

Weave로 멀티 에이전트 추적 활성화하기

에이전트와 도구를 정의했다면, 이제 이들을 서로 연결하고 Weave 트레이싱을 활성화할 차례입니다. 다음 작업을 수행하는 코드 로직을 작성하세요.
  • 사용자 쿼리를 멀티 에이전트 시스템에 전달합니다.
  • 멀티 에이전트 시스템의 내부 동작을 처리합니다.
  • 도구 Call을 실행합니다.
사용자 쿼리를 보면 호출해야 할 도구가 clean_data, start_analysis, use_line_chart임을 알 수 있습니다. 먼저 도구 Call을 실행하는 실행 함수를 정의하세요. Python 함수에 @weave.op() 데코레이터를 적용하면 언어 모델의 입력, 출력, 트레이스를 로깅하고 디버깅할 수 있습니다. 멀티 에이전트 시스템에는 많은 함수가 사용되지만, 각 함수 위에 @weave.op()만 추가하면 됩니다.
다음으로, 각 하위 에이전트의 도구 핸들러를 만드세요. 각 핸들러는 고유한 프롬프트와 도구 세트를 모델에 전달합니다. 그런 다음 모델의 출력은 도구 Call을 실행하는 실행 함수로 전달됩니다.
마지막으로, 사용자 쿼리 처리를 총괄하는 최상위 도구를 만드세요. 이 함수는 사용자 쿼리를 받아 모델에서 응답을 가져온 다음, 이를 다른 에이전트에 전달해 실행하도록 합니다.

멀티 에이전트 시스템 실행 및 Weave에서 시각화하기

모든 에이전트, 도구, 핸들러가 준비되었으므로 이제 시스템을 실행할 수 있습니다. 마지막으로 사용자 입력으로 기본 handle_user_message 함수를 실행하고 결과를 확인하세요.
Weave URL을 클릭하면 실행 트레이스를 확인할 수 있습니다. Traces 페이지에서는 입력과 출력을 확인할 수 있습니다. 이해를 돕기 위해 다이어그램에는 각 출력을 클릭했을 때 표시되는 결과의 스크린샷을 함께 넣었습니다. Weave는 OpenAI API와 통합되어 비용을 자동으로 계산합니다. 각 트레이스에는 비용과 지연 시간도 함께 표시됩니다. 비용 및 지연 시간과 함께 멀티 에이전트 실행을 보여주는 Weave Traces 페이지 행을 클릭하면 멀티 에이전트 시스템 내부에서 실행된 중간 프로세스를 확인할 수 있습니다. 예를 들어 analysis_agent의 입력과 출력은 구조화된 출력 형식으로 표시됩니다. OpenAI의 구조화된 출력은 에이전트 간 협업에 유용하지만, 시스템이 복잡해질수록 이러한 상호작용의 형식을 파악하기가 어려워집니다. Weave를 사용하면 이러한 중간 프로세스와 각 프로세스의 입력 및 출력을 자세히 살펴볼 수 있습니다.
분석 에이전트의 구조화된 입력과 출력을 보여주는 Weave 트레이스 상세 화면
Weave에서 트레이싱이 어떻게 처리되는지 자세히 살펴보세요.

결론

이 튜토리얼에서는 OpenAI의 구조화된 출력(structured output)으로 멀티 에이전트 시스템을 개발하고, Weave로 입력, 최종 출력, 중간 출력 형식을 추적하는 방법을 알아보았습니다. 이제 실제로 작동하는 예시가 준비되었으므로, 에이전트나 도구, 구조화된 응답 스키마를 추가하여 확장해 보세요.
마지막 수정일 2026년 9월 30일