写点什么

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

作者:qife122
  • 2025-11-17
    福建
  • 本文字数:2988 字

    阅读完需:约 10 分钟

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

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

✨ 功能特性

  • 符合 Go 语言习惯:设计自然,充分利用 Go 语言的优势

  • 丰富的工具生态系统:利用预构建工具、自定义函数或集成现有工具,为代理提供多样化能力

  • 代码优先开发:直接在 Go 中定义代理逻辑、工具和编排,实现终极灵活性、可测试性和版本控制

  • 模块化多代理系统:通过组合多个专业代理来设计可扩展的应用程序

  • 随处部署:轻松容器化并部署代理,对 Google Cloud Run 等云原生环境提供强力支持

🚀 安装指南

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


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

系统要求

  • Go 1.21 或更高版本

  • 支持的操作系统:Linux、macOS、Windows

  • 可选:Google Cloud 账号(用于云部署)

📖 使用说明

基础代理创建

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 代理示例

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)}
复制代码

工作流代理

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)}
复制代码

💻 核心代码解析

代理接口设计

// 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}
复制代码

会话管理

// 会话服务接口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}
复制代码

工具系统

// 工具接口定义代理可用的功能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)}
复制代码

运行器实现

// 运行器配置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 应用的强大工具。更多精彩内容 请关注我的个人公众号 公众号(办公 AI 智能小助手)对网络安全、黑客技术感兴趣的朋友可以关注我的安全公众号(网络安全技术点滴分享)


公众号二维码


办公AI智能小助手


公众号二维码


网络安全技术点滴分享


用户头像

qife122

关注

还未添加个人签名 2021-05-19 加入

还未添加个人简介

评论

发布
暂无评论
Go语言AI智能体开发套件(ADK) - 构建复杂AI代理的开源框架_AI_qife122_InfoQ写作社区