AGENTS.md:让 AI 读懂你的项目

为什么 AI 总是给出"差不多但不对"的代码?

你有没有遇到过这样的情况:向 AI 编程助手提问,它的回答技术上正确,但风格完全不像你的项目——用了 qDebug() 而你的团队统一用 USE_LOG_XXX,写了裸指针而你们规定用智能指针,或者生成的 QML 文件没有 pragma ComponentBehavior: Bound

这不是 AI 不够聪明,而是它缺乏项目上下文。AI 每次会话都从零开始,它不知道你的技术栈、命名规范、架构约定,甚至不知道该用 C++20 还是 C++11。

AGENTS.md 就是为了解决这个问题而生的。


什么是 AGENTS.md?

AGENTS.md 是一个放置在项目根目录的普通 Markdown 文件,专门写给 AI 编程助手读取的"项目说明书"。

当 AI 工具(GitHub Copilot、Claude、Cursor 等)进入你的工作空间时,它会自动检索根目录下的这个文件,将其内容注入到自身的上下文中,从此你的项目规范就成了 AI 的"内置知识"。

你可以把它理解为:给新来的 AI 员工写的入职手册,只不过这个员工每次重启都会忘记一切,所以手册必须始终在场。

类似的文件还有 .cursorrules(Cursor 专用)、.github/copilot-instructions.md(GitHub Copilot 专用),而 AGENTS.md 因命名更通用、语义更明确,正在成为多工具兼容的事实标准。


它能做什么?

一份写得好的 AGENTS.md 能让 AI 做到:

没有 AGENTS.md 有 AGENTS.md
生成 qDebug() 使用项目约定的 USE_LOG_XXX
随意选择 Qt 5 / Qt 6 API 明确使用 Qt 6.8 特性
SIGNAL()/SLOT() 宏连接信号 使用函数指针语法
忘记加 pragma ComponentBehavior: Bound 每个 QML 文件顶部自动添加
在 QML 里硬编码颜色 #1e1e2e 引用 GlobalSet.qml 中的颜色常量
在模型层直接写 SQL 提示应封装到 Database/ 目录

简言之,AGENTS.md 将团队共识转化为 AI 的行为约束


核心原理

理解 AGENTS.md 的工作原理,有助于写出真正有效的内容。

上下文窗口注入

现代大语言模型通过"上下文窗口"理解任务。AI 工具在处理你的问题之前,会将 AGENTS.md 的内容与你的提问一起送入模型。这意味着:

  • 文件越长,占用的上下文越多,留给代码和对话的空间越少
  • 精简优于详尽——每一行都有成本

规则的覆盖优先级

通常情况下,规则的生效优先级为:

用户临时指令 > 项目 AGENTS.md > 模型默认行为

这意味着 AGENTS.md 是项目级别的默认值,用户可以在对话中随时覆盖它,但它提供了一个可靠的"基准线"。

AI 识别的信号词

AI 对某些结构天然敏感——清晰的标题、表格、代码块、"必须/禁止/优先"等强语气词。使用这些结构能让规则被更可靠地识别和遵守。


编写原则

原则一:面向 AI,而非面向人类

AGENTS.md 和 README.md 不一样。README 是给人读的,可以讲故事;AGENTS.md 是给 AI 读的,应该写指令。

❌ 不好的写法(叙述式):

本项目历史上曾经使用过 Qt 5,后来迁移到了 Qt 6,因此部分老代码可能还有 Qt 5 的写法,但我们正在逐步更新…

✅ 好的写法(指令式):

Qt 版本:Qt 6.8。禁用 Qt 5 API,所有新代码使用 Qt 6 风格。

原则二:写"AI 猜不到"的规范

AI 已经从数亿行代码中学习了通用的 C++ 和 Qt 最佳实践。AGENTS.md 的价值在于覆盖那些项目特有的、与通用规范有偏差的约定

问自己:“如果 AI 不看这条规则,它会做什么?”

  • 如果它大概率会做对 → 不用写
  • 如果它可能做错 → 必须写

原则三:结论先行,越短越好

每条规则用一句话说清核心,具体示例放在次要位置。AI 对"优先考虑 X,原因是 Y"的结构响应最好。

原则四:强弱语气要分明

用不同的措辞表达约束强度:

强度 措辞示例
强制 禁止必须不可
推荐 优先建议应该
参考 通常一般倾向于

原则五:定期维护

代码会演进,AGENTS.md 也应该随之更新。过时的规则比没有规则更危险——它会让 AI 生成符合旧规范的代码,从而引入隐蔽的一致性问题。


文件结构建议

一个完整的 AGENTS.md 通常包含以下几个部分:

# 项目名称 AI 编码指南

## 项目定位
(一段话说清项目是什么、用于什么场景、AI 应扮演什么角色)

## 技术栈
(语言版本、框架版本、核心依赖——越精确越好)

## 架构概览
(目录结构、模块职责、关键数据流向)

## C++ 编码规范
(命名、智能指针、信号槽风格、头文件约定等)

## QML 编码规范
(如有 UI 层)

## 构建与测试
(构建命令、测试方法——AI 需要知道如何验证自己的改动)

## 关键约定
(所有"坑",项目特有的禁区和强制规则)

真实案例解析

以下是一个真实项目(Qt6/QML 嵌入式+桌面融合应用)的 AGENTS.md 片段及分析:

技术栈表格:

| 层次 | 技术 |
|------|------|
| 语言 | C++20、QML(Qt Quick) |
| Qt 版本 | Qt 6.8(`qt_standard_project_setup(REQUIRES 6.8)`) |
| 构建系统 | CMake ≥ 3.16,AUTOMOC/AUTORCC 开启 |

用表格而非散文,AI 解析更精准。连 CMake 函数名都写进去,消除一切歧义。

强制约束区:

- 信号槽:优先使用新式函数指针语法,避免 SIGNAL()/SLOT() 宏
- 命名:类名 PascalCase,成员变量 camelCase_(后缀下划线)
- 颜色/主题:颜色值集中定义在 GlobalSet.qml 中,禁止在业务组件里硬编码颜色值

每条规则具体到操作层面,没有"尽量"、"大概"这类模糊词。

强制编译验证(对 AI 的行为约束):

> **强制要求**:每次修改 C++ 或 QML 文件后,必须对所在子项目执行一次编译测试,
> 确认无编译错误后方可提交或结束任务。

这条规则不是针对人类程序员,而是指示 AI 自主执行编译来验证代码——这是 AGENTS.md 与 README 最本质的区别之一。

变更输出格式(规范化 AI 的输出):

> **变更总结要求**:每次任务结束后,必须以如下格式输出本次变更摘要:
> | 文件 | 改动内容 | 改动原因 |

让 AI 输出结构化的变更摘要,便于 Code Review,这是将 AI 纳入工程流程的关键一步。


从零开始写你的 AGENTS.md

Step 1:列出你最常需要纠正 AI 的问题

回想最近一个月,你在 AI 生成的代码里改过什么?每一次纠正都是一条潜在规则。

Step 2:写最小可用版本

先写 50 行以内的核心规则,上线验证效果,再逐步扩充。不要追求一次写完。

Step 3:让 AI 帮你写初稿

这是一个绝妙的 bootstrap:把你的 README.md、主要头文件、CMakeLists.txt 喂给 AI,让它生成一份 AGENTS.md 草稿,然后你来修订。

Step 4:团队评审

AGENTS.md 本质上是团队编码规范的可执行化,它的内容应该经过团队讨论,像代码一样 Code Review,像代码一样版本管理。


常见误区

误区 1:越详细越好
AGENTS.md 占用上下文窗口。写 2000 行详细规范,不如写 200 行精准规则。

误区 2:只写规范,不写架构
架构信息(目录结构、模块职责)对 AI 的帮助往往大于编码规范。AI 最需要的是"这段代码应该放哪里"。

误区 3:一劳永逸
项目在演进,AGENTS.md 也要定期更新。建议每个 Sprint 或重大重构后做一次 review。

误区 4:认为 AI 会 100% 遵守
AGENTS.md 是提升 AI 一致性的工具,不是银弹。复杂规则仍需在对话中显式提醒,尤其是安全相关的约束。


总结

AGENTS.md 是人与 AI 协作的契约文件。它将散落在代码评审、口头约定、Wiki 页面中的团队规范,浓缩成一份 AI 可读、可执行的项目宪法。

写好它,你得到的不只是一个更听话的 AI 助手,而是一个真正融入你团队文化的编程伙伴——它知道你们的禁区,理解你们的架构,说你们的语言。

投入 30 分钟写好一份 AGENTS.md,可以节省你未来几百次"不对,我们项目不这么做"的纠正。


参考工具:GitHub Copilot、Claude (Anthropic)、Cursor;参考规范:OpenAI AGENTS.md 标准、.cursorrules 社区实践

Logo

这里是“一人公司”的成长家园。我们提供从产品曝光、技术变现到法律财税的全栈内容,并连接云服务、办公空间等稀缺资源,助你专注创造,无忧运营。

更多推荐