Gemini CLI 架构概览
本文档概述 Gemini CLI 的高层架构。
核心组件
Gemini CLI 主要由两个核心包和一组可在处理命令行输入时使用的工具组成:
-
CLI 包(
packages/cli):- 用途: 包含面向用户的部分,例如处理用户输入、展示最终输出以及管理整体使用体验。
- 关键功能:
- 输入处理
- 历史记录管理
- 输出渲染
- 主题与 UI 自定义
- CLI 配置管理
-
Core 包(
packages/core):- 用途: 作为 Gemini CLI 的后端。它接收来自
packages/cli的请求,协调与 Gemini API 的交互,并管理可用工具的执行。 - 关键功能:
- 与 Google Gemini API 通信的 API 客户端
- Prompt 构建与管理
- 工具注册与执行逻辑
- 会话状态管理
- 服务器端配置
- 用途: 作为 Gemini CLI 的后端。它接收来自
-
Tools(
packages/core/src/tools/):- 用途: 这些模块扩展了 Gemini 模型的能力,使其能够与本地环境交互(如文件系统、Shell 命令、Web 抓取)。
- 交互方式:
packages/core会根据 Gemini 模型的请求调用这些工具。
交互流程
一次典型的 Gemini CLI 交互包含以下步骤:
- 用户输入: 用户在终端中输入提示或命令,由
packages/cli进行管理。 - 发送到 Core:
packages/cli将用户输入传递给packages/core。 - 请求处理: Core 包会:
- 构建发送给 Gemini API 的 Prompt,必要时包含会话历史与可用工具定义。
- 将 Prompt 发送至 Gemini API。
- Gemini API 响应: Gemini API 处理 Prompt 并返回响应,该响应可能是直接答案,也可能请求调用某个工具。
- 工具执行(如适用):
- 当 Gemini API 请求使用工具时,Core 包会准备执行。
- 若工具可能修改文件系统或执行 Shell 命令,系统会先展示工具及其参数,用户需确认后才能执行。
- 只读操作(如读取文件)可能无需用户确认。
- 用户确认后(或无需确认时),Core 包会在对应工具中执行操作,并将结果返回给 Gemini API。
- Gemini API 处理工具结果,生成最终回答。
- 返回 CLI: Core 包将最终回答发送回 CLI 包。
- 展示给用户: CLI 包在终端中格式化并展示响应。
关键设计原则
- 模块化: 将 CLI(前端)与 Core(后端)分离,便于独立开发和未来扩展(例如为同一后端构建不同前端)。
- 可扩展性: 工具系统可扩展,能够轻松加入新能力。
- 用户体验: CLI 专注于提供丰富且互动的终端体验。