Gemini CLI 架构概述
本文档对 Gemini CLI 的架构进行了高级概述。
核心组件
Gemini CLI 主要由两个主包以及一套工具组成,系统可以在处理命令行输入的过程中使用这些工具:
-
CLI 包 (
packages/cli
):- 目的: 此包包含 Gemini CLI面向用户的部分,例如处理初始用户输入、呈现最终输出以及管理整体用户体验。
- 包中包含的关键功能:
- 输入处理
- 历史管理
- 显示渲染
- 主题和 UI 自定义
- CLI 配置设置
-
核心包 (
packages/core
):- 目的: 此包充当 Gemini CLI 的后端。它接收从
packages/cli
发送的请求,协调与 Gemini API 的交互,并管理可用工具的执行。 - 包中包含的关键功能:
- 用于与 Google Gemini API 通信的 API 客户端
- 提示构建和管理
- 工具注册和执行逻辑
- 对话或会话的状态管理
- 服务器端配置
- 目的: 此包充当 Gemini CLI 的后端。它接收从
-
工具 (
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(前端)与核心(后端)分离,可以进行独立开发和未来的潜在扩展(例如,同一后端的不同前端)。
- 可扩展性: 工具系统设计为可扩展的,允许添加新功能。
- 用户体验: CLI 专注于提供丰富且交互式的终端体验。