在过去的半年里,我一直在使用各种AI编程助手(Kiro、Copilot等)进行前端开发。最初,我和大多数人一样,只在项目初始化时创建一次steering files(指导文件),然后就再也没更新过。结果发现,随着项目迭代,AI给出的建议越来越不准确——它还在用三个月前的技术栈建议,完全不知道我们已经迁移到了新的架构。
这就是静态文档的最大问题:项目是动态发展的,而AI的记忆却停留在过去。每次开启新的会话,AI都像是一个刚入职的实习生,需要你反复解释项目现状。更糟的是,那些已经踩过的坑,AI会带着你一遍又一遍地重蹈覆辙。
不是所有变更都值得记录。经过数十个项目的实践,我发现以下五类信息最具价值:
这是最高优先级的更新项。当你的技术栈发生以下变化时,必须立即更新:
实际案例:有一次我们升级了Ant Design版本,但AI还在推荐旧版的API。结果每次生成组件都要手动修改,效率反而降低了。
AI最容易在这些细节上"幻觉":
NEXT_PUBLIC_API_URL的命名必须统一@/components而非相对路径../../componentsACTIVE|BANNED|PENDING三种,AI不能自创DELETED状态formatDate()时,AI不应重复实现日期格式化清晰的目录规范能避免文件散落各处:
markdown复制- src/ui/ # 所有通用UI组件
- src/hooks/ # 业务无关的hooks
- src/hooks/business/ # 业务相关hooks
这是让AI真正"成长"的关键:
useEffect导致死循环,解决方案是改用ref"经过多次迭代,我总结出最有效的文件组织方式:
| 文件类型 | 内容范畴 | 更新频率 | 示例内容 |
|---|---|---|---|
| tech.md | 技术栈与全局配置 | 低 | Next.js 14, Zustand, 环境变量列表 |
| structure.md | 目录结构与核心模型 | 中 | 文件树、数据模型(User/Order) |
| lessons.md | 经验教训与特殊约束 | 高 | "Dialog必须加append-to-body属性" |
Kiro的Hook系统本质是事件触发器,其核心机制如下:
json复制{
"name": "Hook名称",
"description": "功能描述",
"version": "1",
"enabled": true,
"when": {
"type": "触发条件" // 文件/上下文/手动
},
"then": {
"type": "执行动作", // 询问Agent或执行命令
"prompt": "具体指令"
}
}
经过测试,最实用的触发方式组合:
userTriggered手动触发(用/hook名调用)Prompt设计直接影响输出质量,关键要素包括:
这是我目前在用的生产级Hook配置:
json复制{
"enabled": true,
"name": "Steering Files Auto-Update",
"description": "分析当前会话,更新tech/structure/lessons文件",
"version": "2",
"when": {
"type": "userTriggered"
},
"then": {
"type": "askAgent",
"prompt": "请按以下规则分析会话并更新文档:\n\n1. 技术变更 → tech.md:\n - 新依赖/版本变更 → [版本]区块\n - 环境变量 → [环境配置]区块\n - 路径别名 → [项目配置]区块\n\n2. 结构变更 → structure.md:\n - 新增目录 → [文件结构]区块\n - 模型变更 → [数据模型]区块\n\n3. 经验总结 → lessons.md:\n - Bug修复 → [问题修复]区块\n - 性能优化 → [最佳实践]区块\n\n输出格式要求:\n- 使用Markdown二级标题组织区块\n- 每个变更点注明来源(如'根据#132会话')\n- 只保留长期有效的规范,过滤临时方案"
}
}
/steering-update关键技巧:在Hook的prompt中加入"只保留长期有效的规范"的指令,能有效过滤掉临时解决方案。
问题1:Hook执行后文档变得杂乱
markdown复制## [版本控制]
- Next.js: 14.1.0 (来自#45会话)
## [环境配置]
- API_BASE_URL: /api/v2
问题2:AI过度记录临时方案
"只记录经过至少2次验证的解决方案"
版本控制策略:
markdown复制<!-- 2024-03-01迁移 -->
- 旧:Redux
- 新:Zustand (原因:简化状态管理)
文档结构优化:
markdown复制# tech.md
## 核心依赖
- Next.js: 14.1.0
- React: 18.2.0
## 全局配置
- 别名: @ → ./src
- 环境变量:
- API_URL: /api/v2
经验记录规范:
markdown复制## 组件库问题
### Dialog遮罩层异常
**现象**:遮罩覆盖内容
**解决方案**:添加`append-to-body`
**适用场景**:所有嵌套Dialog
虽然本文以Kiro为例,但相同思路可应用于:
/.github/copilot/目录markdown复制# 更新规范文档
请根据最近修改更新:
- copilot-instructions.md
- constitution.md
重点记录:
1. 新增的技术约束
2. 目录结构调整
3. 需要避免的代码模式
/update-docs触发无论使用什么工具,核心流程都应包含:
经过三个月实践,这套方案带来显著改进:
| 指标 | 改进幅度 | 具体表现 |
|---|---|---|
| 代码首次正确率 | +40% | 减少反复修改次数 |
| 规范一致性 | +65% | 团队成员代码风格趋同 |
| 文档维护时间 | -70% | 无需专门安排文档更新任务 |
| Bug重复出现率 | -55% | 相同错误很少再现 |
未来的优化方向包括:
这种动态记忆机制最令人惊喜的效果是:当新成员加入项目时,AI能立即给出符合当前项目状态的建议,而不是展示过时的"最佳实践"。这相当于为团队配备了一位永远在线的项目导师。