📄

Request My Resume

Thank you for your interest! To receive my resume, please reach out to me through any of the following channels:

跟着Google Gemini CLI 学Agent 开发(三):Gemini CLI如何“记住”关键信息?

跟着Google Gemini CLI 学Agent 开发(三):Gemini CLI如何“记住”关键信息?

在前两篇中,我的搭档 Tam 带我们深入了 Gemini CLI 的“安全护城河”(沙箱)和“感知手术刀”(文件系统)。我们已经知道,AI 能安全地、精准地与我们的代码交互了。但这还不够。

我们都经历过 AI 的“金鱼记忆”困境——当你满怀期待地开启一个新会话,准备继续昨天未竟的事业时,却发现AI助手已将一切忘得一干二净。这种“上下文丢失”的顽疾,极大地限制了我们与AI协作的效率和深度。

这一次,Tam 将带我们探索 Gemini CLI 的“大脑”,揭示它是如何通过一套极其精巧的**“分层指令上下文”(Hierarchical Instructional Context)**系统,来攻克这个难题,实现真正的持久化记忆的。

下面,舞台再次交给 Tam。


  • by Tam -

第一章:设计哲学——超越“对话历史”的分层记忆模型

首先必须摒弃一个误解:对话历史不等于记忆。对话历史是被动的“会议纪要”,而记忆是主动的“核心原则”。Gemini CLI 的设计者深刻地认识到这一点,并借鉴了人类的认知模式,构建了一套“分层指令上下文”系统。

1.1 GEMINI.md 的分层世界

这套系统的实现,是通过在文件系统的不同位置寻找一个特殊的文件(默认为 GEMINI.md),构建了三个核心记忆层次:

  • 1.全局记忆 (Global Memory): 位于 ~/.gemini/GEMINI.md,存储跨所有项目的通用偏好,是AI的“个性和灵魂”。

  • 2.项目记忆 (Project Memory): 从当前目录向上递归查找到项目根目录为止,路径上所有找到的 GEMINI.md,定义了项目的“法律与规范”。

  • 3.本地记忆 (Local Memory): 从当前目录向下递归搜索所有子目录中找到的 GEMINI.md,是具体任务的“战术指南”。

在每次交互前,CLI会按“全局 → 项目 → 本地”的顺序拼接所有内容,越具体的记忆排在越后面,从而在模型中获得更高的注意力权重,实现优雅的配置覆盖。

第二章:记忆的塑造与管理——save_memory/memory命令族

2.1 save_memory:一句话塑造AI的全局认知

save_memory 工具的强大之处在于,它提供了一个在对话流中动态修改AI核心设定的能力。当你发现AI的行为不符合你的长期偏好时,可以直接命令它“记住”新规则。

用户: “你刚才生成的Go代码没有处理error,这很不好。请记住:我所有的Go代码都必须对 error 进行显式检查,不能使用 _ 忽略。”

AI (内部调用):save_memory(fact="All my Go code must explicitly check for errors...")

AI (回应): “好的,我已将该规则保存到我的全局记忆中。未来我都会遵循。”

它会将这个事实(fact)结构化地追加到全局记忆文件 ~/.gemini/GEMINI.md 中一个特殊的 ## Gemini Added Memories 章节下,便于管理。

2.2 /memory 命令族:记忆的“控制面板”

如果说save_memory是“写入”接口,/memory命令就是“读取”和“管理”接口:

  • /memory show 记忆的“X光机”,完整地打印出最终拼接好的、即将发给模型的所有记忆上下文,并清晰标注每个片段的来源文件,实现了完全的透明性。

  • /memory refresh 手动“刷新”按钮,强制CLI重新扫描和加载所有 GEMINI.md 文件,确保记忆能实时反映你的手动修改。

第三章:实现揭秘——深入Context Loader的代码迷宫

Context Loader的核心职责是:发现、读取与排序、拼接。其实现是一个精巧的三向文件搜索算法:

  1. 向上搜索 (Project Memory): 从当前目录开始,逐级向上查找 GEMINI.md,直到项目根目录(以 .git 文件夹为标志)。

  2. 向下搜索 (Local Memory): 使用 fast-glob 等高性能库,高效递归地搜索所有子目录中的 GEMINI.md,并天然地支持 .gitignore 规则,排除无关文件。

  3. 带来源的读取: 每个文件内容在被读取时,都会被一个类似 [FROM: path/to/file] 的“信封”包裹,这正是 /memory show 能追溯来源的秘密。

最终,拼接好的巨大字符串,会作为系统提示(System Prompt)或前缀,被注入到每一次对 Gemini API 的调用中,为模型的所有后续思考和回答设定基调、规则和边界。

第四章:最佳实践——成为AI的“记忆调校大师”

理解原理后,关键在于像编写高质量代码一样,去设计和维护你的 GEMINI.md 文件。

全局记忆 (~/.gemini/GEMINI.md)

这是你的“AI个人宪法”。用于定义你的角色、技术栈偏好、沟通风格和个人“编码红线”。

项目记忆 (my-project/GEMINI.md)

这是项目的“团队开发规范”。应定义项目背景、架构原则,并提供关键命令和工作流(如 make test),让AI能直接调用。

本地记忆 (.../module/GEMINI.md)

这是特定模块的“操作手册”或“避坑指南”。用于强调模块职责、列出关键依赖和特殊注意事项(如“严禁记录完整信用卡号”)。

记忆,通往真正AI伙伴关系的最后一块拼图

Gemini CLI的记忆系统,是其设计中最具远见的部分。它通过一套受人类认知模型启发的“分层指令上下文”机制,为我们带来了一个全新的可能性:与一个能够学习、成长、并深度理解我们个人和项目需求的AI建立长期的、高效的伙伴关系

未来的AI工具,其竞争力的核心,将是其构建和利用持久化上下文的能力。Gemini CLI邀请我们每一位使用者,都成为AI的“记忆塑造者”,去打造一个专属于我们自己的、真正懂我们的AI开发伙伴。这,正是通往未来人机协作的康庄大道。

觉得Tam的分析有启发?点个「在看」,「转发」给更多需要的朋友吧!

关注我的公众号,与你一同探索 AI、出海与数字营销的无限可能。

🌌 最智能的AI,不是无所不知,而是最懂你的那一个。

Mr. Guo Logo

© 2026 Mr'Guo

Twitter Github WeChat