Skip to content

Gemini CLI 的内存管理让 AI 在每次对话中都"记得"你的项目规范:在 GEMINI.md 文件里写入框架偏好、编码规范、禁止行为,每次会话自动加载;用 save_memory 保存临时事实(如服务器 IP);用 /memory show 检查 AI 当前"知道"什么。全局 > 项目 > 子目录的三级配置让规则精细到目录级别。

内存与上下文管理

通过 GEMINI.md 和 Memory 工具,让 Gemini CLI 记住你的项目规范和个人偏好,无需在每次对话中重复解释。

前置条件

  • Gemini CLI 已安装并完成认证,参见 安装指南
  • 有一个项目目录需要设置持久规则

为什么要管理上下文?

Gemini CLI 功能强大但通用。它不知道你喜欢的测试框架、代码缩进风格,或者你不想在 TypeScript 中用 any。上下文管理通过持久记忆解决这个问题:

  • 强制规范:确保每个生成的文件都符合团队的风格指南
  • 设定角色:告诉 AI 以"高级 Rust 工程师"或"QA 专家"的视角工作
  • 记住事实:保存"数据库端口是 5432"这类信息,不用每次重复

GEMINI.md:项目级规则

最强大的上下文控制方式是 GEMINI.md 文件。这是包含指令的 Markdown 文件,每次对话自动加载。

创建项目规则文件

  1. 在项目根目录创建 GEMINI.md
markdown
# 项目规范

- **框架**:使用 React + Vite
- **样式**:所有样式使用 Tailwind CSS,不写自定义 CSS
- **测试**:每个新组件必须包含 Vitest 单元测试
- **语气**:简洁明了,不要解释基础 React 概念
  1. 启动新会话,Gemini CLI 会自动应用这些规则。

三级配置层次

配置按层次加载,优先级从低到高:

级别文件路径适用范围
全局~/.gemini/GEMINI.md你的所有项目
项目根./GEMINI.md当前仓库
子目录./src/GEMINI.mdsrc 目录下的操作

示例: 在全局配置设"始终使用严格类型检查",在后端仓库设"使用 Python 3.11"——后者只在那个项目生效。

更多 GEMINI.md 语法细节,参见 GEMINI.md 参考

Memory:记住一次性事实

不想写配置文件,只想让 AI 记住某件事?直接在对话中告诉它:

保存记忆

记住我更喜欢在所有可能的地方用 'const' 而不是 'let'。

AI 使用 save_memory 工具把这个事实存入你的全局记忆文件。

保存这个事实:预发布服务器 IP 是 10.0.0.5。

自动应用记忆

事实保存后,你不需要主动调用,AI 会自动"知道"它:

下次的 Prompt:

帮我写一个部署到预发布环境的脚本。

AI 响应: "我来写一个部署到 10.0.0.5 的脚本..."

检查和刷新上下文

查看当前上下文

想知道 AI 现在"接收到了什么指令",使用:

/memory show

这会打印当前会话中所有 GEMINI.md 和保存记忆的完整拼接内容——调试"为什么 AI 不遵守某个规则"时非常有用。

刷新上下文

会话进行中编辑了 GEMINI.md 文件,AI 不会立即感知,强制重载:

/memory reload

最佳实践

  • 保持精简:不要往 GEMINI.md 里堆砌大量内容,只写对代码生成有直接指导意义的指令
  • 用否定约束:明确告诉 AI"不要"做什么(如"不要用 class components")往往比模糊的正面指令更有效
  • 定期检查:项目迭代后定期清理 GEMINI.md,删除过时的规则

下一步

常见问题

Q: GEMINI.md 和 save_memory 有什么区别?

A: GEMINI.md 适合持久的项目规范(提交到 git,团队共享),save_memory 适合个人的一次性事实(只存在你本地)。前者是"规则",后者是"笔记"。

Q: 修改全局 GEMINI.md 会影响所有项目吗?

A: 是的,~/.gemini/GEMINI.md 的内容会在你所有项目的所有会话中加载。建议全局文件只放非常通用的个人偏好(如语言风格、基本规范),项目特定规则写在项目根目录的 GEMINI.md 里。

Q: 上下文太长会影响 AI 的响应质量吗?

A: 会。GEMINI.md 内容和记忆都占用 Token,过多的上下文不仅消耗费用,还可能让 AI 难以聚焦在最相关的指令上。保持每个 GEMINI.md 文件在 200 行以内是个好习惯。