147 lines
3.9 KiB
Markdown
147 lines
3.9 KiB
Markdown
# Claude API — Go
|
|
|
|
> **Note:** The Go SDK supports the Claude API and beta tool use with `BetaToolRunner`. Agent SDK is not yet available for Go.
|
|
|
|
## Installation
|
|
|
|
```bash
|
|
go get github.com/anthropics/anthropic-sdk-go
|
|
```
|
|
|
|
## Client Initialization
|
|
|
|
```go
|
|
import (
|
|
"github.com/anthropics/anthropic-sdk-go"
|
|
"github.com/anthropics/anthropic-sdk-go/option"
|
|
)
|
|
|
|
// Default (uses ANTHROPIC_API_KEY env var)
|
|
client := anthropic.NewClient()
|
|
|
|
// Explicit API key
|
|
client := anthropic.NewClient(
|
|
option.WithAPIKey("your-api-key"),
|
|
)
|
|
```
|
|
|
|
---
|
|
|
|
## Basic Message Request
|
|
|
|
```go
|
|
response, err := client.Messages.New(context.TODO(), anthropic.MessageNewParams{
|
|
Model: anthropic.ModelClaudeOpus4_6,
|
|
MaxTokens: 1024,
|
|
Messages: []anthropic.MessageParam{
|
|
anthropic.NewUserMessage(anthropic.NewTextBlock("What is the capital of France?")),
|
|
},
|
|
})
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
fmt.Println(response.Content[0].Text)
|
|
```
|
|
|
|
---
|
|
|
|
## Streaming
|
|
|
|
```go
|
|
stream := client.Messages.NewStreaming(context.TODO(), anthropic.MessageNewParams{
|
|
Model: anthropic.ModelClaudeOpus4_6,
|
|
MaxTokens: 1024,
|
|
Messages: []anthropic.MessageParam{
|
|
anthropic.NewUserMessage(anthropic.NewTextBlock("Write a haiku")),
|
|
},
|
|
})
|
|
|
|
for stream.Next() {
|
|
event := stream.Current()
|
|
switch eventVariant := event.AsAny().(type) {
|
|
case anthropic.ContentBlockDeltaEvent:
|
|
switch deltaVariant := eventVariant.Delta.AsAny().(type) {
|
|
case anthropic.TextDelta:
|
|
fmt.Print(deltaVariant.Text)
|
|
}
|
|
}
|
|
}
|
|
if err := stream.Err(); err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## Tool Use
|
|
|
|
### Tool Runner (Beta — Recommended)
|
|
|
|
**Beta:** The Go SDK provides `BetaToolRunner` for automatic tool use loops via the `toolrunner` package.
|
|
|
|
```go
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"log"
|
|
|
|
"github.com/anthropics/anthropic-sdk-go"
|
|
"github.com/anthropics/anthropic-sdk-go/toolrunner"
|
|
)
|
|
|
|
// Define tool input with jsonschema tags for automatic schema generation
|
|
type GetWeatherInput struct {
|
|
City string `json:"city" jsonschema:"required,description=The city name"`
|
|
}
|
|
|
|
// Create a tool with automatic schema generation from struct tags
|
|
weatherTool, err := toolrunner.NewBetaToolFromJSONSchema(
|
|
"get_weather",
|
|
"Get current weather for a city",
|
|
func(ctx context.Context, input GetWeatherInput) (anthropic.BetaToolResultBlockParamContentUnion, error) {
|
|
return anthropic.BetaToolResultBlockParamContentUnion{
|
|
OfText: &anthropic.BetaTextBlockParam{
|
|
Text: fmt.Sprintf("The weather in %s is sunny, 72°F", input.City),
|
|
},
|
|
}, nil
|
|
},
|
|
)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
// Create a tool runner that handles the conversation loop automatically
|
|
runner := client.Beta.Messages.NewToolRunner(
|
|
[]anthropic.BetaTool{weatherTool},
|
|
anthropic.BetaToolRunnerParams{
|
|
BetaMessageNewParams: anthropic.BetaMessageNewParams{
|
|
Model: anthropic.ModelClaudeOpus4_6,
|
|
MaxTokens: 1024,
|
|
Messages: []anthropic.BetaMessageParam{
|
|
anthropic.NewBetaUserMessage(anthropic.NewBetaTextBlock("What's the weather in Paris?")),
|
|
},
|
|
},
|
|
MaxIterations: 5,
|
|
},
|
|
)
|
|
|
|
// Run until Claude produces a final response
|
|
message, err := runner.RunToCompletion(context.Background())
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
fmt.Println(message.Content[0].Text)
|
|
```
|
|
|
|
**Key features of the Go tool runner:**
|
|
|
|
- Automatic schema generation from Go structs via `jsonschema` tags
|
|
- `RunToCompletion()` for simple one-shot usage
|
|
- `All()` iterator for processing each message in the conversation
|
|
- `NextMessage()` for step-by-step iteration
|
|
- Streaming variant via `NewToolRunnerStreaming()` with `AllStreaming()`
|
|
|
|
### Manual Loop
|
|
|
|
For fine-grained control, use raw tool definitions via JSON schema. See the [shared tool use concepts](../shared/tool-use-concepts.md) for the tool definition format and agentic loop pattern.
|