1. 从复杂架构到极简实践的认知转变
作为一名经历过多次技术范式转换的老程序员,我深刻理解团队在探索AI辅助开发时走过的弯路。最初,我们和大多数技术团队一样,陷入了"架构完美主义"的陷阱——设计了包含Command层、Agent层、Skill层的三层架构,制定了严格的九步工作流,甚至为Agent间通信设计了标准JSON协议。
这种设计在纸面上看起来很美,直到我们尝试用它完成一个简单的字段添加任务:整个过程需要创建微需求、等待意图识别、初始化工作空间...而实际上,直接在聊天框输入"帮我在user表加个last_login_at字段"只需5分钟就能完成。这个反差让我们开始反思:AI工程化的本质究竟是什么?
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 文档驱动的核心哲学
2.1 文本作为通用接口
经过反复实践,我们认识到:LLM本身就是最好的解释器。NotebookLM和Claude Code的案例表明,复杂的中间层往往适得其反。我们最终形成的解决方案简单得令人惊讶——用Markdown文档作为人机协作的通用接口。
在项目根目录创建AGENTS.md文件,内容可以如此简单:
markdown复制# 项目规范
- 代码注释用中文,变量命名用英文
- 错误处理必须包装:fmt.Errorf("failed to x: %w", err)
- 禁止在循环中调用数据库
# 常见坑点
- Apollo配置需使用xxx.yyy.zzz三段式key
- 测试环境数据库IP是10.0.0.1
这种做法的精妙之处在于:
- 同一份文档同时服务于人类开发者和AI助手
- 修改即生效,无需复杂的部署流程
- 知识积累形成复利效应
2.2 声明式 vs 命令式
传统工程思维倾向于用代码"命令"AI:
python复制class LintChecker:
def run(self):
if not self._execute_lint():
raise PreCommitError("Lint检查失败")
而文档驱动采用"声明式"表达:
markdown复制## 代码提交规范
- 提交前必须运行`make lint`
- lint不通过不要提交,先修复问题
后者不仅实现相同功能,而且:
- 更易于维护(直接编辑文本)
- 更灵活(AI可以自主决定如何执行lint)
- 更透明(所有规则对人机可见)
3. 实践中的三个关键原则
3.1 文档即记忆(Dual Use)
我们严格执行"单源真理"原则:
- 所有项目知识只维护一份
- 文档编写时同时考虑人类和AI读者
- 遇到问题首先更新文档而非私下解决
典型的文档演进路径:
code复制v1.0 基础规范 → v1.1 添加踩坑记录 → v2.0 建立知识索引
3.2 先跑起来再优化
放弃"一步到位"的幻想,我们的启动checklist只有:
- 创建AGENTS.md写入最基本规范
- 建立context/目录存放技术文档
- 在process.txt记录当前任务状态
只有当某个模式被重复使用5次以上,我们才会考虑将其封装为工具。
3.3 自然演进策略
通过观察AI的实际使用情况来驱动改进:
- 记录AI的常见错误类型
- 分析高频操作模式
- 将稳定模式固化为文档或工具
例如当我们发现AI经常混淆测试环境配置时,就新增了:
markdown复制<env_specific>
测试环境:
- 数据库:10.0.0.1:3306
- Redis密码:test_redis_123
</env_specific>
4. 技术实现细节
4.1 目录结构设计
经过多次迭代形成的标准结构:
code复制project/
├── AGENTS.md # 核心规范
├── context/ # 知识库
│ ├── business/ # 业务规则
│ └── tech/ # 技术文档
├── process.txt # 当前任务状态
└── plans/ # 需求计划
└── {feature_id}.md
4.2 状态管理方案
解决AI"失忆"问题的具体实现:
- 会话结束时自动生成状态快照:
markdown复制# process.txt
[状态] 开发中
[进度]
- [x] 用户登录接口
- [ ] Token刷新逻辑
[下一步] 编写集成测试
- 新会话开始时加载快照:
python复制def load_context():
with open('process.txt') as f:
return f.read()
- 关键节点添加验证:
markdown复制!验证步骤:
1. 运行`make test-integration`
2. 检查覆盖率≥80%
4.3 团队协作模式
我们采用"单仓库多分支"策略:
- master分支维护核心知识库
- 每个开发者基于feature分支工作
- 经验通过PR合并到master
典型的知识沉淀流程:
- 开发者遇到问题并解决
- 将解决方案写入context/
- 创建PR并@团队成员审查
- 合并后全团队共享知识
5. 避坑指南与性能优化
5.1 常见问题排查
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
| AI重复相同错误 | 未及时更新文档 | 将纠正内容加入AGENTS.md |
| 上下文丢失 | 未保存process.txt | 设置自动保存钩子 |
| 执行结果不一致 | 环境差异 | 在文档中明确环境配置 |
5.2 性能优化技巧
- 使用XML标签组织复杂规范:
markdown复制<coding_style>
<前端>
- 使用TypeScript严格模式
- React组件采用FC类型
</前端>
</coding_style>
- 实现渐进式加载:
python复制def get_relevant_context(query):
# 先用简单grep查找
# 未找到再尝试语义搜索
- 建立快捷指令别名:
markdown复制# 快捷命令
!!review = 请以严格标准审查这段代码
!!think = 逐步思考并解释推理过程
6. 效果评估与量化指标
经过3个月实践,我们观察到:
- 新人上手时间从2周缩短到2天
- 重复性问题减少约70%
- 代码审查通过率提升40%
- 平均需求交付周期缩短35%
特别值得注意的是知识沉淀的复利效应:
- 第一个月:记录23个问题解决方案
- 第三个月:累计解决137类常见问题
- 半年后:90%的日常问题都能通过文档自动解决
7. 进阶应用场景
7.1 自动化测试生成
在AGENTS.md中添加:
markdown复制# 测试规范
单元测试必须包含:
- 正常用例
- 边界用例
- 错误处理
AI会根据此规范自动补充测试用例:
go复制// 自动生成的测试示例
func TestLogin(t *testing.T) {
t.Run("正常登录", func(t *testing.T) {
// ...
})
t.Run("空密码", func(t *testing.T) {
// ...
})
}
7.2 智能代码审查
建立review.md规范:
markdown复制## 审查重点
1. 安全性:检查SQL注入风险
2. 性能:避免N+1查询
3. 可读性:函数不超过50行
AI会根据这些要点自动标注问题代码。
7.3 需求分析辅助
将产品需求文档放在context/下,AI可以:
- 识别需求矛盾点
- 建议技术实现方案
- 评估开发工作量
8. 工具链推荐
经过实战检验的工具组合:
| 工具类型 | 推荐方案 | 优势 |
|---|---|---|
| 文档编辑 | VS Code + Markdown插件 | 实时预览 |
| 版本控制 | Git + GitLens | 变更追溯 |
| 自动化 | Makefile | 跨平台 |
| 监控 | 自定义脚本 | 轻量级 |
关键配置示例:
makefile复制# Makefile
sync:
git pull
@echo "更新AGENTS.md修改时间"
touch AGENTS.md
9. 团队落地路线图
建议分三个阶段实施:
| 阶段 | 目标 | 持续时间 |
|---|---|---|
| 试点 | 1-2个核心成员验证流程 | 2周 |
| 推广 | 团队50%成员日常使用 | 1个月 |
| 深化 | 形成知识沉淀的正循环 | 持续 |
每个阶段的关键成功因素:
- 试点:选择高频率低风险场景
- 推广:建立文档贡献激励机制
- 深化:定期知识库健康检查
10. 未来演进方向
当前我们正在探索:
- 自动化文档质量检测
- 智能知识图谱构建
- 跨项目知识共享
- 基于使用频率的智能提示
一个正在试验中的特性:
markdown复制<!-- 高频提示 -->
@高频 数据库连接需检查连接池配置
这种提示会根据实际错误发生率自动调整显示优先级。
