嘿,各位技术同好!今天我们来聊一个能极大提升AI编程助手效率的酷炫功能——Google Gemini CLI 中的 GEMINI.md
文件。
在日常开发中,我们越来越依赖像 Gemini 这样的 AI 助手来帮我们写代码、调试 Bug 甚至重构项目。但大家是否遇到过这种情况:每次打开一个新的终端会话,都得重复告诉 AI 我们的项目规范、技术栈和特殊要求?这就像在和一个记忆力只有七秒的鱼合作,效率可想而知。
GEMINI.md
的出现就是为了解决这个问题。它相当于我们给项目 AI 配备的一份专属“说明书”或“长期记忆”,让 Gemini CLI 在我们的项目里“耳濡目染”,成为真正懂我们的那个“人”。
什么是 GEMINI.md?
简单来说,GEMINI.md
是一个 Markdown 格式的文本文件。我们可以将它放置在我们的项目目录中,用来定义项目相关的、希望 Gemini 遵守的各种指令和上下文信息。 当我们运行 gemini
命令时,它会自动读取这些文件,将其内容作为“系统提示”或“记忆”的一部分,从而指导 AI 的行为和代码生成风格。
这份“说明书”可以包含任何内容,比如:
- 编码规范:使用 TypeScript、遵循 ESLint 规则、Tab 缩进用2个空格。
- 架构模式:本项目采用微服务架构,前端是 Next.js,后端是 Go,请在对应目录下生成代码。
- 技术选型:状态管理请使用 Redux Toolkit,测试框架请用 Jest。
- 禁忌指令:永远不要修改
.env
或terraform.tfstate
这样的敏感文件。 - 项目背景:这是一个电商平台的后台管理系统,核心业务是订单处理。
通过这种方式,我们无需在每次提问时都重复背景信息,AI 就能心领神会,生成更贴合项目需求的代码。
Gemini 如何“阅读”GEMINI.md?上下文的层级结构
Gemini CLI 的一个强大之处在于它支持层级化的上下文加载。它会从多个位置寻找 GEMINI.md
文件,并将它们合并成一个最终的上下文,让我们可以同时设置全局和局部的规则。
这个加载顺序遵循一个基本原则:越具体(离当前目录越近)的配置,优先级越高。
下面是 Gemini CLI 查找 GEMINI.md
的路径和优先级顺序:
- 全局上下文 (Global Context):位于
~/.gemini/GEMINI.md
。这里存放的指令适用于我们所有的项目,比如我们的个人编码偏好、通用的安全提示等。 - 项目及祖先上下文 (Project/Ancestor Context):从我们当前的目录开始,向上逐级查找到项目根目录(甚至是根目录的父目录),加载所有找到的
GEMINI.md
文件。这允许我们在项目根目录定义整体规则。 - 子目录上下文 (Sub-directory Context):CLI 还会扫描当前工作目录下的子目录,加载其中的
GEMINI.md
文件。这对于组件化或微服务项目特别有用,我们可以为每个模块或服务定义特定的指令。
我们可以用一个简单的模型来表示这个层级结构:
我们可以随时在 Gemini CLI 中输入 /memory show
命令,查看当前合并后的完整上下文内容,这对于调试我们的 GEMINI.md
配置非常有用。
实战演练:如何编写一份高效的 GEMINI.md
理论说完了,我们来看点实际的。假设我们正在开发一个使用 Go 语言的后端项目,我们可以这样来构建我们的 GEMINI.md
。
第一步:设置全局偏好 (~/.gemini/GEMINI.md
)
这里放一些通用的、跨项目的个人习惯。
# 全局 Gemini 指令## 我的身份
你是一个资深的软件工程师,精通 Go 和系统设计。你的回答应该专业、严谨且注重代码质量。## 核心指令
- **安全第一**:绝不主动在代码中暴露任何密钥或敏感信息。
- **解释优先**:在提供代码前,先简要解释你的实现思路。
- **保持学习**:你会主动学习并应用最新的技术最佳实践。
第二步:定义项目级规范 (/path/to/my-go-project/GEMINI.md
)
在项目根目录,我们定义此项目的技术栈和宏观规则。
# 项目:订单管理系统 (Order Management System)## 1. 技术栈
- **语言**: Go (版本 1.21+)
- **Web框架**: Gin
- **数据库**: PostgreSQL
- **ORM**: GORM
- **测试框架**: Testify## 2. 编码规范
- 所有代码必须通过 `go fmt` 和 `go vet` 检查。
- 函数和变量命名采用驼峰式。
- 每个公共函数都必须有清晰的注释文档。## 3. 禁忌
- **警告**:绝对禁止直接执行 `DROP DATABASE` 或 `DROP TABLE` 相关的 SQL 语句。
- **警告**:不要修改 `configs/` 目录下的任何生产环境配置文件。
第三步:为特定模块添加规则 (/path/to/my-go-project/internal/models/GEMINI.md
)
在数据库模型目录,我们可以给出更具体的指令。
# 模块:数据库模型 (Models)- 此目录下的所有 Go 文件都是 GORM 数据模型。
- 创建新模型时,必须包含 `ID`, `CreatedAt`, `UpdatedAt` 字段。
- 字段的 JSON Tag 必须使用 `snake_case` (下划线命名法)。
通过这样层层递进的配置,当我们进入 models
目录并向 Gemini 请求“创建一个用户模型”时,它会自动遵循上述所有规则,生成既符合项目规范又满足模块特殊要求的代码。
实用技巧与最佳实践
为了让 GEMINI.md
发挥最大效用,这里有一些来自社区和官方的最佳实践:
- 保持模块化,避免臃肿:不要试图把所有东西都塞进一个巨大的
GEMINI.md
文件里。过多的上下文信息可能会让 AI 感到困惑,导致性能下降,这种现象被称为“上下文膨胀”(Context Bloat)。 - 使用导入功能:对于复杂的项目,我们可以将不同的规则拆分到多个
.md
文件中,然后在主GEMINI.md
里使用@file.md
语法进行导入,保持结构清晰。# 主项目 GEMINI.md @./.gemini/style_guide.md @./.gemini/testing_policy.md# 其他项目特定指令...
- 指令要明确、果断:对于不容商量的规则,使用强硬、清晰的语言,比如“必须”、“禁止”、“永远不要”。
- 分解复杂任务:不要指望 AI 一次性完成一个巨大的任务。将复杂需求分解成更小的、具体的步骤,引导 AI 逐步完成,效果会更好。
- 定期更新:项目在演进,我们的
GEMINI.md
也应该随之更新,确保它能准确反映项目的当前状态和规范。
结论
GEMINI.md
是一个看似简单却极其强大的功能,它将传统的“一次性问答”模式,升级为了可持续的、有记忆的“协作开发”模式。通过为我们的 AI 助手精心打造一份项目说明书,我们不仅能节省大量重复沟通的时间,还能确保整个项目代码风格的统一性和高质量。
这正是我们所期待的 AI 辅助开发:不是一个只会盲目执行命令的工具,而是一个真正理解项目、融入团队的智能伙伴。现在就去项目里创建一个 GEMINI.md
,开始调教属于我们自己的 AI 专家吧!