大家好, 这里是 CodeAgent, 今天来简单了解下 Gemini Cli
📌 Gemini Cli 是什么
想象一下,你可以对终端说:"帮我找到所有 JavaScript 文件并按大小排序",然后系统自动执行:
find . -name "*.js" -exec ls -lh {} + | sort -k5 -h
Gemini Cli 就是这样一个工具, 终端操作,并且展示步骤的命令行工具.
安装步骤直接根据:
安装完成后, 询问下 "weather about Beijing, China"
同时可以看到, cli 也支持 mcp
📌 架构设计
gemini-cli 做了三层设计
- Cli :用户界面和交互Core:AI通信和工具调度Tools:具体功能执行
为什么这么设计?
- 模块职责分明:Cli 前端 专注交互体验,Core 专注逻辑处理,工具模块 拓展能力。确保安全性:对写操作和执行命令进行确认,避免误操作。易于扩展:新增工具只需在 Core 注册即可,无需改动前端或模型调用逻辑。
📌 工具链
工具(Tools)API 是Gemini Cli 中一种插件机制,模型通过 FunctionCall 请求工具执行具体任务,Core 接收并触发对应 handler,然后将结果再反馈回模型,实现推理 + 工具执行。
Tools 执行流程如下:
User Prompt ↓1. Model Request - 模型根据用户 prompt 和 tool schemas,决定使用某个工具 - 返回一个 FunctionCall,包含 tool 名和参数 ↓2. Core Receives Request - 核心接收并解析这个 FunctionCall ↓3. Tool Retrieval - 在 ToolRegistry 中查找目标工具 ↓4. Parameter Validation - 调用工具的 validateToolParams() 方法进行参数校验 ↓5. Confirmation (if needed) - 调用 shouldConfirmExecute() 判断是否需要用户确认 - 如果需要确认: - Core 把确认详情发回 CLI → CLI 提示用户确认 - 用户选择(如继续、取消)反馈回 Core ↓6. Execution - 若参数合法且已确认(或无需确认) - 调用工具的 execute() 方法,附带 AbortSignal(支持取消) ↓7. Result Processing - Core 接收到工具执行返回的 ToolResult ↓8. Response to Model - 将 ToolResult 中的 llmContent 打包为 FunctionResponse - 返回给模型用于后续生成 ↓9. Display to User - 将 ToolResult 中的 returnDisplay 返回给 CLI - 呈现给用户查看工具执行的实际效果
同时在 packages/core/src/tools
下也提供了内置的几类 tools
- File System ToolsExecution ToolsWeb ToolsMemory Tools
这些工具都继承自 BaseTool,并实现了其特定功能所需的方法。
更多Tools 的可以直达
📌 文档
Gemini Cli 的文档都在仓库下,以及 G 家的博客还有codelabs:
💬 好了,今天就到这里,周末愉快.
欢迎关注我的公众号 CodeAgent