agenkit-go

module
v0.0.0-...-140e820 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 4, 2026 License: Apache-2.0

README

Agenkit Go

Production-grade AI agent framework for Go 1.21+

The Go implementation of Agenkit provides exceptional performance (18x faster than Python) while maintaining 100% behavioral parity with the reference Python implementation.

Go Reference Tests Cross-Language Parity

Why Go?

18x Performance Improvement over Python with the same developer experience:

  • Concurrency: Goroutines for true parallel agent execution
  • Performance: Sub-millisecond agent orchestration
  • Deployment: Single binary, no runtime dependencies
  • Scale: Handle 100K+ requests/second per instance

Perfect for:

  • Production workloads requiring high throughput
  • Microservices and distributed systems
  • Edge deployments with constrained resources
  • Cost optimization (fewer instances needed)

Installation

go get github.com/scttfrdmn/agenkit/agenkit-go

Quick Start

Basic Agent
package main

import (
	"context"
	"fmt"

	"github.com/scttfrdmn/agenkit/agenkit-go/agenkit"
)

type EchoAgent struct{}

func (a *EchoAgent) Name() string {
	return "echo-agent"
}

func (a *EchoAgent) Capabilities() []string {
	return []string{"echo", "simple"}
}

func (a *EchoAgent) Process(ctx context.Context, message *agenkit.Message) (*agenkit.Message, error) {
	return agenkit.NewMessage("assistant", fmt.Sprintf("Echo: %s", message.Content)), nil
}

func (a *EchoAgent) Introspect() *agenkit.IntrospectionResult {
	return agenkit.DefaultIntrospectionResult(a)
}

func main() {
	agent := &EchoAgent{}
	ctx := context.Background()

	message := agenkit.NewMessage("user", "Hello!")
	response, err := agent.Process(ctx, message)
	if err != nil {
		panic(err)
	}

	fmt.Println(response.Content) // "Echo: Hello!"
}
Production-Ready Agent with Resilience
import (
	"github.com/scttfrdmn/agenkit/agenkit-go/agenkit"
	"github.com/scttfrdmn/agenkit/agenkit-go/middleware"
)

func main() {
	// Create agent
	agent := &MyAgent{}

	// Add resilience middleware
	agent = middleware.NewRetryMiddleware(agent, &middleware.RetryConfig{
		MaxRetries:    3,
		BackoffFactor: 2.0,
	})

	agent = middleware.NewCircuitBreakerMiddleware(agent, &middleware.CircuitBreakerConfig{
		FailureThreshold: 5,
		RecoveryTimeout:  60.0,
	})

	agent = middleware.NewTimeoutMiddleware(agent, &middleware.TimeoutConfig{
		Timeout: 30 * time.Second,
	})

	// Now it's production-ready
	response, err := agent.Process(ctx, message)
}
Agent Patterns
Sequential Pipeline
import "github.com/scttfrdmn/agenkit/agenkit-go/patterns"

// Data flows: Agent1 → Agent2 → Agent3
pipeline := patterns.NewSequentialAgent([]agenkit.Agent{
	&DataExtractionAgent{},
	&AnalysisAgent{},
	&ReportGenerationAgent{},
})

result, err := pipeline.Process(ctx, message)
Parallel Execution
import "github.com/scttfrdmn/agenkit/agenkit-go/patterns"

// Execute multiple agents concurrently using goroutines
parallel := patterns.NewParallelAgent([]agenkit.Agent{
	&SentimentAnalysisAgent{},
	&EntityExtractionAgent{},
	&TopicClassificationAgent{},
}, nil) // Uses default aggregator

result, err := parallel.Process(ctx, message)
Conversational Agent
import (
	"github.com/scttfrdmn/agenkit/agenkit-go/patterns"
	"github.com/scttfrdmn/agenkit/agenkit-go/adapter"
)

// Maintains conversation history
agent := patterns.NewConversationalAgent(&patterns.ConversationalConfig{
	LLM:          adapter.NewAnthropicAdapter(apiKey),
	SystemPrompt: "You are a helpful assistant.",
	MaxHistory:   10,
})

response1, _ := agent.Process(ctx, agenkit.NewMessage("user", "What's the capital of France?"))
response2, _ := agent.Process(ctx, agenkit.NewMessage("user", "What's its population?"))
// Agent remembers context from previous messages
ReAct (Reasoning + Acting)
import "github.com/scttfrdmn/agenkit/agenkit-go/patterns"

type CalculatorTool struct{}

func (t *CalculatorTool) Name() string {
	return "calculator"
}

func (t *CalculatorTool) Description() string {
	return "Evaluates mathematical expressions"
}

func (t *CalculatorTool) Execute(ctx context.Context, params map[string]interface{}) (*agenkit.ToolResult, error) {
	// Implementation here
	return agenkit.NewToolResult(result), nil
}

// ReAct agent with tools
agent := patterns.NewReActAgent(&patterns.ReActConfig{
	LLM:           myLLM,
	Tools:         []agenkit.Tool{&CalculatorTool{}, &WebSearchTool{}},
	MaxIterations: 5,
})

result, err := agent.Process(ctx, message)
Reasoning Techniques
Chain-of-Thought (CoT)
import "github.com/scttfrdmn/agenkit/agenkit-go/techniques/reasoning"

// Step-by-step reasoning
cot := reasoning.NewChainOfThought(myLLM, &reasoning.ChainOfThoughtConfig{
	PromptTemplate: "Let's solve this step by step:\n{query}",
	MaxSteps:       5,
	ParseSteps:     true,
})

result, err := cot.Process(ctx, agenkit.NewMessage("user", "What is 15 * 24?"))
steps := result.Metadata["reasoning_steps"].([]string)
fmt.Println(steps)
// ["1. Multiply 15 by 20: 300", "2. Multiply 15 by 4: 60", "3. Add: 360"]
Tree-of-Thought (ToT)
import "github.com/scttfrdmn/agenkit/agenkit-go/techniques/reasoning"

// Multi-path exploration with backtracking
tot := reasoning.NewTreeOfThought(myAgent, &reasoning.TreeOfThoughtConfig{
	BranchingFactor: 3,
	MaxDepth:        4,
	Strategy:        reasoning.SearchStrategyBestFirst,
	Evaluator:       customEvaluator,
})

result, err := tot.Process(ctx, message)
path := result.Metadata["reasoning_path"].([]string)
score := result.Metadata["best_score"].(float64)
fmt.Printf("Best path: %v (score: %.2f)\n", path, score)
Self-Consistency
import "github.com/scttfrdmn/agenkit/agenkit-go/techniques/reasoning"

// Generate multiple reasoning paths and vote
sc := reasoning.NewSelfConsistency(myCOTAgent, &reasoning.SelfConsistencyConfig{
	NumSamples:     7,
	VotingStrategy: reasoning.VotingStrategyMajority,
})

result, err := sc.Process(ctx, message)
consistency := result.Metadata["consistency_score"].(float64)
counts := result.Metadata["answer_counts"].(map[string]int)
fmt.Printf("Consistency: %.2f, Answers: %v\n", consistency, counts)
Observability
import (
	"github.com/scttfrdmn/agenkit/agenkit-go/observability"
	"go.opentelemetry.io/otel"
)

// Enable distributed tracing
tracer := otel.Tracer("my-service")
agent = observability.NewTracingMiddleware(agent, tracer)

// Now all agent calls are traced
ctx, span := tracer.Start(ctx, "process_request")
defer span.End()

result, err := agent.Process(ctx, message)
HTTP Server
import (
	"github.com/scttfrdmn/agenkit/agenkit-go/transport/http"
	"net/http"
)

// Expose agent as HTTP endpoint
server := http.NewHTTPAgent(agent, ":8080")

// Start server
if err := server.ListenAndServe(); err != nil && err != http.ErrServerClosed {
	log.Fatal(err)
}
gRPC Server
import (
	"github.com/scttfrdmn/agenkit/agenkit-go/transport/grpc"
	"google.golang.org/grpc"
)

// Expose agent as gRPC service
server := grpc.NewGRPCAgent(agent, ":50051")

// Start server
if err := server.Serve(); err != nil {
	log.Fatal(err)
}

Package Structure

agenkit-go/
├── agenkit/                 # Core package
│   ├── interfaces.go        # Agent, Message, Tool interfaces
│   ├── introspection.go     # Introspection utilities
│   └── message.go           # Message types
├── patterns/                # 32 agent patterns
│   ├── sequential.go        # Pipeline execution
│   ├── parallel.go          # Concurrent execution
│   ├── router.go            # Conditional routing
│   ├── conversational.go    # History management
│   ├── react.go             # Reasoning + Acting
│   ├── reflection.go        # Self-critique loop
│   ├── planning.go          # Task decomposition
│   ├── autonomous.go        # Goal-driven agents
│   ├── memory.go            # Memory hierarchy
│   └── ... [23 more patterns]
├── techniques/              # Reasoning techniques
│   └── reasoning/
│       ├── chain_of_thought.go     # CoT prompting
│       ├── tree_of_thought.go      # ToT search
│       ├── self_consistency.go     # Voting strategy
│       ├── graph_of_thought.go     # Graph reasoning
│       └── reasoning_tree.go       # Tree utilities
├── middleware/              # Production middleware
│   ├── retry.go             # Automatic retries
│   ├── circuit_breaker.go   # Circuit breaker pattern
│   ├── timeout.go           # Timeout handling
│   ├── rate_limiter.go      # Rate limiting
│   ├── caching.go           # Response caching
│   ├── batching.go          # Request batching
│   └── metrics.go           # Metrics collection
├── adapter/                 # LLM adapters
│   ├── anthropic.go         # Claude API
│   ├── openai.go            # OpenAI API
│   ├── openai_compatible.go # OpenAI-compatible services (vLLM, llama.cpp, etc.)
│   ├── bedrock.go           # AWS Bedrock
│   └── gemini.go            # Google Gemini
├── transport/               # Communication protocols
│   ├── http/                # HTTP/REST server & client
│   ├── grpc/                # gRPC server & client
│   └── websocket/           # WebSocket support
├── observability/           # Tracing and metrics
│   ├── tracing.go           # OpenTelemetry integration
│   └── metrics.go           # Prometheus metrics
├── evaluation/              # Testing and optimization
│   ├── recorder.go          # Session recording
│   ├── benchmarks.go        # Performance benchmarks
│   └── optimizer.go         # Hyperparameter optimization
└── budget/                  # Token and cost management
    └── limiter.go           # Budget limiting

API Reference

See GoDoc for complete API documentation.

Examples

Comprehensive examples are available in examples/:

# Run basic examples
go run examples/basic/echo_agent.go
go run examples/basic/sequential_pattern.go

# Run pattern examples
go run examples/patterns/react_example.go
go run examples/patterns/planning_example.go

# Run reasoning examples
go run examples/techniques/reasoning/cot_example.go
go run examples/techniques/reasoning/tot_example.go

# Run production examples
go run examples/production/http_server.go
go run examples/production/grpc_server.go

Testing

# Run all tests
go test ./...

# Run with coverage
go test -cover ./...

# Run specific package tests
go test ./patterns/
go test ./techniques/reasoning/

# Run benchmarks
go test -bench=. ./benchmarks/

Performance Benchmarks

# Run pattern benchmarks
cd benchmarks && go test -bench=BenchmarkPatterns -benchtime=10s

# Results (Apple M1 Pro):
# Sequential:     2000 ns/op   (500K ops/sec)
# Parallel:       5000 ns/op   (200K ops/sec)
# ReAct:         10000 ns/op   (100K ops/sec)

See ../docs/PERFORMANCE_COMPARISON.md for detailed benchmarks.

Cross-Language Compatibility

Go agents maintain 100% behavioral parity with Python:

# Run cross-language equivalence tests
go run tests/cross_language_harness

# Results:
# Chain-of-Thought: 9/9 scenarios passing (100%)
# Tree-of-Thought: 11/11 scenarios passing (100%)
# Self-Consistency: 7/7 scenarios passing (100%)
Calling Python Agents from Go
import "github.com/scttfrdmn/agenkit/agenkit-go/transport/http"

// Call Python agent over HTTP
pythonAgent := http.NewHTTPClient("http://localhost:8000")
result, err := pythonAgent.Process(ctx, message)
Calling Go Agents from Python
from agenkit.transport import HTTPClient

# Call Go agent from Python
go_agent = HTTPClient("http://localhost:8080")
result = await go_agent.process(message)

Deployment

Docker
FROM golang:1.21-alpine AS builder
WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN CGO_ENABLED=0 go build -o agent ./cmd/agent

FROM alpine:latest
RUN apk --no-cache add ca-certificates
WORKDIR /root/
COPY --from=builder /app/agent .
CMD ["./agent"]
Kubernetes
apiVersion: apps/v1
kind: Deployment
metadata:
  name: agenkit-agent
spec:
  replicas: 3
  selector:
    matchLabels:
      app: agenkit-agent
  template:
    metadata:
      labels:
        app: agenkit-agent
    spec:
      containers:
      - name: agent
        image: your-registry/agenkit-agent:latest
        ports:
        - containerPort: 8080
        resources:
          requests:
            memory: "64Mi"
            cpu: "250m"
          limits:
            memory: "128Mi"
            cpu: "500m"

Migration Guides

Migrating to Go

Choose your source language for detailed migration guide:

From Guide Key Benefits
Python MIGRATE_PYTHON_TO_GO.md 5-20x faster, true parallelism, single binary
TypeScript MIGRATE_TYPESCRIPT_TO_GO.md Multi-threaded, better concurrency, backend services
Rust MIGRATE_RUST_TO_GO.md Simpler deployment, faster iteration, GC simplification
C++ MIGRATE_CPP_TO_GO.md Simpler memory, better concurrency, faster compilation
Zig MIGRATE_ZIG_TO_GO.md GC simplification, goroutines, better concurrency
Migrating from Go
To Guide Primary Use Case
Python MIGRATE_GO_TO_PYTHON.md Prototyping, ML integration, rapid development
TypeScript MIGRATE_GO_TO_TYPESCRIPT.md Web frontend, universal deployment, browser support
Rust MIGRATE_GO_TO_RUST.md Memory safety, WASM, zero-cost abstractions
C++ MIGRATE_GO_TO_CPP.md Performance tuning, legacy integration, C ABI
Zig MIGRATE_GO_TO_ZIG.md Embedded systems, minimal runtime, explicit control

See also:

Development

# Install dependencies
go mod download

# Run linting
golangci-lint run

# Format code
go fmt ./...

# Generate protobuf (if modified)
protoc --go_out=. --go-grpc_out=. proto/*.proto

Contributing

Contributions are welcome! See CONTRIBUTING.md for guidelines.

License

Apache 2.0 - See LICENSE for details.

Support

Directories

Path Synopsis
adapter
codec
Package codec provides message serialization and deserialization for the protocol adapter.
Package codec provides message serialization and deserialization for the protocol adapter.
errors
Package errors defines error types for the protocol adapter.
Package errors defines error types for the protocol adapter.
grpc
Package grpc provides gRPC server implementation for agent communication.
Package grpc provides gRPC server implementation for agent communication.
http
Package http provides HTTP server implementation for the protocol adapter.
Package http provides HTTP server implementation for the protocol adapter.
llm
Package llm provides minimal LLM interfaces for Agenkit.
Package llm provides minimal LLM interfaces for Agenkit.
local
Package local provides the server-side wrapper for exposing local agents.
Package local provides the server-side wrapper for exposing local agents.
registry
Package registry provides agent discovery and health monitoring.
Package registry provides agent discovery and health monitoring.
remote
Package remote provides the client-side proxy for remote agents.
Package remote provides the client-side proxy for remote agents.
transport
Package transport provides network transport abstractions for the protocol adapter.
Package transport provides network transport abstractions for the protocol adapter.
Package agenkit provides core interfaces and types for the agenkit framework.
Package agenkit provides core interfaces and types for the agenkit framework.
Package budget provides cost tracking and budget management for LLM usage.
Package budget provides cost tracking and budget management for LLM usage.
Package checkpointing provides checkpointing functionality for durable agent execution.
Package checkpointing provides checkpointing functionality for durable agent execution.
Package composition provides agent composition patterns.
Package composition provides agent composition patterns.
Package evaluation provides A/B testing framework for comparing agent variants.
Package evaluation provides A/B testing framework for comparing agent variants.
examples
evaluation/ab_testing command
Package main demonstrates A/B testing with the evaluation framework.
Package main demonstrates A/B testing with the evaluation framework.
evaluation/basic_metrics command
Package main demonstrates basic metrics collection and aggregation.
Package main demonstrates basic metrics collection and aggregation.
evaluation/bayesian_optimization command
Package main demonstrates Bayesian Optimization for hyperparameter tuning.
Package main demonstrates Bayesian Optimization for hyperparameter tuning.
evaluation/production_monitoring command
Package main demonstrates production monitoring setup.
Package main demonstrates production monitoring setup.
evaluation/quality_scoring command
Package main demonstrates quality scoring for agent evaluation.
Package main demonstrates quality scoring for agent evaluation.
evaluation/regression_detection command
Package main demonstrates regression detection for agent quality monitoring.
Package main demonstrates regression detection for agent quality monitoring.
evaluation/session_recording command
Package main demonstrates session recording and replay for evaluation.
Package main demonstrates session recording and replay for evaluation.
infrastructure command
Package main demonstrates comprehensive production infrastructure for autonomous agents.
Package main demonstrates comprehensive production infrastructure for autonomous agents.
patterns/agents_as_tools command
Package main demonstrates the Agents-as-Tools pattern for hierarchical delegation.
Package main demonstrates the Agents-as-Tools pattern for hierarchical delegation.
patterns/autonomous command
Package main demonstrates the Autonomous pattern for self-directed agents.
Package main demonstrates the Autonomous pattern for self-directed agents.
patterns/collaborative command
Package main demonstrates the Collaborative pattern for peer collaboration.
Package main demonstrates the Collaborative pattern for peer collaboration.
patterns/conversational command
Package main demonstrates the Conversational pattern for maintaining context.
Package main demonstrates the Conversational pattern for maintaining context.
patterns/fallback command
Package main demonstrates the Fallback pattern for resilience.
Package main demonstrates the Fallback pattern for resilience.
patterns/human_in_loop command
Package main demonstrates the Human-in-Loop pattern for human oversight.
Package main demonstrates the Human-in-Loop pattern for human oversight.
patterns/memory_hierarchy command
Package main demonstrates the Memory Hierarchy pattern for long-running agents.
Package main demonstrates the Memory Hierarchy pattern for long-running agents.
patterns/multiagent command
Package main demonstrates the Multi-Agent pattern for coordinating multiple agents.
Package main demonstrates the Multi-Agent pattern for coordinating multiple agents.
patterns/orchestration command
Package main demonstrates the Orchestration pattern for coordinating agent workflows.
Package main demonstrates the Orchestration pattern for coordinating agent workflows.
patterns/parallel command
Package main demonstrates the Parallel pattern for concurrent execution.
Package main demonstrates the Parallel pattern for concurrent execution.
patterns/planning command
Package main demonstrates the Planning pattern for task decomposition and execution.
Package main demonstrates the Planning pattern for task decomposition and execution.
patterns/react command
Package main demonstrates the ReAct pattern for reasoning and acting.
Package main demonstrates the ReAct pattern for reasoning and acting.
patterns/reasoning_with_tools command
Package main demonstrates the Reasoning with Tools pattern.
Package main demonstrates the Reasoning with Tools pattern.
patterns/reflection command
Package main demonstrates the Reflection pattern for iterative refinement.
Package main demonstrates the Reflection pattern for iterative refinement.
patterns/router command
Package main demonstrates the Router pattern for conditional routing.
Package main demonstrates the Router pattern for conditional routing.
patterns/sequential command
Package main demonstrates the Sequential pattern for pipeline composition.
Package main demonstrates the Sequential pattern for pipeline composition.
patterns/supervisor command
Package main demonstrates the Supervisor pattern for hierarchical coordination.
Package main demonstrates the Supervisor pattern for hierarchical coordination.
patterns/task command
Package main demonstrates the Task pattern for one-shot agent execution.
Package main demonstrates the Task pattern for one-shot agent execution.
patterns/usage/collaborative command
Package main demonstrates the CollaborativeAgent pattern.
Package main demonstrates the CollaborativeAgent pattern.
patterns/usage/fallback command
Package main demonstrates the FallbackAgent pattern.
Package main demonstrates the FallbackAgent pattern.
patterns/usage/human_in_loop command
Package main demonstrates the HumanInLoopAgent pattern.
Package main demonstrates the HumanInLoopAgent pattern.
patterns/usage/parallel command
Package main demonstrates the ParallelAgent pattern.
Package main demonstrates the ParallelAgent pattern.
patterns/usage/router command
Package main demonstrates the RouterAgent pattern.
Package main demonstrates the RouterAgent pattern.
patterns/usage/sequential command
Package main demonstrates the SequentialAgent pattern.
Package main demonstrates the SequentialAgent pattern.
patterns/usage/supervisor command
Package main demonstrates the SupervisorAgent pattern.
Package main demonstrates the SupervisorAgent pattern.
protocols/agui/advanced_approval command
Advanced AG-UI HITL Approval Patterns
Advanced AG-UI HITL Approval Patterns
protocols/agui/basic_hitl command
Basic AG-UI Human-in-the-Loop Example
Basic AG-UI Human-in-the-Loop Example
protocols/agui/sse_transport command
SSE Transport with Human-in-the-Loop Example
SSE Transport with Human-in-the-Loop Example
protocols/agui/websocket command
AG-UI HITL with WebSocket Transport Example
AG-UI HITL with WebSocket Transport Example
techniques/graph_of_thought command
Package main demonstrates the Graph-of-Thought reasoning technique.
Package main demonstrates the Graph-of-Thought reasoning technique.
Package infrastructure provides production-grade infrastructure components.
Package infrastructure provides production-grade infrastructure components.
Package memory provides memory systems for agent conversation history.
Package memory provides memory systems for agent conversation history.
strategies
Package strategies provides memory selection strategies for context management.
Package strategies provides memory selection strategies for context management.
Package middleware provides reusable middleware for agents.
Package middleware provides reusable middleware for agents.
Package observability provides audit logging for security and compliance.
Package observability provides audit logging for security and compliance.
Package patterns provides implementation of common agent patterns.
Package patterns provides implementation of common agent patterns.
proto
protocols
agui
Package agui implements the AG-UI (Agent-User Interaction) protocol for Go.
Package agui implements the AG-UI (Agent-User Interaction) protocol for Go.
agui/transports
Package transports provides transport implementations for AG-UI protocol.
Package transports provides transport implementations for AG-UI protocol.
Package safety provides safety mechanisms for agents.
Package safety provides safety mechanisms for agents.
techniques
reasoning
Package reasoning provides reasoning techniques like Chain-of-Thought, Self-Consistency, etc.
Package reasoning provides reasoning techniques like Chain-of-Thought, Self-Consistency, etc.
integration/cmd command
Test server for integration testing
Test server for integration testing
Package tools provides tool calling capabilities for agents.
Package tools provides tool calling capabilities for agents.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL