Go语言AI智能体开发套件(ADK) - 构建复杂AI代理的开源框架

Go语言AI智能体开发套件(ADK)

Agent Development Kit (ADK) 是一个灵活、模块化的框架,将软件开发原则应用于AI智能体创建。它旨在简化从简单任务到复杂系统的代理工作流程的构建、部署和编排。虽然针对Gemini进行了优化,但ADK是模型无关、部署无关的,并与其他框架兼容。

✨ 功能特性

  • 符合Go语言习惯:设计自然,充分利用Go语言的优势
  • 丰富的工具生态系统:利用预构建工具、自定义函数或集成现有工具,为代理提供多样化能力
  • 代码优先开发:直接在Go中定义代理逻辑、工具和编排,实现终极灵活性、可测试性和版本控制
  • 模块化多代理系统:通过组合多个专业代理来设计可扩展的应用程序
  • 随处部署:轻松容器化并部署代理,对Google Cloud Run等云原生环境提供强力支持

🚀 安装指南

要将ADK Go添加到您的项目中,请运行:

bash 复制代码
go get google.golang.org/adk

系统要求

  • Go 1.21 或更高版本
  • 支持的操作系统:Linux、macOS、Windows
  • 可选:Google Cloud账号(用于云部署)

📖 使用说明

基础代理创建

go 复制代码
package main

import (
    "context"
    "iter"

    "google.golang.org/adk/agent"
    "google.golang.org/adk/session"
)

// 自定义代理实现
type CustomAgent struct {
    name        string
    description string
    subAgents   []agent.Agent
}

func (a *CustomAgent) Name() string { return a.name }
func (a *CustomAgent) Description() string { return a.description }
func (a *CustomAgent) SubAgents() []agent.Agent { return a.subAgents }

func (a *CustomAgent) Run(ctx agent.InvocationContext) iter.Seq2[*session.Event, error] {
    return func(yield func(*session.Event, error) bool) {
        // 代理执行逻辑
        event := &session.Event{
            Author: a.name,
            // 设置其他事件属性
        }
        yield(event, nil)
    }
}

func main() {
    // 创建自定义代理
    customAgent := &CustomAgent{
        name:        "MyAgent",
        description: "我的自定义AI代理",
    }
    
    // 使用代理加载器
    loader := agent.NewSingleLoader(customAgent)
    
    // 运行代理逻辑...
}

LLM代理示例

go 复制代码
package main

import (
    "google.golang.org/adk/agent/llmagent"
    "google.golang.org/adk/model"
    "google.golang.org/genai"
)

func createLLMAgent() (agent.Agent, error) {
    cfg := llmagent.Config{
        AgentConfig: agent.Config{
            Name:        "聊天代理",
            Description: "处理用户对话的LLM代理",
        },
        Model: &model.LLM{
            // 配置LLM模型
        },
        Instruction: "你是一个有用的助手,用中文回答用户问题。",
    }
    
    return llmagent.New(cfg)
}

工作流代理

go 复制代码
package main

import (
    "google.golang.org/adk/agent/workflowagents/loopagent"
    "google.golang.org/adk/agent/workflowagents/parallelagent"
    "google.golang.org/adk/agent/workflowagents/sequentialagent"
)

func createWorkflowAgents() {
    // 顺序代理 - 按固定顺序执行子代理
    seqCfg := sequentialagent.Config{
        AgentConfig: agent.Config{
            Name: "顺序工作流",
            SubAgents: []agent.Agent{/* 子代理列表 */},
        },
    }
    sequentialAgent, _ := sequentialagent.New(seqCfg)
    
    // 并行代理 - 同时运行子代理
    parallelCfg := parallelagent.Config{
        AgentConfig: agent.Config{
            Name: "并行工作流", 
            SubAgents: []agent.Agent{/* 子代理列表 */},
        },
    }
    parallelAgent, _ := parallelagent.New(parallelCfg)
    
    // 循环代理 - 重复执行直到条件满足
    loopCfg := loopagent.Config{
        AgentConfig: agent.Config{
            Name: "循环工作流",
            SubAgents: []agent.Agent{/* 子代理列表 */},
        },
        MaxIterations: 5, // 最大迭代次数
    }
    loopAgent, _ := loopagent.New(loopCfg)
}

💻 核心代码解析

代理接口设计

go 复制代码
// Agent是所有代理必须实现的基础接口
type Agent interface {
    Name() string
    Description() string
    Run(InvocationContext) iter.Seq2[*session.Event, error]
    SubAgents() []Agent
    internal() *agent
}

// 调用上下文提供代理执行环境
type InvocationContext interface {
    context.Context
    Agent() Agent
    Artifacts() Artifacts
    Memory() Memory
    Session() session.Session
    InvocationID() string
    Branch() string
    UserContent() *genai.Content
    RunConfig() *RunConfig
    EndInvocation()
    Ended() bool
}

会话管理

go 复制代码
// 会话服务接口
type Service interface {
    Create(context.Context, *CreateRequest) (*CreateResponse, error)
    Get(context.Context, *GetRequest) (*GetResponse, error)
    List(context.Context, *ListRequest) (*ListResponse, error)
    Delete(context.Context, *DeleteRequest) error
    AppendEvent(context.Context, Session, *Event) error
}

// 会话表示用户与代理的交互会话
type Session interface {
    AppName() string
    UserID() string
    ID() string
    State() State
    Events() Events
    LastUpdateTime() time.Time
}

工具系统

go 复制代码
// 工具接口定义代理可用的功能
type Tool interface {
    Name() string
    Description() string
    Run(ctx Context, args any) (result map[string]any, err error)
}

// 工具上下文提供工具执行环境
type Context interface {
    context.Context
    Artifacts() Artifacts
    FunctionCallID() string
    Actions() *EventActions
    AgentName() string
    SearchMemory(ctx context.Context, query string) (*memory.SearchResponse, error)
}

运行器实现

go 复制代码
// 运行器配置
type Config struct {
    AppName         string
    Agent           Agent          // 启动执行的根代理
    SessionService  session.Service
    ArtifactService artifact.Service // 可选
    MemoryService   memory.Service   // 可选
}

// 运行器执行代理工作流
type Runner struct {
    appName         string
    rootAgent       Agent
    sessionService  session.Service
    artifactService artifact.Service
    memoryService   memory.Service
    parents         parentmap.Map
}

func (r *Runner) Run(ctx context.Context, session session.Session, userContent *genai.Content, runConfig *agent.RunConfig) iter.Seq2[*session.Event, error] {
    // 实现代理执行流水线
    // 包括会话管理、记忆检索、工具执行等
}

这个框架提供了完整的AI代理开发基础设施,支持复杂的多代理工作流、工具集成和云原生部署,是构建企业级AI应用的强大工具。

相关推荐
Keely402852 小时前
Claude 配置使用墨刀MCP(modao-proto-mcp)
前端·aigc·claude
海底的星星fly2 小时前
【Prompt学习技能树地图】检索增强生成(RAG)核心技术剖析与实践指南
人工智能·语言模型·prompt
AI研一研2 小时前
如何快速学习知识、查找要点、把知识读“薄”、读“精”?
人工智能·学习
北京耐用通信2 小时前
不只是延长,是“重生”:耐达讯自动化Profibus总线光端机如何让老旧设备数据“开口说话”?
人工智能·物联网·网络协议·自动化·信息与通信
RWKV元始智能2 小时前
体验RWKV-7训练全过程,只需400行代码训练3分钟
人工智能·算法·机器学习
qinyia2 小时前
Wisdom SSH:AI助手可用的运维工具详解,帮助理解提升人机合作效率
运维·服务器·人工智能·ssh
却道天凉_好个秋2 小时前
OpenCV(二十八):双边滤波
人工智能·opencv·计算机视觉
IT_陈寒3 小时前
JavaScript性能优化:10个V8引擎隐藏技巧让你的代码快30%
前端·人工智能·后端