CPU-ARC:面向CPU端推理复用的智能体推理缓存 CPU-ARC: Agentic Reasoning Caching for on-CPU Reasoning Reuse
将LLM推理编译为CPU可执行的语义函数缓存,调用成本降16-291倍,性能与源模型相当
前置知识
系统级缓存(SLC)
在服务系统整体层面而非单个推理实例内缓存 LLM 会话成果的方法总称。缓存条目被所有推理实例共享,可超越产生它的实例被反复复用,可带来成本与延迟下降、正确性提升(异步人工或评审代理审查)以及可解释性收益。
本文提出的智能体推理缓存(ARC)就是一种混合型 SLC,全文的收益主张、四大设计考量(局部鲁棒性、命中正确性、可解释性、成本)与评估维度都建立在 SLC 框架之上。
等式推理(equirational)
论文定义的问题等价关系:若两个问题实例可以用同一套推理过程解决,则称它们互为等式推理。措辞改写(equiparametric)与参数替换(equiphrasal)后的变体通常与原题等式推理,对应参数向量集合 $\Pi$。
ARC 的缓存覆盖域正是等式推理类 $\{q(\pi): \pi \in \Pi\}$,理解这个概念才能理解缓存为何对改写和换参数鲁棒,以及扰动评估为何按这三种模式设计。
语义函数(semantic function)
ARC 的基本构件:一个 Python 可调用对象 $f:\mathrm{Context} \mapsto \mathrm{dict[str, Any]}$,其输入、输出与被调函数全部用自然语言描述加示例来引用,而非固定变量名或函数名,通过 load/do/narrate/lm/extract 等原语交互。
它是缓存条目的物质载体。读懂 Figure 2 与 Figure 5 的代码示例、理解语义发现(调用方只需描述意图即可找到被调函数)机制,都以掌握这个概念为前提。
向量相似度检索
把文本嵌入为高维向量后按余弦相似度查找最相关条目的技术。本文用约 300M 参数的 Embedding Gemma 生成 768 维向量,以 FAISS 平面索引在 CPU 上完成 do()/load() 的语义分发与入口点匹配(IS1)。
缓存命中判断、函数发现与参数读取全部依赖它,是调用期唯一的检索组件;2.2.3 节的编译优化正是为了在缓存成熟后彻底消除这些动态检索开销。
单体缓存与模块化缓存
SLC 两大流派。单体缓存存整段对话及其生成状态(KV 缓存、Mamba 隐状态),构建便宜、可审查保正确,但对措辞扰动脆弱且内存带宽昂贵;模块化缓存先把上下文分解或蒸馏成逻辑步骤再复用,抗参数扰动但命中后仍需完整重新生成且无法审查保正确。
ARC 自称两者的混合体:既做模块化式的分解,又像单体缓存一样把组合固化为单个可审查的程序。对比理解这两类方法的优劣才能看清 ARC 的定位与权衡。
评审模型(LM judge)
被指派验证中间与最终输出正确性、忠实性的语言模型。本文在构建与评估各环节使用由 2 个 Claude Opus 4.5 实例组成的评审委员会,并要求委员会全体一致通过才接受候选函数或扰动样本。
构建期候选函数的转录对照测试、扰动样本的生成验证(PT2)与结果评估(PT3)都由评审委员会把关,它直接决定了论文报告的正确性与鲁棒性数字的可信度。
研究动机
大语言模型把"求解问题"与"执行解法"混在同一个生成过程中,无论问题多么常见都要从头推理一遍。论文以 MATH-500 中的"196 有多少个正整数因子"为例(Table 1):把题目改写措辞(rephrased)或把数值参数换成 144(reparameterized)之后,模型生成的推理步骤竟然一个字都不变,说明大量算力被浪费在对同一类问题的重复推理上。AI 智能体与 AI 应用软件中,同一套指令模板搭配不同载荷被反复提交的情形更为普遍,每个新查询都触发一次完整的从头推理。现有系统级缓存方法各有硬伤:单体缓存(前缀缓存、程序化会话缓存、语义查询匹配)存储整段对话及其生成状态,对最轻微的措辞扰动都不鲁棒,即便借助语义相似度匹配提升覆盖也会牺牲正确性,且维护和使用在内存与带宽上昂贵;模块化缓存先把上下文机械分解或蒸馏成关键逻辑步骤再回供给语言模型,虽对参数化扰动更鲁棒,但即使完美命中仍需一次完整(尽管加速了的)重新生成,且无法通过事后审查保证正确性。
本文的目标是本文的目标是构建一种新型系统级缓存,同时满足此前方法无法兼顾的四个性质:覆盖鲁棒——对措辞改写与参数替换都稳定命中;命中即可保正确——每个缓存条目可以异步地由人或评审模型审查并修正;完全可解释——每个条目都是可读的代码加叙述轨迹;构建、维护与调用都便宜。具体设想是:一旦源模型对某个问题完成推理,就把其解法编译成一个可在 CPU 上执行的智能体推理缓存(ARC),此后属于同一问题类的新实例只需一个小语言模型加确定性代码即可求解。论文的量化目标是调用成本比源模型低 16-291 倍,构建成本仅为一次性支出 12-84 倍单次推理成本,且缓存准确率能与前沿源模型在困难基准上打平甚至反超。
与已有工作不同的是,作者的独特切入是把缓存的单位从"数据"换成"逻辑"。单体缓存缓存转录或 KV 状态,本质是数据复用,因此改一个词就失效;模块化缓存缓存分解片段再喂给语言模型,本质上仍依赖生成过程。ARC 则混合两者:把一次推理转录分解成网络化的语义函数(模块化式分解),同时把它们的组合固化为单个可执行程序(单体式整体复用)。更关键的创新在于引用方式:程序不依赖固定的变量名、参数名和函数名,而是以自然语言描述加示例来引用一切输入、输出与被调组件,从而实现"语义发现"——调用方只需描述意图就能找到被调函数。这使得任何已缓存组件都能在语义等价的场景中被宽松复用,无论新实例如何措辞、如何结构化、如何参数化;依赖函数被泛化后,其所有历史调用方也无需任何更新。
核心方法
方法建立在两个观察与两个假设之上。观察 O1:解的搜索与解的执行可以解耦,找到解之后,执行背后的计算只需极少语言模型参与;观察 O2:针对单个问题实例的推理可复用于超出该单例的一整类问题。形式化地设 $\mathcal{S}$ 为源模型、$\mathcal{B}$ 为构建器、$\mathcal{T}$ 为目标小模型,假设 A1:对每个可解问题 $q(o)$ 存在配有小语言模型的程序 $p(\bullet_1,\dots,\bullet_n)$,使 $p(\pi)=\mathcal{A}(q(\pi))$ 对所有等式推理变体 $\pi\in\Pi$ 成立;假设 A2:$\mathcal{B}$ 仅凭 $q(o)$ 和 $\mathcal{S}(q(o))$ 就能构造出 $p$。实现上,构建器(Claude Opus 4.5,extended thinking 4096 token 预算)分析源转录并生成语义函数网络,连同入口点注册进向量索引注册表;推理时只用目标模型(微调后的 Llama 3.2 1B)与 CPU 上的 Embedding Gemma(约 300M 参数、768 维向量)加 FAISS 平面索引。源模型与构建器仅在构建期需要,这种不对称性是 ARC 在规模上经济性的根源。
核心创新是"语义函数":一个 Python 可调用对象 $f:\mathrm{Context}\mapsto\mathrm{dict[str,\ Any]}$,其输入、输出与被调函数全部用自然语言描述加示例引用,而非固定标识符。八个运行原语承担全部数据流:load(ctx, query) 用向量相似度从分层内存栈自顶向下取值(可带 d_type 强转);do(ctx, query, payloads) 按祈使式意图描述语义发现并调用其他语义函数,压入预填载荷的隔离内存层实现作用域隔离;narrate 记录人类可读的推理步骤;lm 调 $\mathcal{T}$ 执行分类、摘要等原子 NLP 任务;extract 做逐字值抽取;convert/smart_convert 做多级类型强转——程序转换失败时让 $\mathcal{T}$ 改写成 Python 字面量再经 ast.literal_eval() 校验;invoke_tool 接入终端、搜索等外部工具。调用方无需知道被调者名字,被调者也无需知道输入名字,这使任何已缓存组件都能在语义等价场景中宽松复用;Context 是内存层栈,每次 do() 压栈弹栈,防止兄弟调用相互干扰。
方法步骤详情
构建分五阶段。(1) 输入-输出隔离:从转录中分离用户输入与期望答案,后者作为正确性参照。(2) 分解:把推理拆成层级化逻辑操作清单,每个操作祈使式地命名其消费的基本输入,并标记可复用子计算。(3) 参数识别:判定问题类,产出通用输入模板 $q(\bullet_1,\dots,\bullet_n)$ 与各参数的描述、原实例具体值及逻辑有效域。(4) 规划:确定语义函数集合、依赖结构与自底向上实现顺序,指定根函数,粒度可配置为 fine/medium/coarse。(5) 实现:$\mathcal{B}$ 进入智能体循环撰写候选函数——先查注册表复用语义等价函数,再经语法与叙述质量静态检查,然后用原参数派发并由评审模型 $\mathcal{J}$ 对照转录判分,失败则携结构化反馈重写;全部注册后对根函数做正确性测试与重复 $N$ 次的参数抽取往返鲁棒性测试。调用走四步:IS1 入口点余弦相似度搜索(低于阈值即回退源模型);IS2 由 $\mathcal{T}$ 驱动、按注册参数描述参数化的抽取器提取参数;IS3 创建新 Context 派发根函数执行;IS4 返回结果字典与叙述轨迹。缓存成熟后可编译:把 do() 静态解析为直接函数调用、load() 解析为字典查找,产出无需嵌入引擎的独立模块。
技术新颖性
与已有方法的本质区别有三。其一,缓存物是可参数化代码而非数据:单体缓存存转录、KV 缓存或 Mamba 隐状态,输入改一个词就失效;ARC 在参数识别阶段显式建模参数集合 $\Pi$ 及其有效域,对参数化扰动天然鲁棒(Table 2 中参数扰动通过率达 90.9%-99.3%)。其二,命中即零生成:模块化缓存即便完美命中也要完整重新生成响应,ARC 命中后只执行确定性代码加少量 $\mathcal{T}$ 调用,且每条目以代码形式存储,正确性可通过人工或 AI 审查异步保证,这是模块化缓存做不到的。其三,语义发现带来跨条目复用与持续可训练性:自然语言描述引用使新条目在构建时即可搜索并直接复用旧条目的语义函数,缓存可以增量扩充而无需像微调模型那样从头重建;论文指出缓存可以亚线性速度增长,密集覆盖用户最感兴趣的领域后即可接管大语言模型的相当比例工作负载。
实验结果
在 MATH-500、AIME 2024/2025/2026、GPQA Diamond、GSM8K、MMLU-Pro、SciBench 八个基准上(Table 2,源与构建模型为 Claude Opus 4.5,目标模型为微调 Llama 3.2 1B),缓存准确率 C Acc 在 7/8 个基准上匹配或超过源模型准确率 S Acc:AIME '25 上 93.3% 对 83.3%(+10.0pp),AIME '26 上 96.7% 对 90.0%,AIME '24 双双 100%,SciBench 88.2% 对 85.2%,MMLU-Pro 89.0% 对 88.0%;唯一例外是 GSM8K 的 98.0% 略低于 98.5%。作者把 AIME 的反超归因于:转录推理正确但末步算术失误时,缓存以确定性代码执行同样推理反而避开失误。保真度(缓存与源转录一致率)在 6 个基准超 98%,MMLU-Pro 达 100%。扰动鲁棒性:所有基准所有模式通过率至少 90%,最低为 AIME '26 组合扰动 90.8%,最高为 SciBench 组合扰动 96.4%。成本:单次缓存调用仅 $0.0004-$0.0019,相对源调用节省 16.3 倍(GSM8K)至 291.1 倍(AIME '25);构建开销为单次源成本的 12.1-83.7 倍,AIME 约 13 次命中回本,GSM8K 约需 90 次。
查看结构化数据
| 任务 | 指标 | 本文 | 基线 | 提升 |
|---|---|---|---|---|
| MATH-500(竞赛数学) | 缓存准确率 C Acc(对 golden label) | 98.8% | 源模型 Claude Opus 4.5:98.6% | +0.2pp;单次调用节省 88.7 倍,组合扰动通过率 91.6% |
| AIME 2025(竞赛数学,30题) | 缓存准确率 C Acc | 93.3% | 源模型:83.3% | +10.0pp,全表最大正确性提升;节省 291.1 倍,构建开销最低档 12.1 倍 |
| AIME 2026 | 缓存准确率 C Acc | 96.7% | 源模型:90.0% | +6.7pp;节省 281.4 倍,组合扰动 90.8% 为全表最低但仍高于 90% |
| AIME 2024 | 缓存准确率 C Acc | 100.0% | 源模型:100.0% | 持平满分;参数扰动通过率 99.3% 为全表最高,节省 262.4 倍 |
| GPQA Diamond(研究生级科学问答) | 缓存准确率 C Acc | 83.8% | 源模型:83.8% | 持平;保真度 98.5%,节省 38.1 倍,缓存单次成本 $0.0019 为全表最高 |
| GSM8K(小学数学应用题) | 缓存准确率 C Acc | 98.0% | 源模型:98.5% | -0.5pp,唯一低于源模型的基准;构建开销 83.7 倍为全表最高,节省 16.3 倍为全表最低 |
| MMLU-Pro(多学科推理) | 保真度 Fidelity(缓存-转录一致率) | 100.0% | C Acc 89.0% 对 S Acc 88.0% | 保真度满值;C Acc 反超源模型 1.0pp,节省 22.9 倍 |
| SciBench(大学教科书科学题) | 缓存准确率 C Acc | 88.2% | 源模型:85.2% | +3.0pp;组合扰动通过率 96.4% 为全表最高,节省 83.0 倍 |
局限与改进
作者承认的限制:其一,GSM8K 上缓存(98.0%)小幅落后源模型(98.5%),是八个基准中唯一的倒退;其二,构建成本高达单次推理的 12-84 倍,GSM8K 约需 90 次命中才回本,低频问题不值得建缓存;其三,编译会冻结函数网络,之后任何缓存更新(新增函数或参数泛化)都需重新编译。评估设计上,扰动测试只对缓存已答对 golden label 的样本进行,鲁棒性数字存在选择性偏差。我的补充观察:(1) 全部基准都是答案唯一的数学/科学题,参数天然离散清晰,而创意写作、开放式决策等任务是否可等式参数化未经验证;(2) 每样本在隔离缓存中构建再合并主缓存,跨条目语义函数冲突与近重复函数合并被明确搁置;(3) AIME 每年仅 30 题,83.3% 到 93.3% 的提升实际只差 3 题,统计方差大;(4) 正确性与扰动判定都依赖与源模型同源(Claude Opus 4.5)的评审委员会一致通过,可能引入系统性评估偏差;(5) 未与最自然的基线——直接微调端到端解题小模型——做成本效果对比,无法判断 ARC 相对传统蒸馏的增量价值。
独立分析的弱点
第一,泛化边界完全依赖等式推理假设 A1,但论文没有给出"新查询是否落入某条目覆盖域"的失败代价分析:IS1 的入口点余弦相似度阈值是唯一守门员,一个相似度高但参数结构不同的查询可能被错误命中并产出自信的错误答案;改进方向是在 IS1 之后加入廉价的参数可抽取性预检(先让 $\mathcal{T}$ 尝试执行 IS2,抽取失败或校验不过立即回退源模型)。第二,构建期每题在隔离缓存中完成再合并主缓存,函数注册表随条目增长必然堆积语义近重复函数,作者自己也承认多函数泛化合并问题未解决;改进方向是周期性对注册表做嵌入聚类、合并函数并重写描述。第三,缓存只能覆盖已见问题类,命中率取决于流量分布,流量稀疏的端点上构建投资无法回本(GSM8K 需约 90 次命中);改进方向是按线上日志做热度驱动的选择性构建,只缓存高频指令模板。第四,从安全角度看缓存条目是可长期复用的可执行代码,一次幻觉或被污染的转录可能被固化为代码反复执行;改进方向是为条目引入沙箱执行、代码签名、版本化与一键回滚,并把评审委员会审查做成上线前的强制门禁。
未来方向
作者明确提出的方向:把多个相似但不完全相同的语义函数泛化合并为一个更通用的函数,使缓存随条目增长呈亚线性膨胀,并在高热领域逐步接管大语言模型的相当比例工作负载;对后训练数据语料应用推理缓存,催生"语义模型"——生活在神经模型之上、完全可解释、高效且持续可训练的新模型类,届时神经模型退居硬件与智能软件之间的"神经件"(neuralware)支撑层;把非创造性智能任务整体推向边缘设备,目标模型进一步压缩到数亿参数级(如 IBM Granite 4 家族);以及两阶段部署——先用更强目标模型建缓存、收集其调用日志、再微调最小可用的目标模型替换后上线。基于本文成果还可延伸:在生产智能体系统的真实流量上实测命中率与端到端节省(论文只验证了难度上限而非典型负载);把 invoke_tool 与工具增强流水线深度整合,覆盖需要检索或代码执行的推理类;将条目级异步正确性审查做成持续运营流程;探索多条目缓存的联邦合并与冲突消解。
复现评估
复现难度中等偏高。论文是 NVIDIA 技术报告,首页给出 Lab 与 Project Moonshot 链接但未声明开源代码仓库;不过方法描述相当具体:八个运行原语、五阶段构建流程、四步调用协议、三阶段扰动管线都在正文完整给出,附录 A 提供了 SciBench 理想气体定律题目的端到端走线(问题 Figure 3、源推理 Figure 4、语义函数 Figure 5、编译版 Figure 7、输出 Figure 8),附录 D 描述目标模型微调:收集 20% 真实用例、用 $\mathcal{S}$ 生成约 10 倍合成数据、微调 Llama 3.2 1B。资源需求:源与构建模型均为 Claude Opus 4.5(温度 0.0),评审委员会为 2 个 Opus 4.5 实例且要求一致通过;检索用 Embedding Gemma 加 FAISS CPU 索引;成本核算按 2026 年 3 月 API 牌价(Opus 4.5 输入 $5/M、输出 $25/M、缓存写 $6.25/M、读 $0.50/M)。独立复现的主要工程量在搭建多角色 LM 编排框架(构建循环、评审管线、扰动生成与验证),调用期负载一台普通 CPU 服务器即可承载。
论文图表
源模型 $\mathcal{S}$(Claude Opus 4.5)解答理想气体定律题目的原始推理转录,是构建器 $\mathcal{B}$ 在构建缓存时的唯一智能输入。
构建五阶段全部以转录为原料,将其与 Figure 5 对照即可看清推理逻辑如何被机械地翻译成语义函数网络,验证 A2 假设的可行性。
理想气体定律题目的完整缓存条目:多个语义函数经 load/do/extract/convert 等原语组合成层级依赖网络,根函数、入口点描述与通用输入模板一并注册进向量索引注册表。
它展示了 Phase 2 分解与 Phase 5 实现的真实产物形态,是比 Figure 2 单函数示例更能体现层级组合与语义发现机制的全貌图。
Figure 5 缓存条目经静态编译后的产物:所有 do() 被替换为对已解析函数的直接 Python 调用,所有 load() 被替换为调用方载荷上的直接字典查找,形成不依赖嵌入引擎与向量库的独立可读 Python 模块。
直观展示 2.2.3 节编译优化的实质——以牺牲增量更新灵活性(更新需重编译)换取 O(1) 名字派发、更低调用延迟与可独立部署的制品。
缓存被派发后的实际输出:命名结果字典加上执行期间经 narrate() 累积的叙述轨迹,后者充当人类可读的解题过程说明。
呈现调用协议 IS4 输出阶段的实际形态,说明 ARC"完全可解释"的主张如何落地为可审查、可转述的叙述文本而非黑盒张量。