论文链接:PRAXIS: Graph-Grounded Tacit Knowledge for Domain Code Generation 代码:github.com/jiangxxxue/PRAXIS 发表时间:2026年8月20日(arXiv v1) 机构:北京大学高置信软件技术重点实验室(主导)+ 新加坡国立大学 + 上海交通大学(纯高校合作) 领域标签:cs.SE / cs.AI


一、论文背景

1.1 通用编码 Agent 的「主场光环」与「客场失灵」

过去两年,LLM 编码 Agent 在通用软件工程基准上高歌猛进:SWE-bench 上领先系统已能解决过半真实 GitHub issue,OpenHands、SWE-Agent、AutoCodeRover 这些框架各显神通——有的精心设计仓库导航接口,有的把代码搜索和程序分析组合起来。看起来「AI 程序员」指日可待。

但真实世界的软件开发有个截然不同的基本盘:领域代码生成(domain code generation)才是主流。强化学习训练管线、RAG 引擎封装、Agent 框架二次开发、模型优化工具链——这些专业仓库里塞满了项目特有的约定、约束和实现模式,而它们几乎不可能出现在模型的预训练语料里。结果就是:在通用基准上耀武扬威的 Agent,一到领域数据集上准确率断崖式下跌。KoCo-Bench、DomainCodeBench 等基准反复证实了这一点。

1.2 两个精巧的预实验:问题不在「看得见的代码」

论文开篇做了两组控制变量实验(OpenHands + DeepSeek-V3.2,在 KoCo-Bench 上 Pass@1 仅 19.1%),一步步排除了「表面原因」:

实验一:把标准答案的依赖直接喂给它。 作者构造了一个「近乎完美」的代码上下文——直接提供目标实现所依赖的全部金标依赖源码。结果相对提升只有 19.9%,整体表现依旧很低。更有意思的是失败模式:依赖明明就在眼前,Agent 却不知道怎么正确地用它——比如接口签名都对、调用也不报错,但就是不符合这个项目的用法。

实验二:让它自己探索仓库、总结领域知识。 让 Agent 主动逛仓库、把依赖的领域知识总结出来,连同源码一起供给。结果?相对提升仅 4.8%,几乎可以忽略。

这两个数字合起来指向一个结论:真正的困难不在代码库里「看得见」的东西,而在「藏在下面」的东西。

1.3 隐性知识:只存在于老员工脑子里的东西

人工分析失败案例后,论文把根因命名为隐性知识(tacit knowledge):领域特有的业务规则、接口契约和操作约定——开发者通过长期参与一个代码库才内化于心,却几乎从不写进文档、注释或源码。

论文给了一个极其典型的案例。任务是实现 _create_rag_instance——一个工厂方法,职责是配置回调并返回初始化好的 RAG 引擎。Agent 的实现运行零报错:构建配置、按依赖源码的原样模式定义 LLM 与视觉回调、处理可选的 reranker、返回引擎——看起来无懈可击。然而所有测试用例全挂,原因是两条没有写在任何地方的契约:

  • 契约 A(嵌入前必须做 chunk 增强):Agent 直接调 embed(texts);而金标会先用项目专属的检索提示模板包装每个 chunk 再嵌入。为什么?因为查询侧独立地用同一模板包装用户查询后才编码——为了让向量对齐,索引侧必须同样包装。这条互相约束在代码库里没有任何地方写明,它是一种嵌入在代码结构中的约定。Agent 的实现「看似正确」,却静默降低检索质量。
  • 契约 B(LLM 回调必须注册到项目的模型路由器):Agent 构建回调后直接传给引擎;金标还会调用 self.llm_router.register(llm_func, config.model_name)。因为在这个项目里,查询分解器、答案合成器等流水线阶段是运行时从共享的 llm_router 查找回调的——工厂不注册,下游就静默回退到默认模型,产出错误结果。关键是:这条约束从工厂自己的接口上完全不可见,但工厂与下游消费者通过依赖图中的共享 llm_router 节点结构性地连接着。

这个案例是全文的题眼:知识不写在任何单一位置,却通过依赖关系跨组件传播。

1.4 三重性质:为什么现有方法必然失效

从案例推广到全部失败模式,论文归纳出隐性知识的三个内在性质——这也是全文一切设计的出发点:

性质含义案例体现直接堵死的路线
P1 潜伏性:知识藏于实践之下只在真实开发工作流中才会浮现,需求描述、函数签名、依赖源码里都找不到两条契约不出现于任何可见工件「读代码 / 搜代码 / 总结代码」式提取
P2 结构分散性:沿依赖关系传播不驻留在单个函数里,而是分散在代码实体及其依赖关系上,效应沿依赖路径扩散工厂与下游经共享 llm_router 双向连接平铺文本列表 / 向量检索库
P3 无自知之明:Agent 不知道自己缺环境不提供任何「还需调查」的线索,Agent 无从构造相关查询Agent 全程自信满满提交,推理轨迹中从未察觉知识缺口一切依赖 Agent 主动检索的机制

P3 最致命。Agent 的失败不是「搜了没搜到」,而是压根没意识到该搜。这从机制上宣判了「经验库 + 主动检索」范式的死刑——你不能检索你不知道自己缺少的东西。

1.5 一句话定位

论文要回答三个问题:隐性知识怎么提取(用开发实践而非静态阅读)、怎么表示(锚定在代码依赖图上而非平铺列表)、怎么复用(主动注入而非等 Agent 来查)。


二、论文定位和关联工作

这篇论文处在三条研究线的交汇处,理解它与每条线的差异就理解了它的贡献。

2.1 领域代码生成:三类既有方案为何都不行

方案类别代表方法核心思路失效原因
参数更新SFT 领域微调在领域数据上训练模型标注数据贵、灾难性遗忘、学成浅层模式
推理时注入RAG、kNN-LM、DomCoder生成时检索或 token 级融合领域知识对碎片化、隐式的领域知识做不了复杂推理
协作推理大小模型协作微调过的领域专家 + 通用模型受限于领域训练数据质量

这些方法在实践中只有边缘且不一致的改进。目前领域代码生成上表现最好的其实是 agent 化系统——但即便如此,问题远未解决。PRAXIS 与它们的根本区别在于:它瞄准的是一个根本上不同的知识来源——只存在于开发者脑中、学习和检索两条路都够不着的隐性知识。而且 PRAXIS 免训练,可以叠加在任何现有 Agent 之上。

2.2 LLM 编码 Agent:提升「通用能力」vs 补给「特定知识」

从 Self-Collaboration 的多角色协作,到 SWE-Agent 的 Agent-计算机接口、AutoCodeRover 的搜索+程序分析、OpenHands 的 ReAct 开放平台;再到训练侧的 SWE-Gym(可执行训练环境)、SWE-RL(可验证奖励的强化学习)、SEAlign(关键动作步偏好优化)等。

论文的区分一针见血:这些工作提升的是 Agent「一般能做什么」,PRAXIS 提供的是 Agent「关于某个特定代码库需要知道什么」。两者正交,可以叠加。

2.3 经验/技能演化:三个维度的全面差异(最直接的竞品)

这是与 PRAXIS 最同类的方向——从 Agent 轨迹中积累可复用资产:

  • 经验侧:AgentKB、AutoRefine 构建经验库供检索;SWE-Exp 挖掘已解决的软件 issue 并在推理时检索经验,是软件工程上最直接的应用。
  • 技能侧:Kimi-Dev 用 SFT 蒸馏工作流为先验;SICA 自我改进;CodeSkill 用 RL 训练技能抽取策略;Trace2Skill 用免训练的提示式抽取+检索蒸馏可迁移技能。

论文沿三个维度给出对比,每一条都精准对应一个性质:

维度现有经验/技能方法PRAXIS对应性质
注入方式全局注入:按任务级相似度检索,整块塞进上下文分布式注入:每条知识绑定具体代码实体,在交互点上精准投递—
组织形式平铺集合 + 文本向量索引代码依赖图组织,能表达平铺检索无法表达的多跳约束P2
获取时机依赖 Agent 被动构造查询去检索主动浮现:Agent 一碰到相关代码就自动出现P3

还有一个隐藏维度:这些方法从「已解决任务的轨迹」里学,而 PRAXIS 专门设计了一个暴露失败差异的实践阶段——这对应 P1:不在实践中犯错,隐性知识根本不会露头。


三、问题定义

3.1 任务形式化

领域代码生成:给定一个专业领域仓库 R(含项目特有约定、约束与实现模式,不太可能出现在预训练语料中)与自然语言需求描述 d,Agent 可全量访问 R 的所有文件(源码、文档、配置),像人类开发者接手陌生代码库那样工作:理解需求 → 探索仓库 → 读接口与约定 → 写代码 → 出错修订。

过程形式化为 ReAct 式轨迹:T = ⟨τ, h₁,a₁,o₁, …, h_T,a_T,o_T⟩,每步产生思考 hᵢ 与动作 aᵢ(代码搜索 / 读文件 / 编辑),环境返回观察 oᵢ,最终动作提交实现 f̂。

判定标准极其严格:当且仅当 f̂ 通过全部单元测试 U = {c₁,…,c_m} 才算解决——∀j, Pass(f̂, cⱼ) = True。这不是「答个大概」,是工程意义上的全对。

3.2 真正要解的三个子问题

论文把总目标拆解为环环相扣的三问,每问恰好对一个性质:

  1. 提取问题(→P1):如何让藏在水下的知识浮上来?——答案:模拟人类开发者的真实工作流,在目标代码库里真写代码、真踩坑、真迭代。
  2. 表示问题(→P2):浮上来之后怎么存才不丢结构?——答案:把每条知识锚定到对应代码实体,组织在代码依赖图上,保留传播路径。
  3. 复用问题(→P3):怎么送到恰需之处?——答案:主动投递——让知识去找 Agent,而不是让不知道自己缺什么的 Agent 去找知识。

3.3 两个值得注意的边界设定

  • 无数据泄漏:三个离线阶段严格排除评测测试集代码(论文专门引用了污染检测文献自证清白)。
  • 离线/在线分工:前三个阶段离线完成(每个仓库只做一次),第四阶段在线运行于推理时;另有一条在线演化通道让知识随真实任务持续累积。

四、问题解法

PRAXIS 是一条四阶段流水线:❶实践暴露 → ❷蒸馏结构化 → ❸图上组织 → ❹主动注入,外加一条在线演化支线。

4.1 阶段❶:域内开发实践——让 Agent 当一次「新员工」

核心思想:人类新员工怎么学会隐性知识?不是读文档(没有),而是上手写代码、犯错、被测试打脸、改。PRAXIS 让 Agent 复刻这条路径。

选哪些函数练手? 仓库函数集 F 上构建依赖图 G=(V,E)(静态分析构造;边来自两步:①调用依赖——u 调 v 则加边 (u,v);②数据依赖——无调用关系但 u 消费 v 产出的数据也加边)。然后用三个互补策略选候选:

  1. 业务逻辑函数:LLM 语义分析过滤掉通用工具代码,挑出承载项目特有领域规则的——隐性知识最密集;
  2. 高入度(callee-heavy)函数:被众多模块调用的核心接口——关于它们的隐性知识下游影响面最广;
  3. 高出度(caller-heavy)函数:调用众多其他模块——正确实现需要理解多份接口契约,典型涉及多跳隐性知识与业务流水线。

三者取并集得候选池 F_cand。

怎么造练习题? 对每个候选函数 fᵢ(金标实现 fᵢ*),LLM 生成自然语言需求描述 dᵢ 和一组多样化测试输入 Xᵢ。质量闸门:测量 Xᵢ 对 fᵢ* 的行覆盖,只有超过 80% 才准入——保证测试输入充分锻炼函数行为、差分测试能可靠检出差异。

怎么练? 把 F_core 中每个函数的函数体删掉,只留签名与 docstring,让 Agent 在完整仓库上下文里重新实现:

f̂ᵢ ∼ A(· | sᵢ, dᵢ, R)

每个练习会话独立进行——互不「串答案」。

怎么暴露差异?差分测试:每个测试输入 xⱼ 同时喂给 f̂ᵢ 与 fᵢ*,收集行为差异集:

Dᵢ = {(xⱼ, f̂ᵢ(xⱼ), fᵢ*(xⱼ)) | f̂ᵢ(xⱼ) ≠ fᵢ*(xⱼ)}

每个差异作为观察反馈进 Agent 的实践轨迹,驱动下一轮修订 f̂⁽ʳ⁺¹⁾ᵢ ← A(f̂⁽ʳ⁾ᵢ, D⁽ʳ⁾ᵢ),循环直到差异清空或到达最大轮数(R_max=3)。完整的实践轨迹 Tᵖᵢ 涵盖探索、实现、诊断、修订全过程。

关键洞察:失败本身是资产。Agent 哪里错、错成什么样,精确标定了隐性知识的位置——这就是 P1 的解法:实践是隐性知识唯一的显影液。

4.2 阶段❷:结构化知识获取——蒸馏为可验证的四元组

对每个练过的函数构造结构化 diff:Δᵢ = ⟨Tᵖᵢ, Dᵢ, fᵢ*⟩——实践轨迹(含全部实现尝试)、行为差异、金标实现三者并置。若 Agent 多轮仍未解决全部差异,则提供金标实现供对照,从差异中提取知识。

基于 Δᵢ,Agent 提取知识单元集 Kᵢ——扎根于具体差异,而非自由发挥的总结。每个单元存为程序性记忆(procedural memory),是四字段元组:

k = (trigger, content, evidence, confidence)

字段内容作用
trigger该知识应在何种场景下被激活支撑注入阶段判断「何时相关」
content具体约束或约定知识本体(如「嵌入前必须用检索模板包装 chunk」)
evidence来源函数与 diff 片段可追溯、可验证
confidence ∈ [0,1]可靠性,LLM 依两因素打分:实践中实现是否通过差分测试、证据的具体性与清晰度质量过滤与合并的依据

全部练过函数的知识并集为 K。这个四元组设计妙在把「知识」与「使用条件」捆绑存储——为后面的按点注入埋好钩子。

4.3 阶段❸:图锚定知识组织——让知识沿依赖图流动

锚定:映射 φ: V → 2^K 把每个单元挂到来源函数对应的图节点上。

双向传播:这是对应 P2 的核心设计。对每条边 (u,v):

  • v 上的知识 k 若被 LLM 相关性评估认定与 u 相关,则生成改写视角后的传播版本 k′(trigger 更新为反映 u 的视角)加入 φ(u);
  • 对称地,u 上的知识也可传播到 v。

道理是:一个函数的约束会影响所有依赖它的函数;反过来,一个函数被使用的方式也会反过来要求它依赖的函数。传播迭代进行直至收敛或达到最大深度 4 跳——多跳约束(如案例中工厂 ↔ 路由器 ↔ 下游)由此保留。

去重与冲突仲裁:每个节点上语义等价的单元合并。因为独立提取的等价单元构成相互验证,合并后置信度应升高,公式为:

confidence(k_merged) = 1 − ∏(1 − confidence(k))

直觉:两条置信度 0.8 的独立证据指向同一知识,合并后 1−0.2×0.2=0.96——多个独立来源说同一件事,几乎不会是巧合。检测到矛盾单元时,由 LLM 仲裁者综合两者的 evidence 与置信度裁决保留谁。

最终产出知识标注依赖图 G_K = (V, E, φ)。

4.4 阶段❹:隐性知识注入——知识找 Agent,而非 Agent 找知识

对应 P3 的设计。全程用过滤映射 φ_θ(v) = {k ∈ φ(v) | confidence(k) ≥ θ}(θ=0.7)拦住低质单元。分两个时机:

时机一:任务初始化注入。 新任务 τ 到来时,从任务描述定位目标代码实体 v_τ,检索它的调用者集合 V_caller = {u | (u,v_τ)∈E},把相关知识注入初始上下文:

K_init = ⋃_{u∈V_caller} φ_θ(u)

这在 Agent 动笔之前就送上调用方侧约束:输入要求、返回值约定、使用期望——正是「契约 B」这类下游才用得上的知识。

时机二:交互触发注入。 注入机制嵌入 Agent 现有工具。当 Agent 执行代码搜索、读文件、编辑代码时,系统识别被访问实体 V_accessed,把相关知识追加到工具返回结果里:

response′ = response ⊕ ⋃_{v∈V_accessed} φ_θ(v)

Agent 完全无需改变工作习惯——它只是像往常一样读了个文件,读到的内容里自动带着这个位置该知道的隐性知识。

在线知识演化。 Agent 在同一代码库上遇到新任务时,可从在线任务轨迹中用同一套结构化获取管线提取知识,经锚定与传播并入 G_K。存量知识的置信度按任务结果更新:命中且任务成功的单元被强化——confidence ← 1−β·(1−confidence);命中但任务失败的单元被衰减——confidence ← β·confidence(β=0.8)。知识库由此越用越准。

4.5 整体架构一览

阶段阶段性质解的问题对应性质关键机制
❶ 域内开发实践离线提取P1剥函数体+差分测试暴露行为差异,覆盖>80%准入
❷ 结构化知识获取离线提取P1从轨迹+差异+金标蒸馏四元组
❸ 图锚定知识组织离线表示P2双向传播≤4跳、置信度1−∏(1−c)合并、LLM仲裁
❹ 隐性知识注入在线复用P3任务初始化+交互触发双时机,θ=0.7过滤
在线演化在线持续—β=0.8 置信度强化/衰减

一个类比串起全流程:PRAXIS 像给 Agent 安排了一套「新员工入职培养体系」——❶先做一套针对性上岗实操(考题覆盖 80% 以上的工作场景,做错的地方就是重点);❷把实操中踩的每个坑整理成「场景-规矩-出处-可信度」卡片;❸把卡片贴到公司组织架构图(依赖图)的对应岗位上,规矩还会沿汇报线自动传达给上下游岗位;❹之后员工每次接到任务(初始化)或翻阅某份材料(工具交互)时,相关卡片自动出现在他眼前;员工每完成一个真实项目,卡片还会被验证更新(在线演化)。


五、评估指标与实验证据

主实验设定:DeepSeek-V3.2 基座 + OpenHands 框架;KoCo-Bench 主基准(覆盖强化学习、Agent、RAG、模型优化四个新兴领域,横跨 11 个框架、25 个真实项目);AInsteinBench 测迁移(六大生产级科学计算代码库的仓库级 bug 修复:数值相对论、量子信息、分子动力学、量子化学、化学信息学)。指标为 Pass@1(实现通过全部单测的任务比例)与 AvgPassRatio(每任务平均通过测试比例,细粒度部分正确性)。贪心解码、温度 0,保证可复现。8 个 RQ 分四组。

5.1 RQ1 总体效果:全指标登顶

KoCo-Bench 四域平均:Pass@1 32.06%、AvgPassRatio 56.01%,双指标全部最高。要点对比:

对比对象平均 Pass@1PRAXIS 相对优势
裸基座模型10.69%3 倍
OpenHands19.08%绝对 +12.98pp
SWE-Agent25.96%—
OpenCode24.43%—
OpenCollab(次优)27.48%相对 +16.7%
SWE-Exp7.83%低于裸模型
Trace2Skill(最强演化基线)25.19%—

三条结论:

  1. 胜过自带 agentic 搜索的强 Agent:尽管 OpenHands/SWE-Agent/OpenCode/OpenCollab 各有精心设计的仓库探索能力,仍被 PRAXIS 全面超越;
  2. 胜过经验/技能演化 SOTA:证明「依赖图组织 + 交互点投递」优于「经验/技能库平铺检索」;
  3. SWE-Exp 反常地低于裸模型(7.83% vs 10.69%):作者归因两点——它没有知识质量评估机制、不加区分地全用;且积累的经验过于泛化,缺乏捕捉领域约定与隐式契约所需的具体性。这个反例本身就很有信息量:低质量知识的全局注入是负收益的。配对 t 检验确认对全部基线的差异统计显著(p<0.05,AvgPassRatio)。

5.2 RQ2 消融:四个阶段缺一不可,实践暴露降幅最大

变体平均 Pass@1平均 AvgPassRatio降幅
PRAXIS 完整32.0656.01—
w/o 开发实践(改为直接从源码提取)27.4851.17−4.58(最大)
w/o 程序性记忆(四元组→平铺文本)29.0150.69−3.05
w/o 图组织(关闭传播/去重/仲裁)28.2548.80−3.81
w/o 主动注入(交互注入→向量检索)28.2453.36−3.82

去掉开发实践降幅最大(32.06→27.48),直接验证 P1:隐性知识无法通过静态源码分析恢复,模拟人类开发工作流是让它现身的唯一途径。其余三组件各司其职:图组织让知识抵达它能影响的代码实体并消除冗余冲突;主动注入免去 Agent 自行判断检索之苦;结构化四元组提供高效的表达与激活载体。

5.3 RQ3 跨框架跨模型:增益稳定泛化

Agent 框架基座模型基线 Pass@1PRAXIS Pass@1
OpenHandsGPT-5.516.0327.72
OpenHandsQwen3.6-Plus25.9527.48
OpenHandsDeepSeek-V3.219.0832.06
SWE-AgentDeepSeek-V3.225.9635.12

四种配置全部正增益,AvgPassRatio 同步提升——管线不绑定特定 Agent 架构或模型家族。一个有趣规律:GPT-5.5 上增益最猛(+11.69pp)——通用能力强但预训练语料领域覆盖少的模型,一旦补上缺失的隐性知识,受益最大。

5.4 RQ4 跨基准跨任务:修 bug 也好使

不做任何管线改动直接上 AInsteinBench(仓库级 bug 修复,需先定位缺陷再出补丁):总体 %Resolved 27.2 → 31.2;三个难度层级全面提升(Hard 19.1→26.6、Medium 29.2→33.3、Easy 33.8→35.1);全部五个科学域一致改善——数值相对论 23.7→28.8、量子化学 31.9→36.2,化学信息学更从 0.0 → 5.4(基线完全束手无策的域被打开了)。新基准+新任务类型+多领域三重验证泛化性。

5.5 RQ5/RQ6/RQ7:实践的规模效应与成本

  • 实践扩展(RQ5):练习函数数从 1 增到 10,Pass@1 稳步爬升;哪怕只练 1 个函数就已超过 OpenHands 基线与最强演化基线 Trace2Skill——隐性知识是可累积的资产。
  • 在线演化(RQ6):域内顺序处理评测任务、每个任务后提取知识入图,多数域持续改善,RAG 域保持稳定——部署期可持续积累、无回退。
  • 成本(RQ7):相比 OpenHands 的额外 token 开销全部花在离线实践阶段——每个仓库只做一次,随后摊销到该仓库的所有后续任务。同等 token 预算下 n=1 已胜过 Trace2Skill。这构成一种「实践时扩展」:想更强就多练,与 test-time scaling 同构——而 Trace2Skill 不具备此性质。

5.6 RQ8 知识质量:隐性知识长什么样、可不可靠

两位两年以上经验的工程师对随机抽样的 75 个知识单元做了人工评估:

类型分布——五大类:业务规则 34.7%(最多;奖励函数约定、算法约束、项目特有验证协议)、API 模式 24.0%、接口契约 22.7%(关于输入类型/形状/返回约定的未文档化假设)、错误处理约定 14.7%(异常传播与默认返回的项目特有决策)、其他(非行为性风格偏好)4.0%。所有主要类别都编码了难以直接从源码提取的知识——坐实了「隐性」本性。

质量评分(5 分制):内容真实性 4.28、触发准确性 4.24、证据可追溯性 3.62。自动置信度与人类评分的 Spearman 秩相关 ρ=0.75(p<0.001)——置信度是可靠的质量信号,用它做过滤是有依据的。

利用率:抽查 50 个任务轨迹,82% 用到了提取的知识,其中 87.8% 产生实质贡献——知识不是摆设,真的在干活。


六、效果优势的根源解释

为什么 PRAXIS 能赢?把证据链串起来,优势有四层根源,层层对应设计决策。

6.1 根源一:用「实践显影」替代「静态阅读」,击中知识的潜伏性

消融最硬的证据:把开发实践换成直接从源码提取,Pass@1 跌 4.58(最大降幅),落回次优水平。这印证了 P1 的判断——光读代码学不会隐性知识。预实验也早已铺垫:喂全量金标依赖只 +19.9%,让 Agent 自己总结知识只 +4.8%。只有差分测试逼出来的「行为差异」才能精确标定隐性知识的藏身之处。Agent 在实践中的每次失败都是一个高质量的「知识探针」。

6.2 根源二:用「图组织」替代「平铺检索」,保住知识的结构本性

SWE-Exp 的反常表现(低于裸模型)与 PRAXIS 的胜出构成一组对照实验:知识的组织形式决定其价值。隐性知识的本质是跨组件协议(P2)——工厂经共享路由器与下游耦合、索引侧与查询侧经模板对齐——这些多跳约束是平铺向量检索在原理上无法表达的。依赖图锚定+双向传播让知识「随结构流动」到它能影响的位置;去重合并(1−∏(1−c))与冲突仲裁则保证知识库越练越纯净,避免了 SWE-Exp 式「不加区分全用」的毒化。

6.3 根源三:用「主动注入」替代「被动检索」,绕开无自知之明的死结

这是全文最深刻的洞察。P3 说 Agent 不知道自己不知道——预实验里 Agent 的轨迹从未出现对缺失契约的探询,推理过程毫无「我可能漏了什么」的迹象。一切把检索发起权交给 Agent 的方案都死在这。PRAXIS 把方向反过来:知识找 Agent。任务初始化时送上调用方约束,工具交互时随返回结果附上位置相关知识——Agent 甚至不需要知道知识库的存在。消融中 w/o 主动注入(换向量检索)掉 3.82,验证了这一转向的实价。

6.4 根源四:实践的可扩展性 + 免训练的可叠加性

两个结构优势让领先可持续:

  1. 实践即扩展:Pass@1 随练习函数数单调上升,且成本集中在一次性离线阶段。这是一种可购买的性能——「实践时扩展」,与 test-time scaling 同构;
  2. 正交叠加:免训练、不绑定框架与模型(RQ3 四配置全正增益),可套在任何 Agent 上。其他方法提升 Agent 的通用能力,PRAXIS 补给特定仓库的领域知识——能力与知识双轮驱动。

6.5 一张因果链总图

三性质诊断(潜伏/分散/无自知)→ 检索式经验库必然失效(SWE-Exp 低于裸模型的实证)→ PRAXIS 三大对策:实践暴露契约(差分测试)+ 图组织保留跨组件传播路径(≤4跳双向传播)+ 主动注入(双时机投递)→ 四域平均 Pass@1 32.06% 全最高、相对次优 +16.7% → 消融验证:去实践降幅最大(−4.58),去图组织 −3.81,去主动注入 −3.82,环环有据。


七、必要知识反推

如果只用三句话抓住 PRAXIS 的骨架:

  1. 领域代码生成的瓶颈不是代码能力,是隐性知识——业务规则、接口契约、操作约定只活在开发者脑中;它有潜伏性(只在实践中浮现)、结构分散性(沿依赖图传播)、无自知之明(Agent 不知己缺)三重性质,检索式方案天然失效。
  2. 对策是四阶段闭环:域内开发实践(剥函数体+差分测试暴露行为差异、覆盖率>80% 准入)→ 蒸馏四元组(trigger/content/evidence/confidence)→ 依赖图双向传播(≤4跳)+ 去重合并(置信度 1−∏(1−c))+ 冲突仲裁 → 主动注入(任务初始化+交互触发)+ 在线演化(β=0.8 置信度更新)。
  3. 知识找 Agent,而非 Agent 找知识——这是对「记忆/经验库+检索」范式的方向性反转,也是它赢过 SWE-Exp、Trace2Skill 等 SOTA 演化方法的根本原因。

复现路上的关键超参数:R_max=3(差分测试修订轮数)、传播深度 4 跳、置信度阈值 θ=0.7、演化因子 β=0.8;温度 0 贪心解码。值得注意的是作者坦言未做穷举超参搜索(API 成本所限),启发式设定下已全配置最优——调优空间尚有余量。


八、论文中可以提取的通用性灵感

跳出代码生成,PRAXIS 的思想可以迁移到更广的 Agent 系统设计。

8.1 「不知道自己不知道」是检索式记忆的原理性天花板

任何领域的 Agent 记忆系统都可能撞上 P3:环境不给线索,Agent 无从发起查询。方向反转——从 pull(Agent 检索)到 push(知识随交互自动浮现)——适用于一切「使用者缺乏元认知」的场景:新手辅助、合规检查、安全规范提示。设计记忆系统时先问一句:用户/Agent 知道该搜什么吗?

8.2 结构化载体 + 绑定结构,是知识的最佳存法

四元组把「知识内容」与「触发条件、证据、置信度」捆绑,再把单元锚定到工作流的结构(依赖图)上。这个两层设计可泛化:CRM 场景知识锚定到客户关系图、科研方法锚定到任务 DAG。置信度合并公式 1−∏(1−c) 是独立证据相互验证的优雅实现,任何多源知识融合场景都可直接借用。

8.3 失败驱动的知识提取:差异即信号

差分测试的精髓是用「行为差异」精确定位知识缺口——比「总结成功经验」信息密度高得多。设计自进化系统时,优先构造「让系统犯错并捕获差异」的机会:模拟练习+金标对照,错误自动转化为知识。SWE-Exp 的教训同样值得记取:没有质量闸门的知识注入是负收益,宁可少而准,不可多而杂。

8.4 一次性离线投资 + 在线摊销 + 持续演化

成本结构的启示:把昂贵工序(实践)压缩到每仓库一次的离线阶段,线上只做廉价的注入;再用在线演化(命中+成功→强化、命中+失败→衰减)让资产随使用增值。「实践时扩展」提供了一条独立于模型升级的性能增长轴——在模型能力趋同的时代,领域知识积累可能成为 Agent 产品差异化的护城河。


附录:关键数字速查

项目数值
KoCo-Bench 四域平均 Pass@1 / AvgPassRatio32.06% / 56.01%(双最高)
vs 次优 OpenCollab相对 +16.7%
vs OpenHands19.08% → 32.06%(绝对 +12.98pp)
SWE-Exp(经验库基线)7.83%,低于裸模型 10.69%
消融:去开发实践 / 图组织 / 主动注入 / 程序性记忆27.48 / 28.25 / 28.24 / 29.01
AInsteinBench %Resolved27.2 → 31.2(Hard 19.1→26.6;化学信息学 0.0→5.4)
跨模型增益最大GPT-5.5:16.03 → 27.72(+11.69pp)
知识类型分布业务规则 34.7% > API 模式 24.0% > 接口契约 22.7% > 错误处理 14.7% > 其他 4.0%
人工质量评分(5分制)真实性 4.28 / 触发准确 4.24 / 证据可溯 3.62
置信度-人评相关性Spearman ρ=0.75(p<0.001)
任务知识利用率82% 任务用到知识,其中 87.8% 有实质贡献
关键超参R_max=3,传播≤4跳,θ=0.7,β=0.8,温度 0