Blades AI Agent 框架的 Anthropic Claude 模型提供器,支持 Direct API、AWS Bedrock 和 Google Vertex AI。
go get github.com/go-kratos/blades/contrib/claudeimport ( "context" "github.com/anthropics/anthropic-sdk-go/option" "github.com/go-kratos/blades" "github.com/go-kratos/blades/contrib/claude")
// Create client with API keyclient := claude.NewClient( option.WithAPIKey("sk-ant-..."),)
// Generate responsereq := &blades.ModelRequest{ Model: "claude-3-5-sonnet-20241022", Messages: []*blades.Message{ { Role: blades.RoleUser, Parts: []blades.Part{ blades.TextPart{Text: "What is the capital of France?"}, }, }, },}
resp, err := client.Generate(context.Background(), req)if err != nil { panic(err)}
// Access responseimport ( "github.com/anthropics/anthropic-sdk-go/option/bedrock" "github.com/go-kratos/blades/contrib/claude")
// Create client with AWS Bedrockclient := claude.NewClient( bedrock.WithLoadDefaultConfig(context.Background()),)
// Use same request/response pattern as aboveimport ( "github.com/anthropics/anthropic-sdk-go/option/bedrock" "github.com/go-kratos/blades/contrib/claude")
// Create client with AWS Bedrockclient := claude.NewClient( bedrock.WithLoadDefaultConfig(context.Background()),)
// Use same request/response pattern as aboveimport ( "github.com/anthropics/anthropic-sdk-go/option/vertex" "github.com/go-kratos/blades/contrib/claude")
// Create client with Google Vertex AIclient := claude.NewClient( vertex.WithGoogleAuth( context.Background(), "us-central1", // region "my-project-id", // projectID ),)
// Use same request/response pattern as above通过标准 API 启用 Claude 的推理能力:
import "github.com/go-kratos/blades"
// Configure thinking budgetthinkingBudget := int32(10000) // 10K tokens for reasoning
resp, err := client.Generate(context.Background(), req, blades.WithThinkingBudget(&thinkingBudget),)
// The response will include thinking blocks showing Claude's reasoning process// Access thinking content from the response messagesfor _, msg := range resp.Messages { for _, part := range msg.Parts { if textPart, ok := part.(blades.TextPart); ok { fmt.Println(textPart.Text) } }}resp, err := client.Generate(context.Background(), req, blades.WithMaxOutputTokens(4096), blades.WithTemperature(0.7), blades.WithTopP(0.9), blades.WithMaxIterations(5), // Tool calling iterations)定义工具并让 Claude 自动执行:
// Define a toolweatherTool := &blades.Tool{ Name: "get_weather", Description: "Get current weather for a location", Handle: func(ctx context.Context, arguments string) (string, error) { // Parse arguments and fetch weather return `{"temperature": 72, "condition": "sunny"}`, nil },}
// Add tools to requestreq := &blades.ModelRequest{ Model: "claude-3-5-sonnet-20241022", Tools: []*blades.Tool{weatherTool}, Messages: []*blades.Message{ { Role: blades.RoleUser, Parts: []blades.Part{ blades.TextPart{Text: "What's the weather in San Francisco?"}, }, }, },}
// Generate with automatic tool executionresp, err := client.Generate(context.Background(), req)
// Claude will automatically:// 1. Call the tool if needed// 2. Process the tool result// 3. Return the final response实时流式输出响应内容:
stream, err := client.NewStream(context.Background(), req)if err != nil { panic(err)}
for stream.Next() { resp, err := stream.Current() if err != nil { panic(err) }
for _, msg := range resp.Messages { for _, part := range msg.Parts { if textPart, ok := part.(blades.TextPart); ok { fmt.Print(textPart.Text) // Print as it streams } } }}
if err := stream.Err(); err != nil { panic(err)}该提供器针对常见问题返回特定错误:
import "github.com/go-kratos/blades/contrib/claude"
resp, err := client.Generate(ctx, req)if err != nil { switch err { case claude.ErrEmptyResponse: // Handle empty response case claude.ErrToolNotFound: // Handle missing tool case claude.ErrTooManyIterations: // Handle iteration limit default: // Handle other errors }}可用模型包括: