Skip to content

Gemini CLI 的核心包(packages/core)负责与 Gemini API 通信、管理工具调用、维护会话状态。当对话接近 token 上限时,核心会自动压缩历史记录;Pro 模型限流时自动 fallback 到 Flash 模型。理解这些机制有助于你更好地预判 CLI 的行为。

Gemini CLI 核心架构

Gemini CLI 由两个主要包组成:packages/cli 提供用户界面,packages/core 是后端核心,负责与 Gemini API 通信、管理工具执行以及处理来自 CLI 层的请求。

本页说明核心包的主要职责和内部机制。


核心职责

packages/core 负责以下工作:

  • Gemini API 通信:安全地向 Google Gemini API 发送用户 Prompt,并接收模型响应。
  • Prompt 构建:组装发给模型的完整 Prompt,包含对话历史、工具定义和来自 GEMINI.md 文件的上下文。
  • 工具管理与编排
    • 注册所有可用工具(文件系统工具、Shell 命令执行等)
    • 解析模型的工具调用请求
    • 执行工具并将结果返回给模型继续处理
  • 会话与状态管理:维护对话状态,包括历史记录和上下文信息。
  • 配置管理:处理 API Key 访问、模型选择、工具设置等核心配置。

安全机制

核心包在安全方面扮演重要角色:

  • API Key 管理:安全处理 GEMINI_API_KEY,确保与 API 通信时的安全性。
  • 工具执行安全:涉及本地系统操作的工具(如 run_shell_command)会通过沙箱机制隔离执行,防止意外修改。详见 沙箱安全隔离

对话历史压缩

为防止长对话超出模型的 token 上限,核心包内置了对话历史压缩功能

当对话接近配置模型的 token 上限时,核心会在发送请求前自动压缩历史记录。压缩过程在信息层面是无损的——保留所有关键信息,但减少 token 占用。

各模型的 token 上限参见 Google AI 文档


模型 Fallback 机制

Gemini CLI 内置了模型 fallback 机制,确保在默认 Pro 模型被限流时仍可继续使用。

  • 使用 Pro 模型时,若检测到限流,当前会话自动切换到 Flash 模型,无需中断工作。
  • 内部工具调用(如 Prompt 补全和分类)使用 gemini-2.5-flash-lite;当该模型配额耗尽时,会静默 fallback 到 gemini-2.5-flash 再到 gemini-2.5-pro,不影响你配置的主模型。

完整的模型路由配置见 模型路由与故障转移


文件发现服务

文件发现服务负责在项目中找到与当前上下文相关的文件。@ 命令和其他需要访问文件的工具都依赖此服务。


GEMINI.md 记忆发现服务

记忆发现服务负责查找并加载为模型提供上下文的 GEMINI.md 文件。搜索采用分层策略,从当前工作目录开始,逐级向上直到项目根目录和用户主目录,同时也搜索子目录。

这意味着你可以同时维护全局项目级组件级的上下文文件,核心包会将它们合并,为模型提供最相关的信息。

使用 /memory 命令 可以 show(查看)、add(添加)、refresh(刷新)已加载的 GEMINI.md 内容。

详细用法见 GEMINI.md 上下文文件自动记忆(Auto Memory)


引用(Citations)系统

当 Gemini 在回答中引用了某个来源的文本时,会自动将引用附加到输出末尾。此功能默认开启,可通过 ui.showCitations 设置关闭。

  • 建议文件修改时,引用显示在确认提示之前。
  • 引用始终显示在模型回复的末尾。
  • 重复引用会自动去重,并按字母顺序排列。

常见问题

Q: 对话历史被压缩后,我之前提到的上下文会丢失吗?

A: 设计上是无损压缩,核心信息不会丢失。但如果某些细节(如很早之前提到的变量名)在后续对话中没有被再次引用,压缩后可能不再出现在模型的上下文中。建议在长会话中适当重申重要约束。

Q: 模型 fallback 到 Flash 时,输出质量会明显下降吗?

A: Flash 模型速度更快但推理深度略低于 Pro。对于简单任务,Flash 足以胜任;对于复杂代码重构或多步推理任务,可以等 Pro 模型配额恢复后重试,或升级配额计划。

Q: 如何查看 CLI 当前加载了哪些 GEMINI.md 文件?

A: 在 CLI 内运行 /memory show,会列出当前会话加载的所有 GEMINI.md 文件路径及内容摘要。