Amazon Bedrock

Weave는 AWS의 완전 관리형 서비스인 Amazon Bedrock을 통해 이루어진 LLM 호출을 자동으로 추적하고 기록합니다. Amazon Bedrock은 통합 API를 통해 주요 AI 기업의 기반 모델을 제공합니다. Amazon Bedrock에서 Weave로 LLM 호출을 기록하는 여러 방법이 있습니다. 다음을 사용할 수 있습니다 weave.op Bedrock 모델에 대한 모든 호출을 추적하기 위한 재사용 가능한 작업을 만들 수 있습니다. 선택적으로, Anthropic 모델을 사용하는 경우 Weave의 Anthropic과의 내장 통합을 사용할 수 있습니다.
최신 튜토리얼은 다음을 방문하세요 Weights & Biases on Amazon Web Services.

Traces

Weave는 Bedrock API 호출에 대한 추적을 자동으로 캡처합니다. Weave를 초기화하고 클라이언트를 패치한 후 평소와 같이 Bedrock 클라이언트를 사용할 수 있습니다:
import weave
import boto3
import json
from weave.integrations.bedrock.bedrock_sdk import patch_client

weave.init("my_bedrock_app")

# Create and patch the Bedrock client
client = boto3.client("bedrock-runtime")
patch_client(client)

# Use the client as usual
response = client.invoke_model(
    modelId="anthropic.claude-3-5-sonnet-20240620-v1:0",
    body=json.dumps({
        "anthropic_version": "bedrock-2023-05-31",
        "max_tokens": 100,
        "messages": [
            {"role": "user", "content": "What is the capital of France?"}
        ]
    }),
    contentType='application/json',
    accept='application/json'
)
response_dict = json.loads(response.get('body').read())
print(response_dict["content"][0]["text"])
사용하는 converse API:
messages = [{"role": "user", "content": [{"text": "What is the capital of France?"}]}]

response = client.converse(
    modelId="anthropic.claude-3-5-sonnet-20240620-v1:0",
    system=[{"text": "You are a helpful AI assistant."}],
    messages=messages,
    inferenceConfig={"maxTokens": 100},
)
print(response["output"]["message"]["content"][0]["text"])

자체 ops로 래핑하기

다음을 사용하여 재사용 가능한 작업을 만들 수 있습니다 @weave.op() 데코레이터. 다음은 invoke_modelconverse APIs:
@weave.op
def call_model_invoke(
    model_id: str,
    prompt: str,
    max_tokens: int = 100,
    temperature: float = 0.7
) -> dict:
    body = json.dumps({
        "anthropic_version": "bedrock-2023-05-31",
        "max_tokens": max_tokens,
        "temperature": temperature,
        "messages": [
            {"role": "user", "content": prompt}
        ]
    })

    response = client.invoke_model(
        modelId=model_id,
        body=body,
        contentType='application/json',
        accept='application/json'
    )
    return json.loads(response.get('body').read())

@weave.op
def call_model_converse(
    model_id: str,
    messages: str,
    system_message: str,
    max_tokens: int = 100,
) -> dict:
    response = client.converse(
        modelId=model_id,
        system=[{"text": system_message}],
        messages=messages,
        inferenceConfig={"maxTokens": max_tokens},
    )
    return response

더 쉬운 실험을 위한 Model 만들기

실험을 더 잘 구성하고 매개변수를 캡처하기 위해 Weave Model을 만들 수 있습니다. 다음은 converse API:
class BedrockLLM(weave.Model):
    model_id: str
    max_tokens: int = 100
    system_message: str = "You are a helpful AI assistant."

    @weave.op
    def predict(self, prompt: str) -> str:
        "Generate a response using Bedrock's converse API"
        
        messages = [{
            "role": "user",
            "content": [{"text": prompt}]
        }]

        response = client.converse(
            modelId=self.model_id,
            system=[{"text": self.system_message}],
            messages=messages,
            inferenceConfig={"maxTokens": self.max_tokens},
        )
        return response["output"]["message"]["content"][0]["text"]

# Create and use the model
model = BedrockLLM(
    model_id="anthropic.claude-3-5-sonnet-20240620-v1:0",
    max_tokens=100,
    system_message="You are an expert software engineer that knows a lot of programming. You prefer short answers."
)
result = model.predict("What is the best way to handle errors in Python?")
print(result)
이 접근 방식을 통해 실험 버전을 관리하고 Bedrock 기반 애플리케이션의 다양한 구성을 쉽게 추적할 수 있습니다.

더 알아보기

Weave와 함께 Amazon Bedrock 사용에 대해 자세히 알아보기

Weave Playground에서 Bedrock 시도하기

설정 없이 Weave UI에서 Amazon Bedrock 모델을 실험해 보시겠습니까? LLM Playground.

Report: Compare LLMs on Bedrock for text summarization with Weave

The Compare LLMs on Bedrock for text summarization with Weave 보고서는 요약 작업을 위해 LLM을 평가하고 비교하기 위해 Bedrock과 Weave를 함께 사용하는 방법을 설명하며, 코드 샘플이 포함되어 있습니다.