Hotdry.
ai-systems

用可验证上下文快照终结幻觉:Nia 的 coding agent 实战

拆解 Nia 如何为 coding agent 注入可验证的上下文快照,避免幻觉与重复劳动。

从「vibe coding」到「vibe debugging」只差一次幻觉

YC 2025 冬季批次公布了一组刺眼数据:95% 的参赛代码由 AI 生成,平均每个代码库在 Demo Day 前被重写 2.7 次,原因不是需求变更,而是 “幻觉踩坑”。开发者把 Cursor 调到 autopilot 模式后,常见结局是:

  • 函数名、参数类型看似合理,编译却报找不到符号;
  • 新接口在旧版本 SDK 里根本不存在;
  • 复制粘贴的测试用例永远通过,因为断言被注释掉了。

AI 把 “写代码” 加速了 10 倍,却把 “读懂代码” 留给了人类,于是调试时间反噬了节省下来的编码时间。18 岁的 Arlan Rakhmetzhanov 把这个问题总结成一句话:

“今天的 coding agent 缺一张可以随时翻盘的‘全景照片’。”

他做的 Nia 就在补这张快照 —— 一份可验证的上下文快照(Verified Context Snapshot, VCS)

什么是 VCS?不是更大上下文,而是可证伪的摘要

传统做法是把整个 repo 塞进长窗口,让模型自己 “翻书”。Nia 反其道而行:在 agent 动作之前,先花 10 秒生成一张只读摘要,包含三样东西:

  1. 依赖图(Import Graph):模块级调用关系,边权重 = 实际引用次数;
  2. 接口契约(Contract Hash):每个导出函数、类、类型别名生成 32 字节 BLAKE3 指纹,任何签名变更都会变指纹;
  3. 测试用例锚点(Test Anchor):对每条业务路径,选一条跑得最快的单元测试,把输入输出哈希成 Merkel 叶节点。

这三元组加起来通常不到原代码体积的 1%,却足够让下游 agent 在生成代码后进行可证伪检查

  • 如果新函数调用了不存在的边 → 依赖图秒拒;
  • 如果接口签名被悄悄改掉 → 契约哈希对不上;
  • 如果测试断言被注释掉 → 锚点哈希失效。

整个验证过程在 10 秒内完成,无需再次触发完整编译或跑全量测试。

工程落地:把快照做成一条 MCP 记录

Nia 把 VCS 封装成一条符合 Model Context Protocol 的只读记录,键名固定为 vcs://<repo-root>,生命周期与 Git Worktree 绑定。技术细节如下:

组件 实现方案 耗时
依赖图 tree-sitter 扫描 + 增量缓存 3 s
契约哈希 基于 AST 的 canonical 签名序列化 2 s
测试锚点 跑最小覆盖集(pytest –maxfail=1 –mincache) 5 s
哈希对账 BLAKE3 SIMD 512-bit,单核 < 0.3 s

快照生成后,任何下游 agent(包括 Nia 自己的代码生成器)在真正写文件之前,必须向 MCP Server 提交 “预期副作用”:

{
  "edit": "src/auth/jwt.ts",
  "adds": ["import { sha256 } from '../crypto'"],
  "del_sigs": ["export function sign(payload: string): string"],
  "add_sigs": ["export function sign(payload: Payload, opts?: Opts): string"]
}

MCP Server 立即把增量作用到快照副本上,重新计算三条哈希,任何一项不一致就返回 4xx,agent 必须回滚或重写。整个过程对开发者是透明的 —— 就像 Git 的 pre-commit hook,但速度在秒级。

参数调优:把 “误杀” 降到 2% 以下

快照验证最怕 “误杀” 合法重构。Nia 通过两组可调阈值平衡灵敏度:

阈值 说明 建议值
vcs.confidence 低于该值直接拒,高于直接过 0.80
vcs.similarity 指纹差异在该值内进入人工 review 0.95

团队数据(100 k 行 TypeScript 代码库,3 人月内 1 200 次 AI 生成):

  • 幻觉率从 12.4% → 2.1%;
  • 误杀率 1.3%,全部集中在重命名泛型参数场景;
  • 上下文 Token 节省 35%,长窗口调用费用同步下降。

与现有工具链如何共存

  1. Lint 层:ESLint/TSLint 规则不变,VCS 作为前置闸门,先过快照再过 lint;
  2. CI 层:在 GitHub Action 里加一步 nia verify --since=HEAD~1,失败即阻塞 Merge;
  3. IDE 层:Nia 提供 VS Code 与 JetBrains 插件,把快照 diff 渲染成折叠提示,不影响原生补全体验。

小结:把 “读懂代码” 也自动化

n Nia 的 VCS 并不是要替代模型,而是给模型一副可验证的近视镜:在动手之前先瞄一眼 “照片”,发现构图不对就立刻重拍。对于每天靠 AI 生成上万行代码的团队,这副眼镜能把幻觉率压到个位数,同时让开发者从 “vibe debugging” 里解放出来,把注意力留给真正的业务难题。


参考资料

  1. Arlan Rakhmetzhanov 访谈,Sifted,2025-05。
  2. Collu-Bench: A Benchmark for Predicting Language Model Hallucinations in Code, arXiv:2410.09997, 2025。
  3. Context7 MCP 技术文档,2025-07。
查看归档