원문: Building a Multi-Agent System with OpenAI Agents SDK on Databricks저자: David Huang, Qian Yu — Specialist Solutions Architects @ Databricks
AI 에이전트의 시대
AI 에이전트 구축의 핵심 요소
성공적인 에이전틱 시스템을 만들려면 다음과 같은 몇 가지 핵심 구성 요소가 필요합니다.구현 아키텍처
이 데모에서는 다음을 지원하는 멀티 에이전트 보험 챗봇을 구축합니다.- 멀티턴(multi-turn) 대화
- 데이터베이스에서의 정형 데이터 조회
- 벡터 데이터베이스에서의 비정형 정보 검색
- 모델 등록 및 REST API 배포
Unity Catalog 함수를 통한 도구 접근
도구 호출(Tool calling)을 통해 LLM은 특정 함수를 실행하는 구조화된 JSON 응답을 생성할 수 있습니다. LLM이 함수를 직접 실행하는 것이 아니라, 함수 호출을 신호로 보내는 방식입니다.UC 함수 생성
보험 에이전트를 지원하는 두 가지 함수를 생성합니다. search_claims_details_by_policy_no: 정책 번호로 고객 청구 이력을 조회하는 SQL 함수로, UC의 3단계 네임스페이스 규칙을 따릅니다. policy_docs_vector_search: 근사 최근접 이웃(Approximate Nearest Neighbor) 알고리즘을 사용해 Vector Search 인덱스에서 관련 문서 청크를 검색하는 Databricks SQL AI 함수입니다. Databricks AI Bridge의VectorSearchRetrieverTool을 통한 대안적 구현 방법도 존재합니다.
OpenAI Agents SDK용 함수 래핑
Unity Catalog AI(UC-AI) 라이브러리는 OpenAI, Anthropic, CrewAI 등 다양한 프레임워크와 통합됩니다. 게시 시점에서 OpenAI Agents SDK와의 완전한 통합은 진행 중이었지만, UC-AI 클라이언트는 UC 함수를 직접 실행할 수 있습니다. UC 함수는function_tool 데코레이터로 래핑해야 합니다. Pydantic 모델은 에이전트, 도구, 핸드오프에 컨텍스트를 주입하면서 출력 타입을 강제합니다. UserInfo 클래스는 고객 ID와 정책 번호를 관리하며, 컨텍스트는 코드 실행 로컬에만 유지되고 LLM으로는 전달되지 않습니다.
OpenAI Agents SDK와 MLflow Tracing을 활용한 오케스트레이션
멀티 에이전트 시스템은 언어 모델들이 “핸드오프(handoff)” 메커니즘을 통해 협력하며 문제를 해결합니다. 프롬프트, 컨텍스트, 출력이 에이전트 간에 전달되는 이 핸드오프 패턴이 OpenAI Agents SDK의 핵심입니다.개별 에이전트 정의
각 에이전트는 특정 작업, 루틴, 지정된 LLM, 접근 가능한 도구, 그리고 원하는 보호 장치가 필요합니다. OpenAI API 키가 환경 변수로 설정되어 있는지 확인하세요.instructions 필드에는 에이전트 프롬프트가 들어갑니다. 선택적으로 사용하는 RECOMMENDED_PROMPT_PREFIX는 핸드오프 기능을 향상시킵니다. tools 필드는 사용 가능한 함수 목록을 지정하고, model 필드는 기반 LLM을 지정하며 모든 OpenAI 모델을 지원합니다.
Anthropic의 Claude 3.7 Sonnet(현재 Databricks에서 네이티브로 사용 가능)과 같은 대안 모델의 경우, OpenAIChatCompletionsModel 객체를 다음과 같이 정의합니다.
트리아지 에이전트 생성
트리아지(Triage) 에이전트는 질문을 적절한 전문 에이전트로 라우팅합니다.에이전트와 대화하기
Runner.run() 메서드는 트리아지 에이전트를 시작 지점으로 사용하며, 사용자 입력과 컨텍스트를 인수로 받습니다.
MLflow Tracing을 통한 실행 가시성
MLflow Tracing은 워크플로우 실행에 대한 상세한 정보를 캡처하여 각 단계의 입력, 출력, 메타데이터를 기록합니다. 이를 통해 디버깅과 동작 분석이 용이해집니다.mlflow.start_span()으로 실행을 감싸면 전체 채팅 세션이 단일 트레이스에 캡처되어, 핸드오프와 도구 사용이 발생한 중간 단계를 확인할 수 있습니다. 트레이싱 UI는 시스템 프롬프트, 입력 문자열, 사용 가능한 도구, 에이전트 응답, 모델 선택 및 토큰 수 같은 속성을 포함한 계층적 실행 구조를 보여줍니다.
OpenAIChatCompletionsModel을 사용하면 OpenAI 모델 사용을 유지하면서 MLflow 트레이싱을 Databricks 내에서만 수행할 수 있습니다.
Mosaic AI Agent Framework로 로깅, 등록, 배포하기
프로덕션 수준의 에이전트 품질을 확보하려면 도메인 전문가의 피드백을 수집하는 엄격한 평가 루프가 필요합니다. Mosaic AI Agent Framework는 포괄적인 평가를 지원하며, 상세한 평가 방법론은 별도 콘텐츠에서 다룰 예정입니다. 배포는 크게 세 단계로 이루어집니다.1단계: MLflow ChatAgent 인터페이스로 에이전트 래핑
ChatAgent 인터페이스는 다중 메시지 반환, 중간 도구 호출 단계, 도구 호출 확인, 멀티 에이전트 시나리오를 지원합니다. ChatAgent를 상속하는 Python 클래스를 생성합니다.
predict()와 predict_stream() 메서드를 구현합니다.
2단계: 모델 로깅 및 등록
챗봇은 Databricks 데이터에 접근해야 하므로, 의존 리소스를 지정하여 자동 인증 패스스루(authentication passthrough)가 이루어지도록 MLflow를 통해 모델을 로깅합니다.3단계: REST API 엔드포인트로 배포
agents.deploy() 함수를 사용해 챗봇을 배포합니다.
- REST API 엔드포인트: 다운스트림 애플리케이션, 테스트를 위한 AI Playground, 배치 추론 워크플로우와 통합됩니다.
- Review App: 도메인 전문가의 피드백 로깅을 가능하게 하며,
payload_request_logs와payload_assessment_logsDelta 테이블에 자동으로 업데이트됩니다.