메인 콘텐츠로 건너뛰기
Open In Colab 코드에 Weave를 연동하면, PythonTypeScript용 Anthropic SDK를 통해 이루어지는 LLM 호출을 자동으로 추적하고 기록합니다. Weave는 Anthropic의 Messages.create 메서드를 자동으로 호출해 이를 수행합니다.

트레이스

코드에 weave.init("your-team-name/your-project-name")를 추가하면 Weave가 Anthropic SDK에 대한 트레이스를 자동으로 캡처합니다. weave.init()의 인자로 팀 이름을 지정하지 않으면 Weave는 출력 내용을 기본 W&B 엔터티에 기록합니다. 프로젝트 이름을 지정하지 않으면 Weave는 초기화에 실패합니다. 다음 예시는 Anthropic에 대한 기본 호출에 Weave를 통합하는 방법을 보여줍니다.
import weave    
# Anthropic 라이브러리를 평소처럼 사용합니다
import os
from anthropic import Anthropic

weave.init("anthropic_project")

client = Anthropic(
    api_key=os.environ.get("ANTHROPIC_API_KEY"),
)

message = client.messages.create(
    max_tokens=1024,
    messages=[
        {
            "role": "user",
            "content": "Tell me a joke about a dog",
        }
    ],
    model="claude-3-opus-20240229",
)
print(message.content)
코드에 weave.init()을 포함하면 Weave가 트레이스 정보를 자동으로 캡처하고 링크를 제공합니다. 링크를 클릭하면 Weave UI에서 트레이스를 확인할 수 있습니다. anthropic_trace.png

나만의 op으로 래핑하기

Weave op은 실험을 진행하면서 코드에 자동으로 버전을 매기고, 그 입력과 출력을 캡처합니다. @weave.op() (Python) 데코레이터를 사용하거나 weave.op() (TypeScript)로 래핑해 Anthropic.messages.create를 호출하면 Weave가 입력과 출력을 자동으로 추적합니다. 다음 예제는 함수를 추적하는 방법을 보여줍니다:
import weave
import os
from anthropic import Anthropic

weave.init("anthropic_project")
client = Anthropic(
    api_key=os.environ.get("ANTHROPIC_API_KEY"),
)

@weave.op()
def call_anthropic(user_input:str, model:str) -> str:
    message = client.messages.create(
    max_tokens=1024,
    messages=[
        {
            "role": "user",
            "content": user_input,
        }
        ],
        model=model,
    )
    return message.content[0].text

@weave.op()
def generate_joke(topic: str) -> str:
    return call_anthropic(f"Tell me a joke about {topic}", model="claude-3-haiku-20240307")

print(generate_joke("chickens"))
print(generate_joke("cars"))
함수를 weave.op()으로 데코레이트하거나 래핑하면 Weave가 함수의 코드, 입력, 출력 값을 캡처합니다. 중첩된 함수를 포함해 원하는 어떤 함수든 op으로 추적할 수 있습니다. anthropic_ops.png

더 쉽게 실험하기 위한 Model 생성

weave.Model 클래스는 Weave Python SDK에서만 사용할 수 있습니다. TypeScript에서는 구조화된 파라미터를 가진 함수를 추적하기 위해 weave.op() 래퍼를 사용하세요.
움직이는 요소가 많으면 실험을 체계적으로 관리하기가 어렵습니다. Model 클래스를 사용하면 시스템 프롬프트나 사용하는 모델처럼 앱의 실험 세부 정보를 캡처하고 구성할 수 있습니다. 이를 통해 앱의 다양한 버전을 정리하고 비교할 수 있습니다. 코드 버전 관리와 입출력 캡처뿐만 아니라, Model은 애플리케이션의 동작을 제어하는 구조화된 파라미터도 캡처합니다. 이를 통해 어떤 파라미터 조합이 가장 잘 동작하는지 찾을 수 있습니다. 또한 Weave ModelserveEvaluation과 함께 사용할 수도 있습니다. 다음 예제에서는 modeltemperature를 바꿔가며 실험해 볼 수 있습니다:
import weave    
# anthropic 라이브러리를 평소처럼 사용합니다
import os
from anthropic import Anthropic
weave.init('joker-anthropic')

class JokerModel(weave.Model): # `weave.Model`로 변경
  model: str
  temperature: float
  
  @weave.op()
  def predict(self, topic): # `predict`로 변경
    client = Anthropic()
    message = client.messages.create(
    max_tokens=1024,
    messages=[
        {
            "role": "user",
            "content": f"Tell me a joke about {topic}",
        }
        ],
        model=self.model,
        temperature=self.temperature
    )
    return message.content[0].text


joker = JokerModel(
    model="claude-3-haiku-20240307",
    temperature = 0.1)
result = joker.predict("Chickens and Robots")
print(result)
이 값들 가운데 하나라도 변경할 때마다 Weave는 새로운 버전의 JokerModel을 생성하고 추적합니다. 이를 통해 추적 데이터를 코드 변경 사항과 연결할 수 있고, 어떤 구성(configuration)이 사용 사례에 가장 적합한지 판단하는 데 도움이 됩니다. anthropic_model.png

도구(함수 호출)

Anthropic은 Claude가 함수 호출을 요청할 수 있도록 하는 도구 인터페이스를 제공합니다. Weave는 대화 전체에 걸쳐 도구 정의, 도구 사용 요청, 도구 결과를 자동으로 추적합니다. 다음은 Anthropic 도구 구성의 일부 예시입니다:
message = client.messages.create(
    max_tokens=1024,
    messages=[
        {
            "role": "user",
            "content": "What's the weather like in San Francisco?",
        }
    ],
    tools=[
        {
            "name": "get_weather",
            "description": "Get the current weather in a given location",
            "input_schema": {
                "type": "object",
                "properties": {
                    "location": {
                        "type": "string",
                        "description": "The city and state, e.g. San Francisco, CA",
                    }
                },
                "required": ["location"],
            },
        },
    ],
    model=model,
)

print(message)
Weave는 대화의 각 단계에서 도구 정의, Claude의 도구 사용 요청, 도구 결과를 자동으로 기록합니다. anthropic_tool.png