正文
随着 AI 编程工具越来越强大,它们不仅可以写代码,还能直接修改文件、提交 Pull Request,甚至运行脚本。乍一看,效率惊人,但潜在风险也很大:AI 可能修改本不该动的文件,破坏核心逻辑、敏感配置,或者引入难以察觉的 bug。
因此,如何让 AI 只改该改的文件,成为团队必须解决的核心问题。
一、明确文件修改边界
AI 并不会自动知道哪些文件可以改、哪些文件必须保持原样。必须明确边界,告诉 AI 哪些目录、文件属于任务范围,哪些文件禁止修改。
策略一:使用项目级说明文件。
AGENTS.md / CLAUDE.md 可以定义文件访问规则,例如:
这种规则可以直接供 AI 参考,避免盲目改动其他目录。
策略二:用 task-specific prompt 限制修改范围。
在启动 AI 编码任务时,给它明确指令,例如:
这种 prompt 级别的控制可以防止任务扩散,但要注意 prompt 必须覆盖所有目标文件路径,否则 AI 可能自己猜测。
## File Access Rules
- Only edit files under `apps/web/src/components/` for UI tasks.
- Only edit files under `apps/api/src/modules/` for API tasks.
- Do not modify configuration files: `.env.production`, `docker-compose.yml`.
- Do not edit legacy directories: `legacy/`, `old_modules/`.只修改以下文件:
- apps/web/src/components/Button.tsx
- apps/web/src/pages/Home.tsx
其他文件请勿改动,任何必要变更都必须先询问。二、通过上下文识别控制修改
AI 生成代码的依据是上下文。让它只改特定文件,需要让它明确理解项目结构和任务目标。
这样,AI 会有意识地将修改限制在指定范围,减少意外越界。
- 提供目录结构:告诉 AI 文件夹和模块分布。
- 提供文件责任说明:告诉 AI 每个目录的用途,例如“components 目录只放 UI 组件”,“utils 目录只放纯函数工具”。
- 限制依赖范围:让 AI 知道只能调用现有模块,禁止新增跨模块依赖。
三、分支管理和工作区隔离
即便有规则,AI 也可能在任务过程中意外改到不该动的文件。分支管理和工作区隔离是保险策略。
只要有人工确认,越界风险就能大幅降低。
- 创建专属任务分支:让 AI 在独立分支工作,不直接触碰主分支。
- 复制工作目录或使用 sandbox:给 AI 一个隔离的代码副本,让它只能操作副本中的文件。
- 提交前 Diff 审查:让 AI 生成修改后,先生成 diff,再由人类审查是否越界。可以要求 AI 输出修改的文件列表。
git diff --name-only四、自动化验证
AI 即便被限制文件,也有可能破坏接口或逻辑。自动化验证是第二道防线。
通过 CI/CD 集成,可以自动检查 AI 的修改是否符合预期。
- Lint 检查:确保风格一致,不破坏约定。
- Type check / Static Analysis:确保类型正确,不破坏依赖关系。
- 单元测试:覆盖任务相关文件的功能验证。
- 集成测试:确保模块交互未被破坏。
五、分层任务与迭代控制
给 AI 的任务越小,它改错文件的概率越低。建议将大任务拆成多个小任务。
每个任务都有明确的目标文件,迭代过程中发现越界修改可以立即纠正。
- 先改单个模块或组件文件。
- 完成后运行测试和审查 diff。
- 再进入下一模块。
六、AI 输出审查与风险提示
让 AI 输出每次修改涉及的文件列表、修改原因和潜在风险,可以辅助开发者判断:
这样,AI 只修改任务相关文件,同时给出修改理由,人工审查更高效。
## AI Modification Summary
- Files modified:
- apps/web/src/components/Button.tsx
- Reason for modification: Update onClick handler to fix bug
- Potential risks: UI regression if props structure changed
- Tests run: unit tests passed七、总结策略
要让 AI 只改该改的文件,需要多层保障:
结合以上策略,AI 修改的文件范围可以严格控制,同时确保修改安全可靠。
- 明确规则:通过 AGENTS.md / CLAUDE.md 或 prompt 指令明确修改范围。
- 提供上下文:项目结构、文件用途、依赖限制。
- 分支隔离:独立分支或 sandbox 环境。
- 自动化验证:lint、type check、单元测试、集成测试。
- 分层任务:小任务迭代,降低越界风险。
- 输出审查:让 AI 自行列出修改文件和风险,便于人工确认。
FAQ
结论
AI 写代码强大,但不受约束时可能修改任何文件,带来不可预测风险。
让 AI 只改该改的文件,需要多层保障:明确规则、上下文约束、分支隔离、自动化验证、分层任务和输出审查。
在 AI 时代,边界管理比代码本身更重要,只有这样,AI 才能成为可靠的工程协作者,而不是潜在的破坏者。