我是如何让 AI 在我们拥有 3 年历史的金融科技代码库中停止“幻觉”的

AI 编程工具在真实的生产项目中往往会失效。它们在处理新代码时表现良好,但在面对带有历史背景的老旧代码库时就会溃不成军。

在我们的金融科技项目中,我通过惨痛的教训学到了这一点。我们有两个 React 前端、一个管理面板和一个 FastAPI 后端。我们的数据库非常复杂,存储着敏感的财务和用户数据。

我们曾尝试利用 AI 来提高开发速度,但结果立刻就失败了。

我让 AI 创建一个联系人表(contacts table),它竟然为姓名和电子邮件创建了新列。而这些列在我们的用户表(users table)中早已存在。AI 选择了重复数据,而不是使用外键。它完全不知道我们用户表的存在。

我不再纠结于如何让 AI 写出更好的代码,而是开始思考:为了做出正确的决策,AI 需要了解哪些信息?

AI 的表现完全取决于你提供给它的上下文(context)。我们将上下文变得明确且具有权威性。以下是我们构建的系统:

ADR 文件:我们创建了一个 docs/adrs/ 文件夹。这些文件记录了我们做出架构决策的原因。其中一个文件 (ADR-001) 会告诉 AI:“先检查现有表。使用外键。绝不要重复用户数据。”

context.md:该文件解释了我们的特定术语。它告诉 AI 在我们的系统中,不同的概念是如何相互关联的。

plot.md:这是一个高层级的地图。它展示了项目中各个不同部分是如何连接的。

严格规则:我们告诉 AI,docs 目录是最终的权威。它必须按顺序遵守这些规则。

强制测试:每一个新的 API 路由都必须包含测试用例。

这个系统让 AI 的行为变得可预测。

有一次,AI 修改了一个共享函数,导致应用的另外八个部分崩溃。但因为我们有测试,AI 发现了这些失败。它通过创建一个能够同时处理新旧需求的新版本函数,自行修复了错误。如果没有测试,这个 Bug 就会直接进入生产环境。

不要因为 AI 不了解你的代码库而责怪它。把它当作一名新员工对待。你不会因为一名新员工不了解你的规章制度而责怪他,你会为他提供文档和入职培训。

我们的结构如下:

docs/

  • context.md (术语与关联)
  • plot.md (高层级地图)
  • adr/ (特定规则,如建表或 API 结构)

给您工作流的三个建议:

  • 在 ADR 中保持具体。使用明确的指令,而不是模糊的建议。
  • 让文档具有权威性。告诉 AI 这些规则具有最高优先级。
  • 将错误转化为规则。每当 AI 出错时,就创建一个新的 ADR 来防止再次发生。

这并不能让 AI 变得完美,但它能让 AI 变得稳定。

Source: https://dev.to/jaskiratanand/how-i-made-ai-stop-hallucinating-on-our-3-year-old-fintech-codebase-3g0h

Optional learning community: https://t.me/GyaanSetuAi