发布于 2026-01-06 5 阅读
0

从人工智能结对编程中汲取的 12 个教训(与人工智能共处 180 天,零炒作)

从人工智能结对编程中汲取的 12 个教训(与人工智能共处 180 天,零炒作)

经过六个月每天在多个代码库中进行人工智能结对编程,以下才是真正奏效的方法。抛开炒作,这才是实践中行之有效的方法。

结对编程

太长不看

规划与流程:

  • 先制定计划;在编写代码之前,让 AI 对计划进行评估。
  • 使用编辑测试循环:编写失败的测试 → AI 修复 → 重复
  • 为了便于查看差异,请频繁提交小幅更改。

快捷工程:

  • 保持提示简短明了,上下文信息过多会降低准确性。
  • 在编写代码之前,要求提供逐步推理过程。
  • 请使用文件引用(@path /file.rs:42-88),而不是代码转储。

上下文管理:

  • 重大更改后请重新索引项目,以避免出现幻觉。
  • 使用 gitingest.com 等工具进行代码库摘要
  • 使用 Context7 MCP 可以随时获取最新文档。
  • 将 AI 输出视为初级开发人员的 PR;审查所有内容

哪些方法行不通:

  • 将整个代码库直接导入提示符
  • 期望人工智能理解隐含需求
  • 未经审查就将安全关键代码交给人工智能处理

人工智能结对编程

1. 首先制定书面计划(认真地说,先做这一步)

让你的 AI 为你正在开发的功能起草一份 Markdown 格式的计划文档。然后对其进行改进:

  1. 针对极端情况提出澄清性问题
  2. 让它自我评估计划中的漏洞
  3. 重新生成改进版本

首先

将最终方案保存instructions.md并在每个提示中引用。这一步就能避免 80% 的“人工智能中途出错”的情况发生。

真实案例:

Write a plan for adding rate limiting to our API. Include:
- Which endpoints need protection
- Storage mechanism for rate data
- Error responses and status codes
- Integration points with existing middleware

Now critique this plan. What did you miss?

Enter fullscreen mode Exit fullscreen mode

2. 掌握编辑-测试循环

环形

这是 TDD,但由 AI 来完成实现:

  1. 让AI编写一个能准确捕捉到你想要结果的失败测试。
  2. 请自行检查测试内容——确保它测试的是正确的行为。
  3. 然后告诉人工智能:“让这个测试通过”。
  4. 让人工智能迭代——它可以自动运行测试并修复故障。

关键在于实现之前要审查测试。糟糕的测试会导致代码满足错误的要求。

3. 要求逐步推理

将以下内容添加到您的提示中:

Explain your approach step-by-step before writing any code.
Enter fullscreen mode Exit fullscreen mode

你可以在错误的假设变成错误的代码之前就发现它们。能够自主思考的AI模型犯的愚蠢错误更少。

4. 停止倾倒背景信息,开始精心策划它

停止倾销

大型项目会分散人工智能的注意力。以下是解决方法:

使用 gitingest.com 获取代码库摘要

  1. 访问 gitingest.com
  2. 输入您的仓库 URL(或将任何 GitHub URL 中的“github.com”替换为“gitingest.com”)
  3. 下载生成的文本摘要
  4. 请引用此文件,而不是复制粘贴文件。

不要将 10 个文件粘贴到提示符中,而是
这样做:“项目结构请参见附件 codebase_summary.txt”。

文档管理:请使用 Context7 MCP 或其他用于实时文档的替代方案。

Context7 MCP 通过显示文档的“最新页面”,使 AI 与最新文档保持同步。

何时使用:当您的文档经常更改时,请引用 MCP 连接,而不是每次都粘贴过时的代码片段。

5. 版本控制是你的安全网

版本控制

  • 提交时要细粒度控制,git add -p这样差异才易于阅读。
  • 切勿让未提交的更改堆积:保持 Git 状态清洁有助于隔离 AI 引入的错误并进行干净的回滚。
  • 使用有意义的提交信息:它们有助于人工智能理解变更上下文。

6. 保持提示信息高度聚焦

错误示例:“这是我的全部代码库。为什么身份验证不起作用?”

良好:“@src/auth.rs第 85 行在NoneJWT 格式错误时会引发 panic。请修复此问题并添加适当的错误处理。”

具体的问题需要具体的解决方案,模糊的问题只会滋生幻觉。

在提示中使用代码中的术语:引用代码库中的确切标识符,而不是通用的业务术语。例如,使用 `call`createOrder()processRefund()不是 `place order` 或 `issue refund`,或者使用UserEntity`account` 而不是 `account`。这种精确性有助于 AI 应用正确的抽象概念,并避免领域语言和代码之间的不匹配。

🚀试试 AI Shell

您的智能编码助手,可无缝集成到您的工作流程中。

登录 Forge →

7. 重大变更后重新索引

如果您使用 AI 工具进行项目索引,请在重大重构后重建索引。过时的索引会导致 AI “找不到”一些明明存在的函数。

大多数工具都会自动建立索引,但如果出现异常情况,则会强制刷新。

8. 使用文件引用,不要复制粘贴

大多数AI编辑器都支持类似这样的引用@src/database.rs。请使用它们,而不是粘贴代码块。

好处:

  • AI看到的是文件的当前状态,而不是过时的快照。
  • 更少的令牌使用量 = 更高的准确性
  • 减少提示杂乱

注意:语法因工具而异(Forge 使用@,有些使用#,等等)。

9. 让AI编写测试用例,但你来编写测试规范

告诉人工智能具体要测试什么:

For the new `validate_email` function, write tests for:
- Valid email formats (basic cases)
- Invalid formats (no @, multiple @, empty string)
- Edge cases (very long domains, unicode characters)
- Return value format (should be Result<(), ValidationError>)
Enter fullscreen mode Exit fullscreen mode

一旦指定了测试用例,人工智能就能很好地生成测试样板代码。

10. 使用诊断报告进行调试

遇到难题时,要求进行系统性的分解分析:

Generate a diagnostic report:
1. List all files modified in our last session
2. Explain the role of each file in the current feature
3. Identify why the current error is occurring
4. Propose 3 different debugging approaches
Enter fullscreen mode Exit fullscreen mode

这迫使人工智能进行系统性思考,而不是靠猜测和尝试。

11. 制定清晰的风格指南

风格

给你的AI一个简短的系统提示:

Code style rules:
- Use explicit error handling, no unwraps in production code
- Include docstrings for public functions
- Prefer composition over inheritance
- Keep functions under 50 lines
- Use `pretty_assertions` in test
- Be explicit about lifetimes in Rust
- Use `anyhow::Result` for error handling in services and repositories.
- Create domain errors using `thiserror`.
- Never implement `From` for converting domain errors, manually convert them
Enter fullscreen mode Exit fullscreen mode

规则一致才能保证代码质量稳定。

12. 像高级工程师一样审查所有内容

高级的

把每一次人工智能方面的改动都当作初级开发人员的公关稿来对待:

安全审查:

  • 检查注入漏洞
  • 验证输入有效性
  • 寻找硬编码的秘密

绩效考核:

  • 注意 N+1 查询
  • 检查算法复杂度
  • 查找不必要的分配

正确性审查:

  • 手动测试边界情况
  • 验证错误处理
  • 检查是否存在差一错误

人工智能很聪明,但并不睿智。你的经验至关重要。

哪些方法行不通(从我的错误中吸取教训)

我的错误

“神奇提示”谬误

没有完美的提示能让人工智能永不出错。更高效的工作流程胜过更完善的提示。

期待读心术

人工智能无法推断你未明确提出的需求。“使其达到生产就绪状态”如果没有具体细节,就毫无意义。

将人工智能应用于架构决策

人工智能擅长实现你的设计,但不太擅长高层系统设计。你负责架构,人工智能负责实现。

忽略领域特定上下文

除非你告诉它,否则人工智能不会知道你的业务逻辑、部署限制或团队惯例。

争议观点:人工智能结对编程优于人类结对编程

编程

适用于大多数实施任务。

人工智能不会疲倦,没有自负,不会争论代码风格,也不会评判你的搜索习惯。它就像一个拥有无限耐心和完美记忆力的初级开发人员。

但它也无法发现逻辑错误,无法理解业务背景,也不会对糟糕的想法提出质疑。处理棘手的问题仍然需要人。

最终现实检验

查看

AI编码工具可以显著提高生产力,但前提是必须系统地使用它们。那些效率大幅提升的工程师并非依靠神奇的提示,而是遵循严谨的工作流程。

先做好计划,测试所有内容,像生产系统依赖于它一样进行审查(因为它确实依赖于它),记住:人工智能是你的实习生,而不是你的架构师。

编程的未来不是人类与人工智能的对抗,而是人类与人工智能的结合与人类的分离。请谨​​慎选择你的阵营。

文章来源:https://dev.to/forgecode/12-lessons-from-ai-pair-programming-180-days-with-ai-zero-hype-2ijh