adk

module
v0.1.1 Latest Latest
Warning

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

Go to latest
Published: Jul 20, 2026 License: Apache-2.0

README

ADK - Agent Development Kit

简体中文

A lightweight, idiomatic Go library for building AI agents. ADK keeps agent logic separate from LLM providers, tools, and session storage, so agents stay stateless while the runner manages the durable event ledger.

Early development notice: this project is under active development and APIs may change without notice.

Module path: github.com/soasurs/adk · Go version: 1.26+

Features

  • Provider-neutral adapters for OpenAI, DeepSeek, Gemini, Vertex AI, and Anthropic
  • Stateless agents with event-based, persistent conversation history
  • Automatic tool-call loops and structured tool results
  • Sequential, parallel, and agent-as-tool composition
  • Native Go streaming with iter.Seq2
  • Agent Skills parsing, discovery, catalog rendering, and on-demand loading
  • In-memory, SQLite, and PostgreSQL session backends
  • MCP tools and span-oriented slog/OpenTelemetry tracing

Installation

go get github.com/soasurs/adk

Quick Start

package main

import (
    "context"
    "fmt"
    "os"

    "github.com/soasurs/adk/agent/llmagent"
    "github.com/soasurs/adk/model"
    "github.com/soasurs/adk/model/openai"
    "github.com/soasurs/adk/runner"
    "github.com/soasurs/adk/session"
    "github.com/soasurs/adk/session/memory"
)

func main() {
    ctx := context.Background()
    llm := openai.New(os.Getenv("OPENAI_API_KEY"), os.Getenv("OPENAI_BASE_URL"), "gpt-4o-mini")
    assistant := llmagent.New(llmagent.Config{
        Name: "assistant", Model: llm, Instruction: "You are a helpful assistant.", Stream: true,
    })

    sessions := memory.NewMemorySessionService()
    _, _ = sessions.CreateSession(ctx, session.CreateSessionRequest{
        SessionID: "session-1", AppID: "quickstart", UserID: "user-1",
    })
    r, err := runner.New(assistant, sessions)
    if err != nil {
        panic(err)
    }

    for event, err := range r.Run(ctx, "session-1", model.Content{Content: "Hello!"}) {
        if err != nil {
            panic(err)
        }
        if event.Partial {
            fmt.Print(event.Content.Content)
            continue
        }
        fmt.Printf("\n%s: %s\n", event.Content.Role, event.Content.Content)
    }
}

See examples/chat for a runnable chat application.

Documentation

Guide What it covers
Core Concepts Content, events, agents, streaming, turns, and failure recovery
Models and Providers LLM adapters, generation options, Responses API, and environment variables
Tools and Agent Composition Typed tools, failure semantics, MCP, sequential/parallel agents, and agent-as-tool
Sessions and Event Archival Memory and SQL backends, ownership, pagination, persistence, and archival
Tracing slog, OpenTelemetry, span hierarchy, and sensitive attributes
Dynamic System Instructions Request-scoped instructions, lifecycle, caching, and examples
Agent Skills SKILL.md loading, catalog injection, activation tools, and resource safety

API documentation is available on pkg.go.dev.

Package Map

Area Packages
Agents agent, agent/llmagent, agent/sequentialagent, agent/parallelagent, agent/agentool
Models model, model/openai, model/deepseek, model/gemini, model/anthropic
Sessions session, session/event, session/memory, session/database
Tools tool, tool/builtin, tool/mcp
Skills skill
Runtime and observability runner, trace, trace/otel

License

Apache 2.0

Directories

Path Synopsis
examples
chat command
Package main demonstrates a Chat agent that uses LlmAgent with Exa MCP search.
Package main demonstrates a Chat agent that uses LlmAgent with Exa MCP search.
tracing command
internal
sessionlock
Package sessionlock provides context-aware keyed mutual exclusion for session-scoped runner operations.
Package sessionlock provides context-aware keyed mutual exclusion for session-scoped runner operations.
deepseek
Package deepseek provides a DeepSeek adapter for model.LLM.
Package deepseek provides a DeepSeek adapter for model.LLM.
retry
Package retry provides generic retry logic with exponential backoff for iter.Seq2-based operations such as LLM provider calls.
Package retry provides generic retry logic with exponential backoff for iter.Seq2-based operations such as LLM provider calls.
event
Package event defines the persisted session event representation.
Package event defines the persisted session event representation.
Package skill loads, validates, and exposes Agent Skills.
Package skill loads, validates, and exposes Agent Skills.
mcp
Package trace defines span-oriented observability hooks for ADK runtime operations.
Package trace defines span-oriented observability hooks for ADK runtime operations.
otel
Package otel maps ADK trace spans to OpenTelemetry spans.
Package otel maps ADK trace spans to OpenTelemetry spans.

Jump to

Keyboard shortcuts

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