Gemini cli 源码分析之-Agent分析-Agent架构系统分析

查看完整的Gemini cli 源码分析系列课程 Gemini CLI源码启示录:AI工程师必须掌握的终端开发范式

Agent架构系统分析

目录

宏观概述

Gemini CLI的Agent系统是一个完整的智能代理执行框架,采用了现代软件工程的设计原则,实现了高度模块化、可扩展的智能代理架构。该系统主要解决以下核心问题:

核心功能

  1. 智能代理定义与管理 - 通过AgentDefinition接口统一定义代理能力
  2. 代理执行引擎 - AgentExecutor提供完整的代理生命周期管理
  3. 工具集成 - 将代理包装为标准工具,实现无缝集成
  4. 注册与发现 - AgentRegistry提供代理的注册、发现和管理
  5. 类型安全 - 全面的TypeScript类型系统保证运行时安全

设计哲学

  • 组合优于继承 - 通过接口组合实现功能扩展
  • 依赖注入 - 通过构造函数注入实现松耦合
  • 事件驱动 - 通过回调机制实现异步通信
  • 类型安全 - 泛型系统保证编译时类型检查

架构图

Utility Layer Built-in Agents Execution Layer Configuration Layer Agent Core System templateString schema-utils types.ts CodebaseInvestigatorAgent GeminiChat ToolRegistry ChatCompressionService MessageBus PromptConfig ModelConfig RunConfig ToolConfig InputConfig OutputConfig AgentDefinition AgentRegistry AgentExecutor SubagentInvocation SubagentToolWrapper Config

类继承关系图

AgentDefinition<TOutput> +string name +string displayName? +string description +PromptConfig promptConfig +ModelConfig modelConfig +RunConfig runConfig +ToolConfig? toolConfig +OutputConfig<TOutput>? outputConfig +InputConfig inputConfig <TOutput extends z.ZodTypeAny> +processOutput?(output) PromptConfig +string? systemPrompt +Content[]? initialMessages +string? query ModelConfig +string model +number temp +number top_p +number? thinkingBudget RunConfig +number max_time_minutes +number? max_turns ToolConfig +Array tools InputConfig +Record inputs OutputConfig<T> +string outputName +string description +T schema <T extends z.ZodTypeAny> AgentRegistry -Map<string, AgentDefinition> agents -Config config +initialize() : Promise<void> +registerAgent(definition) : void +getDefinition(name) +getAllDefinitions() : AgentDefinition[] -loadBuiltInAgents() : void AgentExecutor<TOutput> +AgentDefinition<TOutput> definition -string agentId -ToolRegistry toolRegistry -Config runtimeContext -ActivityCallback? onActivity -ChatCompressionService compressionService <TOutput extends z.ZodTypeAny> +create(definition, config, onActivity?) : Promise<AgentExecutor> +run(inputs, signal) : Promise<OutputObject> -executeTurn() : Promise<AgentTurnResult> -callModel() : Promise<object> -processFunctionCalls() : Promise<object> -createChatObject() : Promise<GeminiChat> SubagentInvocation<TOutput> -AgentDefinition<TOutput> definition -Config config <TOutput extends z.ZodTypeAny> +getDescription() : string +execute(signal, updateOutput?) : Promise<ToolResult> SubagentToolWrapper -AgentDefinition definition -Config config +createInvocation(params) : ToolInvocation <<abstract>> BaseToolInvocation<TParams, TResult> +execute(signal, updateOutput?) : Promise<TResult> +getDescription() : string <<abstract>> BaseDeclarativeTool<TParams, TResult> +createInvocation(params) <<const>> CodebaseInvestigatorAgent +name "codebase_investigator" +description string +inputConfig InputConfig +outputConfig OutputConfig +modelConfig ModelConfig +runConfig RunConfig +toolConfig ToolConfig +promptConfig PromptConfig <<enumeration>> AgentTerminateMode ERROR TIMEOUT GOAL MAX_TURNS ABORTED ERROR_NO_COMPLETE_TASK_CALL OutputObject +string result +AgentTerminateMode terminate_reason SubagentActivityEvent +boolean isSubagentActivityEvent +string agentName +string type +Record<string, unknown> data

核心模块详解

1. AgentDefinition (types.ts)

作用: 智能代理的完整配置接口,定义了代理的所有属性和行为

核心特性:

  • 泛型设计支持强类型输出验证
  • 模块化配置结构,每个方面独立配置
  • 支持自定义输出处理函数

关键字段:

typescript 复制代码
interface AgentDefinition<TOutput extends z.ZodTypeAny = z.ZodUnknown> {
  name: string;                    // 唯一标识符
  description: string;             // 代理功能描述
  promptConfig: PromptConfig;      // 提示词配置
  modelConfig: ModelConfig;        // 模型参数配置
  runConfig: RunConfig;           // 运行时配置
  toolConfig?: ToolConfig;        // 工具配置
  outputConfig?: OutputConfig<TOutput>; // 输出配置
  inputConfig: InputConfig;       // 输入参数配置
  processOutput?: (output: z.infer<TOutput>) => string; // 输出处理器
}

2. AgentRegistry (registry.ts)

作用: 代理注册中心,负责代理的生命周期管理

核心功能:

  • 代理发现与加载
  • 配置验证与合并
  • 内置代理管理
  • 运行时代理查找

设计模式: 注册表模式 + 单例模式

3. AgentExecutor (executor.ts)

作用: 代理执行引擎,核心的代理运行时环境

核心特性:

  • 完整的代理生命周期管理
  • 工具调用编排与执行
  • 异常处理与恢复机制
  • 流式输出与活动事件
  • 聊天压缩与内存管理

执行流程:

  1. 初始化阶段: 创建隔离的工具注册表,验证工具安全性
  2. 运行阶段: 循环执行turn,处理模型响应和工具调用
  3. 终止阶段: 处理各种终止条件,尝试优雅恢复
  4. 清理阶段: 释放资源,记录遥测数据

4. SubagentInvocation (invocation.ts)

作用: 代理调用的具体实现,继承自BaseToolInvocation

职责:

  • 封装代理执行逻辑
  • 提供流式输出接口
  • 处理执行结果格式化
  • 异常处理与错误报告

5. SubagentToolWrapper (subagent-tool-wrapper.ts)

作用: 将代理包装为标准工具,实现工具系统集成

设计模式 : 适配器模式
核心功能:

  • 动态生成工具schema
  • 参数验证与转换
  • 创建调用实例

6. CodebaseInvestigatorAgent (codebase-investigator.ts)

作用: 内置的代码库分析代理

特色功能:

  • 结构化输出 (使用Zod schema)
  • 专门的代码分析工具集
  • 详细的调查报告格式

设计模式与原则

1. 策略模式 (Strategy Pattern)

  • 应用: AgentDefinition中的processOutput函数
  • 优势: 允许不同代理有不同的输出处理策略

2. 工厂模式 (Factory Pattern)

  • 应用: AgentExecutor.create()静态方法
  • 优势: 封装复杂的创建逻辑,确保对象正确初始化

3. 观察者模式 (Observer Pattern)

  • 应用: ActivityCallback机制
  • 优势: 解耦执行器与UI层,支持实时状态更新

4. 适配器模式 (Adapter Pattern)

  • 应用: SubagentToolWrapper
  • 优势: 将代理适配为工具系统接口

5. 注册表模式 (Registry Pattern)

  • 应用: AgentRegistry
  • 优势: 集中管理代理,支持动态注册与发现

6. 模板方法模式 (Template Method Pattern)

  • 应用: BaseToolInvocation的继承结构
  • 优势: 定义执行骨架,子类实现具体细节

数据流分析

代理执行数据流

User AgentRegistry SubagentToolWrapper SubagentInvocation AgentExecutor GeminiChat ToolRegistry getDefinition(agentName) AgentDefinition createInvocation(params) new SubagentInvocation() ToolInvocation execute(signal, updateOutput) AgentExecutor.create() validateTools() AgentExecutor instance run(inputs, signal) sendMessageStream() response stream executeToolCall() tool results alt [Function calls present] OutputObject next turn alt [complete_task called] [continue execution] loop [Agent Execution Loop] ToolResult User AgentRegistry SubagentToolWrapper SubagentInvocation AgentExecutor GeminiChat ToolRegistry

配置与初始化流程

Config Load AgentRegistry.initialize loadBuiltInAgents CodebaseInvestigatorAgent registerAgent Agent Available Tool Request getDefinition SubagentToolWrapper.create convertInputConfigToJsonSchema Tool Schema Generated Execution Request AgentExecutor.create Create Isolated ToolRegistry Validate Tools Ready for Execution

这个架构设计体现了现代软件工程的最佳实践,通过清晰的职责分离、强类型系统和灵活的配置机制,构建了一个健壮、可扩展的智能代理执行平台。

相关推荐
AskHarries1 天前
Skills.lc 是什么?为什么我会做(用)这个站
ai编程
子兮曰1 天前
OpenClaw入门:从零开始搭建你的私有化AI助手
前端·架构·github
沈二到不行1 天前
【22-26】蜉蝣一日、入樊笼尔
程序员·ai编程·全栈
晚霞的不甘1 天前
CANN 在工业质检中的亚像素级视觉检测系统设计
人工智能·计算机视觉·架构·开源·视觉检测
island13141 天前
CANN HIXL 高性能单边通信库深度解析:PGAS 模型在异构显存上的地址映射与异步传输机制
人工智能·神经网络·架构
岁岁种桃花儿1 天前
Flink CDC从入门到上天系列第一篇:Flink CDC简易应用
大数据·架构·flink
秋邱1 天前
AIGC 的“隐形引擎”:深度拆解 CANN ops-math 通用数学库的架构与野心
架构·aigc
小a杰.1 天前
CANN技术深度解析
架构
向哆哆1 天前
CANN生态深度解析:ops-nn仓库的核心架构与技术实现
架构·cann
GHL2842710901 天前
分析式AI学习
人工智能·学习·ai编程