Examples
Here are complete examples to help you get started with Go AI SDK.
Basic Agent
package main
import ( "context" "fmt" "log"
"github.com/iamanishx/go-ai/agent" "github.com/iamanishx/go-ai/provider" "github.com/iamanishx/go-ai/provider/bedrock")
func main() { ctx := context.Background()
bedrockProvider := bedrock.Create(bedrock.BedrockProviderSettings{ Region: "us-east-1", Profile: "myprofile", })
chatModel := bedrockProvider.Chat("anthropic.claude-3-sonnet-20240229-v1:0")
weatherTool := provider.Tool{ Name: "get_weather", Description: "Get weather for a location", Parameters: map[string]interface{}{ "type": "object", "properties": map[string]interface{}{ "location": map[string]interface{}{ "type": "string", "description": "City name", }, }, "required": []string{"location"}, }, Execute: func(input map[string]interface{}) (string, error) { location := input["location"].(string) return fmt.Sprintf("Weather in %s: Sunny, 72°F", location), nil }, }
toolAgent := agent.CreateToolLoopAgent(agent.ToolLoopAgentSettings{ Model: chatModel, Tools: []provider.Tool{weatherTool}, ExecuteTools: true, })
result, err := toolAgent.Generate(ctx, agent.AgentCallOptions{ Prompt: "What's the weather in San Francisco?", System: "You are a helpful assistant.", })
if err != nil { log.Fatal(err) }
fmt.Println(result.Text)}Streaming Example
stream, err := toolAgent.Stream(ctx, agent.AgentCallOptions{ Prompt: "Tell me a story",})
if err != nil { panic(err)}
defer stream.Close()
for part := range stream.Part() { switch part.Type { case "text-delta": fmt.Print(part.Text) case "tool-call": fmt.Printf("\n[Tool: %s]\n", part.ToolName) case "tool-result": fmt.Printf("[Result: %s]\n", part.ToolResult) case "finish": fmt.Printf("\n[Done: %s]\n", part.FinishReason) case "error": fmt.Printf("\n[Error: %v]\n", part.Error) }}MCP Example
mcpClient, err := mcp.CreateMCPClient(ctx, mcp.MCPClientConfig{ Transport: mcp.NewStdioClientTransport(mcp.StdioConfig{ Command: "npx", Args: []string{"-y", "@modelcontextprotocol/server-filesystem", "."}, Stderr: os.Stderr, }),})if err != nil { log.Fatal(err)}defer mcpClient.Close()
mcpToolsMap, err := mcpClient.Tools(ctx)if err != nil { log.Fatal(err)}
mcpTools := make([]provider.Tool, 0, len(mcpToolsMap))for _, tool := range mcpToolsMap { mcpTools = append(mcpTools, tool)}
toolAgent := agent.CreateToolLoopAgent(agent.ToolLoopAgentSettings{ Model: chatModel, Tools: mcpTools, ExecuteTools: true,})With Callbacks
toolAgent := agent.CreateToolLoopAgent(agent.ToolLoopAgentSettings{ Model: chatModel, Tools: []provider.Tool{weatherTool}, ExecuteTools: true, MaxSteps: 10,
OnStart: func(event agent.OnStartEvent) { fmt.Println("Agent started") },
OnStepStart: func(event agent.OnStepStartEvent) { fmt.Printf("Step %d started\n", event.StepNumber) },
OnStepFinish: func(event agent.OnStepFinishEvent) { fmt.Printf("Step %d finished: %s\n", event.StepNumber, event.Text) },
OnToolCallStart: func(event agent.OnToolCallStartEvent) { fmt.Printf("Calling tool: %s\n", event.ToolName) },
OnToolCallFinish: func(event agent.OnToolCallFinishEvent) { fmt.Printf("Result: %s\n", event.Output) },
OnFinish: func(event agent.OnFinishEvent) { fmt.Printf("Done. Final: %s\n", event.Text) },})Multiple Tools
tools := []provider.Tool{ { Name: "get_weather", Description: "Get weather for a location", Parameters: weatherSchema, Execute: getWeather, }, { Name: "calculate", Description: "Perform calculation", Parameters: calcSchema, Execute: calculate, }, { Name: "search", Description: "Search the web", Parameters: searchSchema, Execute: search, },}
toolAgent := agent.CreateToolLoopAgent(agent.ToolLoopAgentSettings{ Model: chatModel, Tools: tools, ExecuteTools: true,})Custom Stop Conditions
toolAgent := agent.CreateToolLoopAgent(agent.ToolLoopAgentSettings{ Model: chatModel, Tools: tools, MaxSteps: 5, // Stop after 5 steps})Tool with Error Handling
Execute: func(input map[string]interface{}) (string, error) { location, ok := input["location"].(string) if !ok { return "", fmt.Errorf("location is required") }
weather, err := fetchWeather(location) if err != nil { return "", fmt.Errorf("failed to fetch weather: %w", err) }
return weather, nil},Environment Variables Setup
# AWS credentialsexport AWS_REGION=us-east-1export AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLEexport AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
# Or use profileexport AWS_PROFILE=myprofile