Gemini CLI 架构概览
本文档提供 Gemini CLI 的高级架构概述。
核心组件
Gemini CLI 主要由两个核心包组成,以及一套系统在处理命令行输入过程中可使用的工具集:
-
CLI 包 (
packages/cli
): -
用途: 包含面向用户的 Gemini CLI 部分,例如处理初始用户输入、呈现最终输出以及管理整体用户体验。
-
包内关键功能:
-
核心包 (
packages/core
): -
用途: 作为 Gemini CLI 的后端。接收来自
packages/cli
的请求,协调与 Gemini API 的交互,并管理可用工具的执行。 -
包内关键功能:
- 与 Google Gemini API 通信的 API 客户端
- 提示构建与管理
- 工具注册与执行逻辑
- 对话或会话的状态管理
- 服务端配置
-
工具集 (
packages/core/src/tools/
): - 用途: 这些独立模块扩展了 Gemini 模型的能力,使其能与本地环境交互(例如文件系统、shell 命令、网络请求)。
- 交互方式:
packages/core
根据 Gemini 模型的请求调用这些工具。
交互流程
与 Gemini CLI 的典型交互遵循以下流程:
- 用户输入:用户在终端输入提示词或命令,由
packages/cli
管理。 - 请求核心层:
packages/cli
将用户输入发送至packages/core
。 - 请求处理:核心包执行以下操作:
- 为 Gemini API 构建适当的提示词,可能包含对话历史和可用工具定义。
- 将提示词发送至 Gemini API。
- Gemini API 响应:Gemini API 处理提示词并返回响应。响应可能是直接答案或使用某个可用工具的请求。
- 工具执行(如适用):
- 当 Gemini API 请求使用工具时,核心包准备执行该工具。
- 如果请求的工具可能修改文件系统或执行 shell 命令,会先向用户展示该工具及其参数的详细信息,需用户批准后才执行。
- 只读操作(如读取文件)可能无需用户明确确认即可继续。
- 一旦确认(或无需确认),核心包在相关工具内执行相应操作,并将结果通过核心包发送回 Gemini API。
- Gemini API 处理工具结果并生成最终响应。
- 返回 CLI:核心包将最终响应发送回 CLI 包。
- 用户显示:CLI 包格式化响应并在终端中展示给用户。
关键设计原则
- 模块化:将 CLI(前端)与 Core(后端)分离,支持独立开发和未来可能的扩展(例如为同一后端开发不同前端)。
- 可扩展性:工具系统设计为可扩展的,允许添加新功能。
- 用户体验:CLI 专注于提供丰富且交互性强的终端体验。