학습 내용
이 퀵스타트를 마치면 Weave와 호환되는 OTel span을 내보내는 멀티턴 에이전트를 직접 실행해 볼 수 있습니다. 또한 Weave가 대화, 턴, LLM Call, 도구 Call을 에이전트 코드에 어떻게 매핑하는지 이해할 수 있으므로, 같은 패턴을 직접 만든 맞춤형 에이전트에도 적용할 수 있습니다. 이 가이드의 코드는 Wikipedia에서 정보를 찾아볼 수 있는 간단한 리서치 에이전트를 구성합니다. 이 에이전트는 세 가지 질문(세 번의 턴)을 던지며, Wikipedia에서 답을 검색할 시점은 LLM이 판단합니다. Weave는 모든 단계(대화, 각 질문, 각 AI 응답, 각 Wikipedia 조회)를 기록하므로 Weave Agents 뷰에서 어떤 일이 일어났는지 확인할 수 있습니다. 이 가이드에서는 다음 내용을 다룹니다.weave.init()으로 에이전트 트레이싱용 Weave를 초기화합니다.start_conversation/startConversation및start_turn/startTurn으로 대화와 턴을 시작합니다.start_llm/startLLM으로 LLM Call을 래핑하고 사용량을 기록합니다.start_tool/startTool로 도구 실행을 래핑하고 결과를 기록합니다.- 토큰 수와 비용이 표시되도록 전체 토큰 사용량과 가격 산정이 가능한 모델을 기록합니다.
- 생성된 대화, 턴, 도구 Call을 Agents 뷰에서 확인합니다.
Weave SDK가 에이전트와 함께 작동하는 방식
Weave SDK에는 에이전트용 범용 OTel 수집 시스템이 포함되어 있어, Weave는 에이전트 코드의 모든 OTel span에서 정보를 캡처할 수 있습니다. 다만 Weights & Biases UI의 Agents 뷰에 에이전트의 트레이스를 렌더링하려면 Weave가 다음 span을 별도로 처리해야 합니다.
Python에서는 네 가지 함수 모두 컨텍스트 관리자(
with weave.start_*(...) as obj:)로 작동합니다. 블록을 벗어나면 예외가 발생한 경우에도 span을 종료하고 속성을 플러시합니다. TypeScript에서는 반환된 각 객체에서 .end()를 호출하세요. 예외가 발생해도 정리 작업이 확실히 수행되도록 try { ... } finally { obj.end(); }를 사용하세요.
gen_ai.usage.*, gen_ai.agent.name 등 그 밖의 GenAI 시맨틱 규칙 속성을 사용하면 추가 렌더링이 가능하지만, 필수는 아닙니다.
사전 요구 사항
- CoreWeave Forge 계정 및 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이 어떻게 중첩되는지 확인할 수 있습니다. 다음 예시에서는 하나의 대화에서 세 개의 턴을 실행합니다. 각 턴은 다음과 같이 동작합니다.chatspan을 열고 LLM이 도구 호출 여부를 결정하도록 합니다.- LLM이 도구를 요청하면 해당 호출을 감싸는
execute_toolspan을 열고, 그 결과를 LLM에 다시 전달합니다. - 두 번째
chatspan을 열어 최종 답변을 생성합니다.
토큰 사용량 및 비용 기록
각chat span에는 토큰 사용량과 모델 ID가 포함됩니다. Weave는 사용량을 바탕으로 토큰 수를 표시하고, 사용량과 모델 ID를 함께 사용해 비용을 산출합니다. 따라서 값이 불완전하거나 가격을 책정할 수 없으면 트레이스의 나머지 부분이 정상으로 보이더라도 토큰이 0 in / 0 out으로 표시되거나 비용이 Cost -로 표시됩니다. record(...)를 사용하면 이러한 필드(output_messages, response_id, reasoning 등 포함)를 한 번의 호출로 설정할 수 있습니다. 이때 전달한 필드만 적용됩니다.
비용이 표시되려면 다음 두 가지 조건을 충족해야 합니다.
- 완전한 사용량.
input_tokens는 캐시된 토큰을 포함한 전체 입력 토큰 수입니다. Weave는 캐시 읽기와 캐시 쓰기에 각각의 요율을 적용하고 이를 입력 합계에서 차감합니다. 따라서cache_read_input_tokens와cache_creation_input_tokens는 이들을 포함한 전체input_tokens와 함께 보고해야 합니다. 프롬프트 캐싱을 지원하는 공급자(예: Anthropic)에서는 캐시된 토큰이 입력의 대부분을 차지하는 경우가 많으므로, 이를 누락하면 사용량과 비용이 거의 0으로 표시됩니다. - 가격 책정이 가능한 모델 ID. 비용은 모델을 기준으로 조회됩니다. Weave는
response_model(공급자가 실제로 서빙한 정확한 모델)을 우선 사용하고, 이 값이 없으면start_llm에 전달한model을 사용합니다.opus나sonnet같은 별칭으로는 가격을 책정할 수 없어Cost -로 표시되므로, 응답에서 반환된 구체적인 ID(resp.model)를response_model로 전달하세요.
prompt_tokens에 포함해 집계하므로 위 예시를 그대로 적용할 수 있습니다. 반면 Anthropic은 캐시된 토큰을 input_tokens와 별도로 보고하므로, Weave가 가격 책정에 사용하는 합계에 이를 다시 더해야 합니다.
Agents 뷰에서 에이전트 트레이스 확인하기
weave.init()이 실행되면 프로젝트 링크가 출력됩니다. 이 링크에서 다음 항목을 확인할 수 있습니다.
- Agents 탭의
research-bot행 - 턴 세 개로 구성된 대화 하나
- 두 개의
chatspan과 하나의execute_toolspan이 중첩된 각 턴(invoke_agent) - 각
chat의 토큰 수, 지연 시간, 모델, 전체 메시지 교환 내용
앱에서 대화로 연결하기
자체 UI에서 Weave Agents 뷰의 대화로 바로 이동하는 딥 링크를 만들려면 entity, 프로젝트, 대화 ID를 조합해 URL을 구성하세요.weave.init()은 entity와 project를 담은 클라이언트를 반환하고, start_conversation은 conversation_id를 제공합니다.
다음 단계
- Weave로 에이전트 트레이싱하는 방법과 Weave SDK에서 사용 가능한 기능 및 옵션을 알아보세요.
- Weave를 에이전트와 통합하는 다른 방법은 에이전트 인테그레이션 선택을 참조하세요.