
周四晚上十一点,我盯着终端日志发呆。AI 告诉我它改完了——一个跨模块的接口重构,涉及六个文件。我检查了第三个文件,逻辑没问题。等我把整个项目跑起来,那个 ImportError 才浮现:它改了一个被四处引用的导出名,但漏掉了其中一处的调用方。AI 的确执行了「改代码」这个动作,但它不知道自己有没有真的改对。那一刻我意识到最危险的 bug 不是写不出来的 bug,是 AI 写出来了、你信任了、但它写错了。
这种处境在 2025 年下半年越来越频繁。AI 写代码的能力到了足够骗过你的程度——它产的代码语法正确,结构合理,甚至风格统一。但你没法在它每改一次文件之后就去跑一遍整个测试套件,时间不允许,注意力更不允许。于是你只能赌。Hermes Agent v0.14.0(2026 年 4 月发布的版本)做了几件事,让我觉得这个方向的赌注终于有了点保障。
01 | LSP 语义诊断:写完文件立刻知道出了什么错
先说说之前的情况。很多号称「代码审查」的 AI 工具,做的是字符串匹配级别的事:检查缩进对不对、括号有没有闭合、变量名是不是 camelCase。这跟你在 VS Code 里装个最便宜的 linter 差不多——能发现 import 拼写错,但发现不了你把一个函数签名改了之后,另一个文件里的调用还拿着老参数。
Hermes 0.14 的做法不一样。它直接调了真实的语言服务器协议诊断。细节是:当 write_file 和 patch 工具把内容写进磁盘之后,Agent 不是自己拿正则去扫,而是启动了对应语言的真实 Language Server——比如 pyright 处理 Python、typescript-language-server 处理 TypeScript——让它对刚刚写完的文件做一次完整的语义分析。并且它只暴露新增的错误,已经存在的历史错误被过滤掉了,只看这次改动引入了什么新问题。
换句话说,它把「AI 写完 -> 人发现错了 -> 再修一轮」这个循环,缩短到了毫秒级。错误在传播到下游文件、污染测试结果、浪费你十分钟排查之前就被截住了。我试过一次让它在重构全局状态管理器时故意写一个类型不匹配——它写完后立刻弹出了新诊断,指向另一个文件中某一行还在用旧签名。这要是等人来发现,至少得十分钟。
02 | 文件变更校验器:每轮结束知道 AI 动了哪些文件
LSP 诊断解决的是「改对了没有」的问题。但还有一个更隐蔽的问题:「改了没有」。
听起来荒谬,但在我用 AI 编程助手的一百多个小时里,至少遇到过七八次这样的情况:AI 在对话里说「已修改 config.py」,但磁盘上那个文件纹丝不动。还有另一种情况:AI 没有告诉我它改了某个文件,但它悄悄覆写了——你以为是手写的逻辑,其实是它不知道什么时候覆盖的。
Hermes 0.14 的 per-turn 文件变更校验器解决的就是这种信任问题。每轮对话结束之后,Agent 会在响应尾部收到一个自动生成的变更摘要 footer——精确记录了这一轮中实际写入磁盘的每一个文件、操作类型、变更路径。不是 AI 说自己做了什么,而是系统实际观察到了什么。
这个 footer 对 Agent 本身也是约束。如果它声称改了文件但 footer 里没有,或者它没说自己改了但 footer 里有——两种不一致都会被捕捉。相当于给每一轮对话加了一个独立审计日志,AI 想对工作量撒谎都做不到。
03 | vision_analyze 升级:从文字描述到真正看图
0.14 还改了一个我一直觉得挺憋屈的功能:视觉分析。
之前的 vision_analyze,如果你的模型不支持图片输入,它会自动降级成文字描述——用一种内置的图片描述器把截图转成一段话,然后再把这段话喂给模型。等于你在看一张产品原型图的第三版注释,而不是原型图本身。
举个例子:有一次我让 AI 参考一张 UI 截图调整页面布局。截图里一个按钮的圆角是 12px,阴影偏移是 2px 向下、4px 模糊。文字描述版本变成了「按钮有圆角和轻微阴影」。模型据此改出的圆角是 8px,阴影是 3px——看着像,但不对。
0.14 的处理方式是:当激活的模型本身具备视觉能力时(比如 gpt-4o 或 Claude 3.5 Sonnet),直接传像素。不再做任何中间描述步骤,图片原样进模型。那个按钮的 12px 圆角和 2px/4px 阴影,模型自己看到了。差别就像「别人转述」和「自己亲眼看到」之间的距离。
04 | /handoff:会话不用从头来
最后一个变化跟模型有关,但解决的是一类更实际的场景。
假设你正在跟一个速度快的轻量模型聊代码——它反应快,token 成本低,适合前期的思路碰撞。但聊到一半,你发现需要模型做一个精确的视觉判断,这时候你希望换成带视觉能力的模型。
以前的做法:换聊天窗口,复制粘贴历史上下文,重新说明需求。对话的连续性断了,模型对前情的理解打折扣,你得不停重复自己。
Hermes 0.14 的/handoff命令允许你在同一个会话中途把活跃 session 切换到不同的模型、人格或 profile。消息历史、工具调用历史、上下文——全部保留。切换之后,新模型读取的是完整的延续上下文,不是一份被截断的摘要。
我试过在同一个 session 里先让一个偏 Codex 的 profile 写 Python 脚本骨架,再把 session handoff 给一个带视觉模型的 profile 去读截图参数——脚本骨架在对话历史里,视觉分析的上下文也在。不需要解释「我刚才做了什么」。它知道。
今年年初我在一篇笔记里写过一句话:AI 写代码最大的问题从来不是它能写多复杂的东西,而是你没办法在它写完之后,像对一个人那样说「你再检查一遍」。现在这个方向终于有了些实质性的东西——不是让 AI 更会写,而是让 AI 写完之后,有了一张完整的质检单。
LSP 诊断是语法级和语义级的逐行复查,文件变更校验器是每轮操作的审计日志,vision_analyze 升级是让你不再依赖二手信息,/handoff 是让你不被绑定在一个对话起点上。这些加在一起,回答的不再是「AI 能不能写代码」,而是「AI 写了代码之后,我怎么知道它写得好不好」。
版本号 0.14,还没到 1.0。但这个方向是对的。