Skip to main content

Agent

agent.Agent is the interface implemented by autonomous agents in the Go AI SDK. It lives in github.com/digitallysavvy/go-ai/pkg/agent, not pkg/ai. The SDK's concrete implementation is ToolLoopAgent, created with agent.NewToolLoopAgent.

Signature​

type Agent interface {
// Version returns the agent interface specification version.
Version() string

// ID returns the optional agent identifier.
ID() string

// Tools returns the tools that the agent can use.
Tools() []types.Tool

// Generate runs the agent with per-call options and returns the core
// GenerateText result.
Generate(ctx context.Context, opts AgentGenerateOptions) (*ai.GenerateTextResult, error)

// Stream streams the agent with per-call options.
Stream(ctx context.Context, opts AgentStreamOptions) (*ai.StreamTextResult, error)

// Execute runs the agent with the given prompt and returns the final result
Execute(ctx context.Context, prompt string) (*AgentResult, error)

// ExecuteWithMessages runs the agent with a message history
ExecuteWithMessages(ctx context.Context, messages []types.Message) (*AgentResult, error)
}

Return Value​

AgentResult​

FieldTypeDescription
TextstringFinal text output
OutputinterfaceParsed/structured final output when an output strategy is configured
Steps[]types.StepResultAll steps taken by the agent
ToolResults[]types.ToolResultAll tool results from agent execution
Delegations[]agent.SubagentDelegationSubagent delegations during execution
FinishReasontypes.FinishReasonFinal finish reason
StopReasonstringReason string from the StopCondition that stopped the loop; empty if the agent ended naturally
Usagetypes.UsageTotal usage across all steps
Warnings[]types.WarningWarnings from any step

Examples​

Basic Agent​

package main

import (
"context"
"fmt"
"log"

"github.com/digitallysavvy/go-ai/pkg/agent"
"github.com/digitallysavvy/go-ai/pkg/provider/types"
"github.com/digitallysavvy/go-ai/pkg/providers/openai"
)

func main() {
p := openai.New(openai.Config{
APIKey: "your-api-key",
})
model, _ := p.LanguageModel("gpt-4")

searchTool := types.Tool{
Name: "search",
Description: "Search the web for information",
Parameters: map[string]interface{}{
"type": "object",
"properties": map[string]interface{}{
"query": map[string]interface{}{
"type": "string",
"description": "Search query",
},
},
"required": []string{"query"},
},
Execute: func(ctx context.Context, input map[string]interface{}, opts types.ToolExecutionOptions) (interface{}, error) {
query := input["query"].(string)
return fmt.Sprintf("Search results for: %s", query), nil
},
}

var a agent.Agent = agent.NewToolLoopAgent(agent.AgentConfig{
Model: model,
Tools: []types.Tool{searchTool},
})

result, err := a.Execute(context.Background(), "Find the current weather in Tokyo")
if err != nil {
log.Fatal(err)
}

fmt.Printf("Result: %s\n", result.Text)
fmt.Printf("Steps taken: %d\n", len(result.Steps))
}

See Also​