Skip to main content
Colab에서 사용해 보기 · GitHub 소스 Weave SDK를 사용하면 널리 사용되는 SDK나 맞춤형 하니스로 구축한 에이전트를 트레이스할 수 있습니다. 이 퀵스타트에서는 OpenTelemetry span을 생성하고 캡처할 수 있도록 맞춤형으로 구축한 멀티턴 에이전트에 Weave를 수동으로 통합하는 방법을 보여드립니다. 에이전트용 Weave를 개념적으로 이해하려면 에이전트 트레이싱을 참조하세요. Claude Agent SDK 또는 Codex와 같은 SDK나 하니스와 Weave를 통합하려는 경우 에이전트 인테그레이션 선택을 참조하세요. Weave는 빠르게 통합할 수 있도록 여러 에이전트 구축 SDK와 에이전트 하니스에 자동 패치됩니다.

배울 내용

이 퀵스타트를 마치면 Weave와 호환되는 OTel span을 생성하는 멀티턴 에이전트를 구현할 수 있습니다. 또한 Weave가 대화, 턴, LLM Call, 도구 Call을 에이전트 코드에 어떻게 대응시키는지도 이해하게 되므로, 동일한 패턴을 여러분의 맞춤형 에이전트에 적용할 수 있습니다. 이 가이드의 코드는 Wikipedia에서 정보를 찾아볼 수 있는 간단한 리서치 에이전트를 설정합니다. 이 에이전트는 세 가지 질문(세 개의 턴)을 하고, 답을 찾기 위해 언제 Wikipedia를 검색할지 LLM이 결정합니다. Weave는 모든 단계(대화, 각 질문, 각 AI 응답, 각 Wikipedia 조회)를 기록하므로 Weave Agents 뷰에서 어떤 일이 일어났는지 확인할 수 있습니다. 이 가이드에서는 다음 방법을 보여줍니다:
  • weave.init()를 사용해 에이전트 트레이싱용 Weave를 초기화합니다.
  • start_conversation / startConversationstart_turn / startTurn으로 대화와 턴을 시작합니다.
  • start_llm / startLLM으로 LLM Call을 래핑하고 사용량을 기록합니다.
  • start_tool / startTool로 도구 실행을 래핑하고 결과를 기록합니다.
  • 토큰 수와 비용이 표시되도록 전체 토큰 사용량과 과금 가능한 모델을 기록합니다.
  • 결과로 생성된 대화, 턴, 도구 Call을 Agents 뷰에서 확인합니다.

Weave SDK가 에이전트와 작동하는 방식

Weave SDK에는 에이전트를 위한 범용 OTel 수집 시스템이 포함되어 있으므로, Weave는 에이전트 코드의 모든 OTel span에서 정보를 캡처할 수 있습니다. 하지만 Weave UI의 Agents 뷰에서 에이전트 트레이스를 표시하려면, 다음 span은 Weave에서 특별히 처리해야 합니다. Python에서는 네 함수 모두 컨텍스트 관리자(with weave.start_*(...) as obj:)로 작동합니다. 종료 시에는 예외가 발생한 경우를 포함해 span을 종료하고 속성을 플러시합니다. TypeScript에서는 반환된 각 객체에 대해 .end()를 호출하세요. 예외가 발생하더라도 정리가 보장되도록 try { ... } finally { obj.end(); }를 사용하세요. gen_ai.usage.*gen_ai.agent.name과 같은 다른 GenAI semantic-convention attributes도 추가 정보 표시를 가능하게 하지만, 선택 사항입니다.

사전 요구 사항

  • W&B 계정 및 API 키.
  • OpenAI API 키.
  • Python 3.10+ (Python 예시용).
  • Node.js 18+ (TypeScript 예시에는 내장 fetch가 필요합니다).

패키지 설치

다음 패키지를 개발 환경에 설치하세요:

Weave 초기화

weave.init()는 W&B 인증을 수행하고 에이전트 span을 Agents 뷰로 전송하는 OTel 익스포터를 설정합니다. 팀에 해당 프로젝트가 없으면 Weave가 처음 데이터를 기록할 때 자동으로 생성합니다.

도구 정의하기

다음 코드는 에이전트의 Wikipedia 검색 도구와, 도구를 언제 어떻게 사용할지 지정하는 OpenAI 도구 스키마를 정의합니다.

트레이스된 멀티턴 에이전트 실행

도구와 Weave 초기화가 준비되면, 다음 단계는 이를 완전한 에이전트 루프로 결합하는 것입니다. 이 루프는 대화, 턴, LLM Call, 도구 Call이 서로 어떻게 중첩되는지 보여줍니다. 다음 예시에서는 단일 대화에서 세 번의 턴을 실행합니다. 각 턴은 다음과 같습니다.
  1. chat span을 열고 LLM이 도구를 Call할지 선택하게 합니다.
  2. LLM이 도구를 요청하면 해당 Call을 execute_tool span으로 감싸고, 그 결과를 다시 LLM에 전달합니다.
  3. 두 번째 chat span을 열어 최종 답변을 생성합니다.

토큰 사용량 및 비용 기록

chat span에는 토큰 사용량과 모델 ID가 포함됩니다. Weave는 사용량을 바탕으로 토큰 수를 표시하고, 사용량과 모델 ID를 바탕으로 비용을 계산합니다. 따라서 값이 불완전하거나 가격을 계산할 수 없으면 나머지 트레이스가 올바르게 보여도 0 in / 0 out 토큰 또는 Cost -로 표시됩니다. record(...)를 사용하면 이러한 필드(output_messages, response_id, reasoning 등 포함)를 한 번에 설정할 수 있습니다. 전달한 필드만 적용됩니다. 비용이 표시되려면 다음 두 가지가 모두 정확해야 합니다.
  • 완전한 사용량. input_tokens는 캐시된 토큰을 포함한 전체 입력입니다. Weave는 캐시 읽기와 캐시 쓰기에 각각 별도의 요율을 적용하고 이를 입력 총계에서 차감하므로, cache_read_input_tokenscache_creation_input_tokens는 이를 포함한 전체 input_tokens함께 보고해야 합니다. 프롬프트 캐싱을 지원하는 공급자(예: Anthropic)의 경우 캐시된 토큰이 입력의 대부분을 차지하는 일이 흔하므로, 이를 누락하면 사용량과 비용이 거의 0으로 표시됩니다.
  • 가격 계산이 가능한 모델 ID. 비용은 모델을 조회해 계산됩니다. Weave는 response_model(공급자가 실제로 서빙한 정확한 모델)을 우선 사용하고, 없으면 start_llm에 전달한 model을 사용합니다. opussonnet 같은 별칭은 가격 계산이 불가능하므로 Cost -로 표시됩니다. 따라서 응답이 반환한 구체적인 ID(resp.model)를 response_model로 전달하세요.
OpenAI는 캐시된 토큰을 prompt_tokens에 포함해 계산하므로 위 예시는 그대로 매핑됩니다. Anthropic은 캐시된 토큰을 input_tokens별도로 보고하므로, Weave가 가격을 계산하는 총계에 다시 더해야 합니다.

Agents 뷰에서 에이전트 트레이스 확인하기

weave.init()가 실행되면 다음을 확인할 수 있는 프로젝트 링크가 출력됩니다.
  • Agents 탭에 research-bot에 대한 행 하나
  • 세 개의 턴이 포함된 대화 하나
  • 각 턴(invoke_agent) 안에 중첩된 chat span 두 개와 execute_tool span 하나
  • chat의 토큰 수, 지연 시간, 모델, 그리고 전체 메시지 교환 내용
아무 턴이나 클릭하여 입력, 출력, 도구 인수, 도구 결과를 확인하세요. 자체 UI에서 Weave Agents 뷰의 대화로 딥링크하려면 entity, 프로젝트, 대화 id를 사용해 URL을 구축하세요. weave.init()entityproject를 포함하는 클라이언트를 반환하고, start_conversationconversation_id를 제공합니다.

다음 단계