메인 콘텐츠로 건너뛰기
이 문서는 대화형 노트북입니다. 로컬에서 실행하거나 다음 링크를 사용할 수 있습니다.
이 튜토리얼에서는 OpenAI의 구조화된 출력 기능을 사용하는 멀티 에이전트 시스템을 구축하는 방법과 Weave로 에이전트 간 상호작용을 트레이스하는 방법을 설명합니다. 이 튜토리얼을 마치면 중간 입력과 출력이 Weave UI에 표시되는 4개 에이전트 데이터 분석 파이프라인을 만들 수 있습니다. OpenAI는 강한 어조의 프롬프트 없이도 모델이 사용자가 제공한 JSON 스키마를 항상 준수하는 응답을 생성할 수 있도록 Structured Outputs를 릴리스했습니다. Structured Outputs를 사용하면 형식이 올바르지 않은 응답에 대해 검증하거나 재시도할 필요가 없습니다. 매개변수 strict: true를 사용하면 응답이 제공된 스키마를 준수하도록 보장할 수 있습니다. 멀티 에이전트 시스템에서 구조화된 출력은 에이전트 간에 일관되고 예측 가능하게 처리할 수 있는 데이터를 생성합니다. 또한 명시적인 거부를 지원하며, 재시도나 응답 검증이 필요하지 않습니다.
Source: 이 쿡북은 OpenAI의 구조화된 출력 예시 코드를 바탕으로 하며, Weave를 사용해 시각화를 개선할 수 있도록 일부 수정했습니다.

의존성 설치

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

에이전트 설정

Weave를 초기화했으면 시스템을 구성하는 에이전트를 정의합니다. 이 튜토리얼의 사용 사례는 데이터 분석 작업입니다. 먼저 4개의 에이전트로 구성된 시스템을 설정하세요:
  • 트리아지 에이전트: 어떤 에이전트를 호출할지 결정합니다.
  • 데이터 전처리 에이전트: 예를 들어 데이터를 정리해 분석용으로 준비합니다.
  • 데이터 분석 에이전트: 데이터를 분석합니다.
  • 데이터 시각화 에이전트: 분석의 출력을 시각화해 인사이트를 도출합니다.
먼저 각 에이전트의 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의 구조화된 출력과 Weave를 사용해 입력, 최종 출력, 중간 출력 형식을 추적하는 멀티 에이전트 시스템을 개발하는 방법을 알아보았습니다. 이제 추가 에이전트, 도구 또는 구조화된 응답 스키마로 확장할 수 있는 실제로 동작하는 예시를 갖추게 되었습니다.