Google ADK 框架调研
ADK(Agent Development Kit) 是 Google 推出的 Agent 框架。
支持特性
目前支持的特性:
- Agent
- Agent 搭建 + Tool 调用(MCP / API / 本地函数)
- 多 Agent 编排
- 短期记忆和长期记忆
- 流式调用,包括多模态实时接口
- Callback,可以用于支持 Trace
- 配套组件
- 代码执行器,用于执行 LLM 生成的代码
- Agent 部署(本地代码 -> Docker 镜像 -> 云部署)
- 本地 UI,用于调试
- Agent 效果评估

分析:
- 目前 Agent 搭建能力基本对齐其它开源框架的实现,但还没支持 RAG 组件。
- 在内部实现机制上,ADK 使用事件驱动模式,对标 LangChain/LlamaIndex 的流式实现。
运行时
Agent 运行时采用事件驱动架构,实现上就是 Python 的 Generator。
事件包括 Agent 生命周期里的各种输入、输出以及中间状态,比如 LLM 响应、工具调用等。
参考:
ADK Runtime 的核心结构:

在这个模型里:
Runner接收用户请求,并返回事件流。Event Processor负责驱动 Agent 执行过程。Execution Logic执行具体的 Agent、LLM 调用、Callback 和 Tool。Services提供 Session、Artifact、Memory 等服务,并读写底层存储。
运行流程
Runner 触发 Agent 运行,并和记忆组件读写数据。Agent 内部的 LLM Flow 先进行请求前置处理,再调用 LLM,最后进行响应后置处理。一次 Flow 结束后,会判断是否需要结束,或者是否需要切换到上层 Agent、同级 Agent、子 Agent。

LLM Flow
LLM Flow 使用洋葱模型,定义了前置处理器 RequestProcessor 和后置处理器 ResponseProcessor 的统一接口,并支持配置多个前后处理器。
class BaseLlmRequestProcessor(ABC):
@abstractmethod
async def run_async(
self,
invocation_context: InvocationContext,
llm_request: LlmRequest,
) -> AsyncGenerator[Event, None]:
...
class BaseLlmResponseProcessor(ABC):
@abstractmethod
async def run_async(
self,
invocation_context: InvocationContext,
llm_response: LlmResponse,
) -> AsyncGenerator[Event, None]:
...
LLM Flow 的执行过程:
- 前置处理。 a. 按序执行所有前置处理器:设置 LLM 请求,比如模型名称、模型参数,以及提前调用一次 LLM 创建 Plan 并拼接在 Prompt 中(Planner 组件)。 b. 基于配置的 Tool,将 Tool 描述(Schema)放在 LLM 请求中,也就是填写 Function Call 参数。
- 调用 LLM。
- 后置处理。 a. 按序执行所有后置处理器:比如根据 LLM 生成的代码调用代码执行器。 b. 如果 LLM 触发了 Function Call,则调用对应的 Tool。这里也包括了调度 Agent 的 Tool,如果 LLM 判断需要调度到其它 Agent,则进行切换。
记忆模块
Session Service:存储用户和 Agent 交互的历史记录。比如存储用户和 chatbot 的聊天记录,用于多轮对话。
- 写入数据:记录每次 Agent 的输入、输出和中间状态等,按
user_id和app_name划分。可存储到 MySQL 等组件。 - 读取数据:在调用 Agent 时,传入 session id,获取最近 N 条的交互记录。
Artifacts Service:存储文件(这里叫 Artifacts),比如多模态 Agent 中的图片和视频,不适合直接存储在 Session Service,需要用对象存储。
- 写入数据:将记录写入 Session Service 前,将对话消息里的图片和视频进行存储,得到对应的 Key。因此 Session Service 里不会存储图片和视频的二进制文件,而是存储 Artifacts Key。
- 读取数据:封装加载 Artifacts 的 Tool,并给 LLM 提供当前 session 相关的 Artifacts 名称,让 LLM 可以调用 Tool 来获取 Artifacts,并将原始二进制数据放在消息中。
Memory Service:长期记忆,可看作历史调用记录的 RAG 组件。
- 写入数据:对话结束后,将 Session 写入支持关键词匹配的存储组件,比如使用向量数据库。
- 读取数据:封装
search工具,让 Agent 可以生成 query 检索历史调用记录。
多 Agent 编排
Agent 采用树形结构组织,一个 Agent 可以有一个上层 Agent,以及多个子 Agent。
Agent 类型层级:

除了上文提到的 Agent 切换,还可以用如下方式编排 Agent:
SequentialAgent:顺序运行多个 Agent。ParallelAgent:并发调用多个 Agent。LoopAgent:循环执行多个 Agent,直到需要结束。