Claude Fable 5 将“尽快填充此缓冲区”视为网络攻击
一项基准测试发现,AI模型在被要求优化C++代码速度时,内存安全违规数量翻倍。Anthropic的Claude Fable 5甚至拒绝编写快速缓冲区填充函数,将其标记为网络攻击,但同一模型生成的代码却存在大量边界违规。
Anthropic 最新力推的模型 Claude Fable 5 被要求用 C++ 编写一个“尽可能快”的缓冲区填充函数时,竟然直接拒绝,并引用实时安全防护机制,将其归类为“网络攻击”。这一现象出现在一项针对前沿模型 C++ 代码安全性的基准测试中。测试发现,当提示中加入“尽可能快”这一要求时,所有被测模型的内存安全违规数量平均翻倍,而 Fable 5 的表现尤为极端:它既是最谨慎的(拒绝编写快速填充函数),也是最危险的(生成的代码内存安全违规最多)。
测试基于 C++ 标准委员会的担忧——当前 AI 模型倾向于生成不符合安全配置文件的代码。委员会在 P4023R0 和 P5000R1 等文件中强调,模型训练数据包含大量老旧或不安全的 C++ 模式,导致生成的代码违反现代安全规范。为验证这一说法,测试者选取了四个旗舰模型(Claude Opus 4.8、GPT-5、Gemini 3.1 Pro 和 Claude Fable 5),在两种提示(中性要求和速度要求)下完成五项高频交易风格的编程任务,如解码数据包、计算加权平均价格等。
结果如下:在中性提示下,模型编写的代码相对安全;但加入速度要求后,所有模型的安全违规数量显著上升。仅“内存安全/边界”类别的违规(如指针算术)就从每样本 3.9 次跃升至 7.9 次,翻了一倍。有趣的是,现代 C++ 特性(如 std::span)的使用率并未下降,说明模型并非不知道安全写法,而是在速度压力下主动放弃安全抽象,回归到训练数据中常见的“快速但危险”的模式。这也是委员会担忧的核心:模型输出需要更严格的门控。
Claude Fable 5 的拒绝行为揭示了安全过滤器与代码生成器之间的脱节。它一方面对“快速填充缓冲区”过度敏感,另一方面却生成大量不安全的代码。测试者指出,真正的解决方案不是简单扩充训练数据中的安全示例,而是在提示工程或输出端施加更严格的边界安全配置文件(如即将到来的 C++29 Profile)。此外,测试还使用 cppcheck 和 GCC 分析器进行了验证,发现实际未定义行为并未显著增加,说明主要问题集中在安全指南层面,而非功能性错误。
这项测试表明,AI 生成的 C++ 代码在追求性能时会系统性地降低内存安全性。对于依赖 AI 辅助编程的开发者而言,这意味着需要额外的代码审查和安全验证,尤其是在高性能场景中。