研究团队收集了55+真实文档化的AI代理失败案例,分为汇编幻觉、伪并行、Rust API漂移等六类,提供124个验证过的工程技能来机械拦截。
声明:本文由 AI 辅助起草,其中的每一个技术论断均已在关联仓库(registry/claims.yaml,177 个主要来源)中完成溯源。以下失败类别均来自真实且有文档记录的事件——而非主观感受。
AI 编程 Agent 擅长样板代码,在底层代码上却可靠度堪忧——而且这些失败并非随机。它们呈现出可预测的类别分布,有着鲜明的特征:代码看起来正确、能编译通过,却仍然做了错误的事。
我们经过三轮研究,收集了 55+ 个有文档记录的失败案例(均已溯源,非道听途说),并将它们转化为 124 项经过验证的工程技能。以下是我们的发现。
TL;DR — 五大失败类别
Assembly hallucinations(汇编幻觉)——凭空编造助记符、操作数顺序颠倒、立即数被静默截断。
Fake parallelism(伪并行)——看起来线程安全的代码实际上只在单线程上运行。
Rust API drift & crate hallucination(Rust API 漂移与 crate 幻觉)——行为层面的 API 变更,以及与真实 crate 相似的虚假 crate。
Misleading verification(误导性验证)——从未真正测试目标对象的"通过"测试。
Systems-level blind spots(系统级盲区)——堆工具无法察觉的 VM 泄漏、时序侧信道。
修复方案不是"更小心一点"。而是机械化的门控:汇编 → 反汇编 → 比较字节;测量真实并行度;检查 API 是否真的存在;让测试具备失败能力。
Agent 会凭空生成不存在的指令。一个为"看起来像汇编"的程序生成了 CDC COMPASS 伪操作(JOB、SST、OCT)。另一个则生成了 movqad——根本没有这条指令。
危险的失败不会报错——它们会静默地破坏结果:
; What the agent wrote ; What actually assembled
imul eax, eax, 38 ; 69 c0 00 00 00 00 (the 38 is DROPPED)
mov (%rax), %eax ; 8b 00 (fine — but one byte vs. eax?)
imul eax, eax, 38 汇编结果为 69 c0 00 00 00 00——立即数被解析器静默丢弃了。这正是 BBoeOS PR#584 背后的 bug 类别。再加上 AT&T/Intel 操作数反转、缺失的 size 提示(inc [counter] vs inc qword [counter]),以及"AX 是 8 位"的错误认知,你就拥有了一个可靠的失败生成器。
gcc -c sample.s && objdump -d sample.o # AT&T
gcc -c -masm=intel sample.s && objdump -d -M intel sample.o # Intel
如果反汇编结果与你写的不一致——相同的助记符、相同的操作数、相同的大小——那你就不是写那条指令的人。校准数据:LLM 反汇编的完全匹配准确率约 14%;反编译器"修复"的正确率约 37%。
模型会生成看起来线程安全的 ConcurrentHashMap/原子操作,但实际都在单线程上执行。CONCUR 基准测试(arXiv:2603.03683)能捕获线性基准测试无法发现的死锁和竞争——因为代码实际上并非并发。
我们的门控是机械化的,而非语法层面的:
统计活跃线程数并测量墙钟时间扩展性。线程安全的语法不等于并行。
RustEvo²(arXiv:2503.16922)是最清晰的数据集:模型对稳定化 API 的准确率为 65.8%,但对行为变更(相同签名、不同语义)只有 38%。对于训练截止后新增的 API,性能从 56.1% 暴跌至 32.5%。RAG 有帮助(+13.5%)——但你无法 RAG 还不存在的东西。
供应链层面更糟:Agent 会幻觉出不存在的 crate,但与真实的 crate 高度相似——这就是 typosquatting 风险(serde-json vs serde_json)。研究报告称,商业场景下包幻觉率为 5.2%,开源场景下达 21.7%。
cargo info serde-json # exit 101 — does not exist
cargo info serde_json # the real crate
门控:验证存在性(cargo search/crates.io API)、固定工具链,并将行为变更视为最危险的类别。在加密领域 specifically,生成的 Rust 代码只有 23.3% 能编译,且其中 57% 存在漏洞——nonce 重用是首要原因(arXiv:2604.27001)。
最危险的一类:测试"通过"了但从未测试目标。
固定形状的 allclose oracle 将有 bug 的 GPU kernel 认证为正确——fuzz + fp64 参考实现能捕获 9/9(arXiv:2606.20128)。
Kernels"通过审查,然后在负载下 segfault"(arXiv:2602.19594)。
Ghostty 的 37–130 GB VM 泄漏:page pool 重用了一块 mmap 但从未调用 munmap——Agent 是触发因素,而非根本原因(mitchellh.com/writing/ghostty-memory-leak-fix)。
铁律:一个无法失败的测试 harness 不是证据。消融测试是:破坏目标——你的测试能捕获吗?如果它仍然通过,那你的测试就是装饰品。
Timing side channels:early-exit 字符串比较会泄漏匹配的前缀(CWE-1254;约 40% 的 Copilot 加密代码存在此问题)。在我们的主机上测量:gcc -O2,500k × 256 字节比较——early-exit memcmp 0.054 秒 vs 常数时间比较约 0 秒。
UB 假设:"在 -O0 下工作,在 -O2 下崩溃"——崩溃点是症状;损坏者则在别处。
每项技能都是一个紧凑的 SKILL.md,在写一行代码之前回答五个问题:
经验证,而非断言:124 项技能中有 65 项通过在真实工具链(GCC 16.1、rustc 1.97、GDB、objdump、CMake/Ninja)上实际运行示例进行了验证。其余 59 项诚实地标记为已研究,并附上可验证它的确切命令。
git clone https://github.com/TrothByte/low-level-skills-trothbyte
python tools/validate.py # 124 skills + registry + 177 sources, all gate in seconds
也可以通过 npx skills add TrothByte/low-level-skills-trothbyte 安装,或作为 Claude Code 插件市场扩展安装。
Agent 没有坏——坏的是我们的期望。"能编译"从来就不是底层代码的标准。标准是:汇编 → 反汇编 → 比较字节;测量真实并行度;检查 API 是否存在;让测试具备失败能力。55+ 个已编目的失败案例转化为 124 项技能,它们精确编码了这些门控。
如果你在使用 AI 编写、审查或调试 C、C++、Rust、汇编、kernel 或固件——你会认出这些失败。这个库是免费的,采用 MIT 许可:github.com/TrothByte/low-level-skills-trothbyte。
带有完整溯源的调查报告在仓库的 research/ 文件夹中。发现了我们尚未编目的失败案例?提交 issue——新技能必须溯源,并与现有的 124 项技能形成差异化。