Anthropic 工程博客 · 中文学习笔记Anthropic 工程笔记

    设计能抵御 AI 的技术笔试

    Designing AI-resistant technical evaluations

    #15 · 模块 E 评测 原文发布:2026-01-21 阅读约 10 分钟 原文链接 ↗
    本页目录(16)
    1. 一句话总结
    2. 为什么重要
    3. 核心概念(中英对照)
    4. 方法 / 步骤
    5. 1. 原版笔试的设计(2023 年底)
    6. 2. 三次被模型击败与重设计
    7. 3. 考虑过的选项
    8. 4. 尝试一:换一道更难的优化题(失败)
    9. 5. 尝试二:走得更“怪”(成功)
    10. 6. 开放挑战
    11. 图解
    12. 图 1:笔试与模型能力的“军备竞赛”时间线
    13. 图 2:什么样的题目对 AI 更有抵抗力
    14. 关键原话
    15. 实践建议
    16. 延伸阅读

    ℹ️ 注:原文 URL 中的 slug 带大写字母(AI-resistant-technical-evaluations),本站按规范统一为小写。

    一句话总结#

    当模型在限定时间内的表现追上最优秀的候选人时,“允许使用 AI”的笔试必须换一种思路:考人类在陌生问题上的推理能力,而不是模型见过大量训练数据的常规难题。

    为什么重要#

    • 把“评测”思维迁移到“评估人”:评测饱和、模型绕过评测这些问题,在招聘场景中同样存在。
    • 对“抗 AI”的一个深刻观察:难不等于抗 AI;模型的优势来自庞大的经验库,所以需要的是“分布外”的问题。
    • 呈现了一条随模型代际演进的真实时间线,可以感受到能力增长的速度。
    • 也是一个很好的笔试 / 面试设计案例(高信号、无需特定领域知识、有趣)。

    核心概念(中英对照)#

    中文English简要解释(笔者概括)
    家庭作业式笔试take-home test候选人在自己的环境中限时完成的题目。
    抗 AIAI-resistant在允许使用 AI 的前提下仍能区分候选人能力。
    信号signal测试结果能区分不同能力水平的程度。
    模拟加速器simulated accelerator作者用 Python 写的、类似 TPU 的虚拟机器。
    草稿存储器scratchpad memory需要手动管理的片上内存。
    超长指令字VLIW每个周期多个执行单元并行,需要高效打包指令。
    单指令多数据SIMD一条指令处理多个元素的向量运算。
    存储体冲突bank conflict多个访问落到同一存储体导致的性能问题。
    测试时计算test-time compute推理阶段投入更多计算(更长时间、更多思考)以提升结果。
    分布外out of distribution与训练数据差别很大的问题。
    时钟周期数cycle count笔试的评分指标,越少越好。

    方法 / 步骤#

    1. 原版笔试的设计(2023 年底)#

    背景:为 Claude 3 Opus 的训练与发布扩充性能工程师,候选人多到常规面试流程处理不过来。作者花了两周设计一份笔试。

    形式上的优势:

    • 更长的时间窗(最初 4 小时,后来改为 2 小时),更接近真实工作节奏;
    • 真实环境:没人盯着,使用自己的编辑器;
    • 有时间理解现有系统、编写调试工具;
    • 明确允许使用 AI:问题够长,AI 难以完整解决,候选人仍要展示自己的能力。

    通用设计原则:贴近真实工作;高信号(不依赖单一灵感,给候选人多次展示的机会,分数分布宽,深度足够,强者也做不完);不需要特定领域知识;有趣(快速的开发反馈、有深度、有创造空间)。

    题目:在一个类 TPU 的 Python 模拟器上优化代码,配有可热重载的指令追踪视图。机器特性包括手动管理的草稿存储器、VLIW、SIMD、多核。任务是并行树遍历(刻意不带深度学习色彩),从完全串行的实现出发,逐步利用并行性;原版还埋了一个需要先调试的 bug。

    效果:一年半里约 1,000 名候选人完成,帮助招到了团队大部分成员;尤其适合简历经历有限的人(几位表现最好的工程师本科毕业就直接加入)。很多人因为觉得有趣而超时做下去。

    2. 三次被模型击败与重设计#

    阶段发生了什么应对
    Claude 3.7 Sonnet(2025-05 前)已有超过一半候选人还不如把题完全交给 Claude Code—
    Claude Opus 4(预发布版)4 小时内的结果优于几乎所有人类版本 2:用 Opus 4 找出它开始吃力的位置作为新起点;重写更干净的初始代码;增加机器特性以加深深度;去掉模型已经解决、只会拖慢反馈的多核部分;时限缩短到 2 小时(4 小时的排期开销导致流程拖延数周);更强调巧妙的优化洞察,而不是调试和代码量
    Claude Opus 4.5(预发布版)不到 1 小时达到及格线;之后以为遇到内存带宽瓶颈而停下(大多数人也会这么想);被告知可达到的周期数后找到利用题目结构的技巧;2 小时时追平该时限内的人类最好成绩,并且在测试时计算 harness 中可以继续提升需要全新的题目

    3. 考虑过的选项#

    • 禁止 AI:作者不愿意这么做——除了难以执行,他认为人在有 AI 的环境中仍应有办法脱颖而出,就像真实工作那样。
    • 把标准提高到“大幅超过 Claude Code 单独做的结果”:担心人类读题就要花一半时间,而 Claude 很快,人只能跟在后面理解它做了什么,最优策略可能变成旁观。
    • 现在的真实工作更多是棘手的调试、系统设计、性能分析、验证正确性、让 Claude 的代码更简洁——这些都很难在短时间内客观测试。

    4. 尝试一:换一道更难的优化题(失败)#

    选了作者在工作中做过的一个棘手内核优化(在二维寄存器上高效转置数据、避免存储体冲突),简化后由 Claude 在一天内实现进模拟器。Opus 4.5 想出了作者都没想到的思路:不转置数据,而是转置整个计算。作者修补题目排除这条路后,模型起初找不到最优解,但用更长的思考预算再试一次——解出来了,还知道修复存储体冲突的技巧。

    教训:这类问题在很多平台上都有工程师反复钻研过,训练数据很多;作者是从第一性原理得出解法的,但模型可以调用更大的经验库。

    5. 尝试二:走得更“怪”(成功)#

    • 需要足够分布外的问题,这与“像真实工作”的目标冲突。
    • 灵感来自 Zachtronics 系列编程解谜游戏:指令集极小、限制极严,迫使人用非常规方式编程。
    • 新笔试是一组谜题:使用一个很小、限制很多的指令集,以最少指令数为优化目标。作者做了一道中等难度题测试 Opus 4.5——失败;补齐更多谜题,并请同事确认不如作者熟悉问题的人也能超过 Claude。
    • 刻意不提供可视化或调试工具,只检查解法是否有效。要不要投入、怎样投入工具(写精心设计的打印语句,或者让编码模型几分钟生成一个交互式调试器)本身就是考察内容。
    • 早期结果:由更多相互独立的子问题组成,方差可能更低;分数与候选人过往工作水平相关性良好。

    6. 开放挑战#

    原版笔试已在 GitHub 公开,不限时间。原文称:时间足够长时,人类专家仍领先当前模型,人类提交过的最快解法明显优于 Claude 即使投入大量测试时计算后的结果。原文给出的参考周期数(越低越好)摘录:Opus 4 在 harness 中跑数小时为 2164;Opus 4.5 在普通 Claude Code 会话中为 1790(约等于人类 2 小时内的最好成绩);Opus 4.5 在 harness 中 2 小时为 1579、11.5 小时为 1487;在改进后的 harness 中跑数小时为 1363。

    图解#

    图 1:笔试与模型能力的“军备竞赛”时间线#

    timeline
        title 性能工程笔试的演进(据原文)
        2023-11 : 设计原版:模拟加速器、4 小时、允许 AI
        约 1.5 年 : 约 1,000 名候选人完成,招到团队大部分成员
        2025-05 前后 : Claude 3.7 Sonnet 已超过半数候选人
                     : Opus 4 在 4 小时内优于几乎所有人
                     : 版本 2:新起点、更深、去多核、2 小时
        Opus 4.5 预发布 : 2 小时追平人类最好成绩
                        : 尝试一(转置题)被更长思考解出
                        : 尝试二:受限指令集谜题,模型失败

    图 2:什么样的题目对 AI 更有抵抗力#

    flowchart TD
        Q[候选题目] --> A{在时限内模型能否追平顶尖人类?}
        A -- 否 --> OK[仍有信号,继续用]
        A -- 是 --> B{能否把起点移到模型开始吃力的地方?}
        B -- 能 --> V2[重设计起点与时限]
        B -- 不能 --> C{题目在训练数据中常见吗?<br/>(如转置、存储体冲突)}
        C -- 常见 --> D[难度再高也会被经验库解出]
        C -- 少见 / 分布外 --> E[受限、陌生的规则<br/>人类推理更有优势]
        E --> F[同时考察工具投入的判断]

    图解:先看模型能否在时限内追平顶尖人类,再看能否把起点后移,最后看题型在训练数据中是否常见;少见、受限、规则陌生的题目更依赖人的推理。

    关键原话#

    “The original worked because it resembled real work. The replacement works because it simulates novel work.” —— 原版有效,是因为它像真实工作;替代版有效,是因为它模拟了全新的工作。

    实践建议#

    • 每次有新模型发布,就用它把自己的笔试 / 面试题完整做一遍。
    • 题目要有足够深度和宽的分数分布,避免“一个灵感定胜负”。
    • 想让题目抗 AI,先问“这类问题在网上有多少现成讨论”,常见的优化 / 算法套路很难抗住。
    • 考虑使用规则全新、自洽的小型环境(受限指令集、自定义规则),考察从零推理的能力。
    • 把“是否以及如何构建调试工具”纳入考察,而不是把工具都准备好。
    • 新题上线前,请不熟悉题目的同事试做,确认人类在时限内可以超过模型。
    • 笔者补充:保留历届题目在新模型上的表现记录,它本身就是一份很直观的能力演进曲线。

    延伸阅读#

    站内笔记

    原文引用的资源


    本笔记依据 2026-10-17 抓取的在线原文撰写。原文:Anthropic,《Designing AI-resistant technical evaluations》。

    进度只保存在本机浏览器,在学习路线中查看
    本页目录