Gemini CLI 架构概览

本文档概述 Gemini CLI 的高层架构。

核心组件

Gemini CLI 主要由两个核心包和一组可在处理命令行输入时使用的工具组成:

  1. CLI 包(packages/cli):

  2. Core 包(packages/core):

    • 用途: 作为 Gemini CLI 的后端。它接收来自 packages/cli 的请求,协调与 Gemini API 的交互,并管理可用工具的执行。
    • 关键功能:
      • 与 Google Gemini API 通信的 API 客户端
      • Prompt 构建与管理
      • 工具注册与执行逻辑
      • 会话状态管理
      • 服务器端配置
  3. Tools(packages/core/src/tools/):

    • 用途: 这些模块扩展了 Gemini 模型的能力,使其能够与本地环境交互(如文件系统、Shell 命令、Web 抓取)。
    • 交互方式: packages/core 会根据 Gemini 模型的请求调用这些工具。

交互流程

一次典型的 Gemini CLI 交互包含以下步骤:

  1. 用户输入: 用户在终端中输入提示或命令,由 packages/cli 进行管理。
  2. 发送到 Core: packages/cli 将用户输入传递给 packages/core
  3. 请求处理: Core 包会:
    • 构建发送给 Gemini API 的 Prompt,必要时包含会话历史与可用工具定义。
    • 将 Prompt 发送至 Gemini API。
  4. Gemini API 响应: Gemini API 处理 Prompt 并返回响应,该响应可能是直接答案,也可能请求调用某个工具。
  5. 工具执行(如适用):
    • 当 Gemini API 请求使用工具时,Core 包会准备执行。
    • 若工具可能修改文件系统或执行 Shell 命令,系统会先展示工具及其参数,用户需确认后才能执行。
    • 只读操作(如读取文件)可能无需用户确认。
    • 用户确认后(或无需确认时),Core 包会在对应工具中执行操作,并将结果返回给 Gemini API。
    • Gemini API 处理工具结果,生成最终回答。
  6. 返回 CLI: Core 包将最终回答发送回 CLI 包。
  7. 展示给用户: CLI 包在终端中格式化并展示响应。

关键设计原则

  • 模块化: 将 CLI(前端)与 Core(后端)分离,便于独立开发和未来扩展(例如为同一后端构建不同前端)。
  • 可扩展性: 工具系统可扩展,能够轻松加入新能力。
  • 用户体验: CLI 专注于提供丰富且互动的终端体验。