用可验证工作流降低 AI 代码生成幻觉:实战示例
为什么代码生成会出现幻觉
AI 编程助手的“幻觉”通常不是随机报错,而是模型在信息不足时补全了看似合理的内容,例如虚构不存在的 SDK 方法、误用旧版参数、猜测项目目录结构,或声称测试已经通过。降低这类问题的核心不是让模型“更聪明”,而是把它放进一个可读取、可执行、可验证的工程流程中。
实战目标:为 Express 接口增加分页
假设现有项目使用 Node.js、Express 和 PostgreSQL,需要为 GET /users 增加 page、pageSize 参数。不要直接要求“写分页接口”,这会迫使模型猜测数据库工具、字段和错误处理规范。先提供可验证的边界条件:
提示词示例:“先阅读 package.json、src/routes/users.js、src/db.js 和现有测试。不要修改文件。列出当前数据库访问库、users 表已使用的字段、路由导出方式,以及实现分页前必须确认的未知项。每项必须引用文件路径。”
第一轮只要求调查,不要求生成代码。检查回复中的路径、依赖名称和函数名是否确实存在;若模型引用了不存在的 prisma、typeorm 或字段,应立即停止后续修改并纠正上下文。
把任务拆成可验证的最小提交
确认项目使用 pg 后,再给出精确契约:page 默认 1,pageSize 默认 20,最大 100;返回 items、page、pageSize、total;SQL 必须参数化;非法参数返回 400。随后要求模型先输出修改计划和测试用例,而非直接提交实现。
提示词示例:“基于已确认的 pg 查询方式,先只修改或新增测试。覆盖默认分页、第二页、pageSize 上限、非数字参数和 SQL 注入式输入。不要声称测试通过;输出每个修改文件及运行命令。”
测试应先失败,再让模型实现路由。这样模型提出的接口结构会被真实断言约束,避免它编造“兼容现有客户端”的返回字段。实现阶段明确要求最小差异:只允许改 users 路由及对应测试,不得升级依赖或重构数据库层。
实现提示词示例:“执行测试命令并修复失败项。使用 LIMIT 和 OFFSET 参数占位符,不拼接用户输入。完成后粘贴实际命令、退出码和失败测试名称;没有执行权限时明确说明,不要推断结果。”
用工具输出替代模型自述
代码生成后的可信度来自编译器、测试和静态检查,而不是“已完成”的自然语言。至少执行 npm test、npm run lint 和 npm run build;对数据库查询额外检查 EXPLAIN 或集成测试中的查询参数。CI 可将这些命令设为合并门禁,并要求 AI 生成的变更同时更新测试。若错误信息出现,把原始错误、相关文件和期望行为一并回传,避免只说“修一下”。
- 要求模型区分“已从文件确认”“合理推测”和“需要你确认”。
- 要求引用真实文件路径、函数名和命令输出。
- 限制每轮修改文件数,减少无关重构带来的新幻觉。
- 对外部库 API 要求先查本地类型定义、锁文件版本或官方文档。
- 把密钥、生产数据和未脱敏日志排除在提示词之外。
低成本运行多轮验证
降低幻觉往往需要多轮:先扫描仓库,再写测试,再实现,再修复。这类工作适合按量付费的模型接入。59API 提供 Claude Opus、Sonnet、Haiku、Fable 及 GPT 模型的原生官方质量调用,可兼容 Claude Code、Codex 和任意 OpenAI SDK,基础地址为 https://api.59api.com。开发者可以按调查、实现、审查分别选择合适模型,避免每一步都使用高价模型;其低价中转与推荐返利也适合持续跑 CI 辅助任务。需要把上述流程接入现有工具链时,可注册 59API 后替换 API Base URL,再从小型测试任务开始验证。
शुरू करने के लिए तैयार?
कुछ ही मिनटों में Claude और GPT जोड़ें, सबसे कम कीमत पर। साइन अप करें और API key पाएं।
मुफ़्त साइन अप