竞赛编程远非简单的“将题面转化为代码”。一个正确的解题方案通常需要经历多个复杂环节:理解自然语言描述的题目、抽象出数学结构、选择合适的算法范式、评估复杂度、编写代码、构造测试用例、处理多解输出、排查隐藏边界条件等。
对于大语言模型而言,这类任务存在几个典型难点:
1. 算法选择高度依赖题目结构
同样是图论、动态规划或字符串相关的问题,不同的约束条件下可能对应截然不同的算法。如果模型仅依据表面相似性检索样本,很容易选到“看起来相似但本质错误”的套路。
2. 样例测试远远不够
许多有缺陷的解法能够通过样例,却会在隐藏测试中失败。特别是边界条件、复杂度极限、多答案校验器(checker)、精度问题等,都很难通过普通自测覆盖。
3. 失败经验难以复用
现有的很多编码智能体(coding agent)在失败后会重新尝试、重新生成、重新调试,但一次任务结束后,这些失败经验通常不会改变后续任务的求解策略。系统并没有真正学会“下次遇到类似结构要避开哪些陷阱”。
4. 多Agent框架仍然偏静态
AlphaCodium、MapCoder等方法已经把解题拆解为多个阶段,但它们更像固定的流水线。每个阶段可以调用模型,却缺少一个能够根据历史经验不断更新的长期记忆与路由机制。
来自南京大学、清华大学等机构的研究者提出了Solvita,这是一个面向竞赛编程的Agentic Evolution框架。它不微调底层大模型,而是在Planner、Solver、Oracle、Hacker四个角色之外构建可训练的图结构知识网络,让系统能够从解题、测试、攻击和修复过程中持续积累经验。

代码仓库:https://github.com/NJU-LINK/Solvita
论文链接:https://arxiv.org/pdf/2605.15301
Solvita的出发点其实很朴素:人类选手刷题变强,不是因为每道题都从零开始,而是因为会积累“什么题用什么套路”、“什么实现容易WA(Wrong Answer)”、“什么测试最容易hack掉错误程序”这些经验。

Solvita是如何工作的?
Solvita的核心思想是:将竞赛编程求解组织成一个闭环系统,并让每个环节都具备可训练的知识网络。整个系统由四个Agent组成:
1. Planner:负责题目抽象与策略选择
Planner首先把原始题面转化为更形式化的数学描述,去除故事背景和无关信息,提取变量、约束、目标和输入输出结构。随后,它会预测可能的算法标签、实现思路和复杂度。它背后的知识网络会记录历史题目的形式化结构、预测标签和最终结果。后续遇到新题时,Planner不是简单靠prompt临场发挥,而是会参考结构相似问题的历史经验。
2. Solver:负责生成代码与局部修复
Solver根据Planner的策略生成C++程序,并在样例和Oracle生成的测试上进行验证。与很多“失败后整段重写”的方法不同,Solvita强调patch-based repair:如果程序失败,Solver会尽量生成SEARCH/REPLACE形式的局部补丁,而不是完全重新生成整份代码。这样做的好处是保留已经正确的部分,集中修改真正出错的局部,避免每次重写都破坏前面已经满足的条件。
3. Oracle:负责构造可靠内部测试
Oracle的任务不是写出最终答案,而是为解法构造“可信监督”。它会生成基于testlib的生成器(generator)、验证器(validator)、校验器(checker)和参考解法(reference solver),并检查参考解法能否复现公开样例输出,再生成更多测试输入并进行认证。对于多答案问题,Oracle还需要提供custom checker的证据。只有当测试输入、期望输出、认证比例等条件满足要求时,Oracle生成的测试才会被接受。
4. Hacker:负责主动攻击候选程序
Hacker更像一个对拍高手。它会分析候选代码的潜在漏洞,生成结构化漏洞报告(vulnerability report),然后选择语义攻击(semantic)、压力攻击(stress)、反哈希攻击(antihash)等路线,尝试构造能击穿错误程序的输入。如果某条攻击路线失败,系统还会沿着fallback chain继续尝试。成功hack到的bug不只用于当前题修复,还会作为失败经验传播给Planner、Solver、Oracle和Hacker的知识网络。

可训练的图结构知识网络
Solvita最重要的设计不是“多了几个Agent”,而是每个Agent都配有一个可训练的图结构知识网络(graph-structured knowledge network)。
以Solver为例,它的知识网络分为三层:
- Q Layer:记录历史题目描述和元信息;
- M Layer:记录解法分解、失败对比和元认知分析(metacognitive analysis);
- S Layer:记录可复用算法技能和C++模板。
当新题到来时,系统会先检索相似的Q节点,再沿着Q→M→S的两跳路径激活相关技能。
不同路径的边权不是固定的,而是会根据历史成功与失败进行更新。成功路径会被强化,失败路径会被削弱或生成新的对比节点(contrastive node)。这和传统RAG有本质差异。
传统RAG更像是“找到相似文本塞进prompt”,而Solvita的知识网络更像“学习什么问题结构应该路由到什么算法技能”。记忆不再只是静态检索,而变成了可训练的策略路由。

Oracle和Hacker
在算法题中,测试本身就是能力的一部分。一个Agent能不能解题,很大程度上取决于它能不能判断自己的解法是否真的正确。
Solvita将测试能力拆成两个互补方向:
Oracle关注“可靠监督”。它更倾向于构造reference solver、generator、validator和checker,目标是生成可以稳定判断程序正确性的内部测试。
Hacker关注“发现漏洞”。它更倾向于寻找边界输入、复杂度极限、结构性反例或哈希冲突等攻击样例,目标是暴露候选代码中隐藏的错误。
二者的功能并不重复。Oracle更保守,能较好保护正确解法不被误杀;Hacker更激进,更擅长发现隐藏bug。论文实验也显示,二者结合后,在错误解法检测、正确解法保留和更强测试确认(stronger-test confirmation)上都取得了更好的平衡。

实验结果
论文在CodeContests、APPS、AetherCode以及近期Codeforces rounds上评测了Solvita,并与single-pass、Codex CLI、Claude Code、AlphaCodium、MapCoder等方法进行了对比。
主实验数据显示,Solvita在15个backbone-benchmark组合中,有14个取得了最高的pass@1。
以GPT-5.4 backbone为例:

可以看到,Solvita相比single-pass几乎实现了大幅跃升;相比已有的agent框架,也在多个benchmark上保持稳定领先。更重要的是,这种提升并不是靠无限增加token换来的。论文的成本分析显示,Solvita的平均token消耗与开源agent框架处于相近区间,并没有接近部分商业CLI agent的更高消耗水平。
消融实验
论文进一步做了additive ablation(加法消融),用来区分两个问题:
第一,Solvita的收益是不是仅仅因为多Agent流程更复杂?
第二,可训练知识网络是否真的带来了额外提升?

结果显示,从single-pass切换到没有训练的多Agent框架,本身已经能显著提升性能。这说明“solve–certify–attack–repair”的闭环结构确实更适合复杂算法题。
但在此基础上,加入Solver/Oracle/Hacker knowledge network后,性能还能继续提升,并且随着训练问题数量从1.5k到3k再到4.5k,收益持续增长。
在GPT-5.4上,完整系统最终达到:
(此处保留原文数据,但未从用户提供的文本中提取具体数值,请以原文为准)
这说明三个网络不是互相替代,而是互补叠加。Solver network主要提升算法技能路由与实现修复;Oracle network提升内部监督质量;Hacker network提升对隐藏漏洞的攻击能力。完整系统将三类经验整合起来,最终取得最强表现。
Patch-based Repair:为什么不要每次都重写?
论文还专门比较了Solver内部的两种修复方式:full regeneration(完全重新生成)和patch repair(局部补丁修复)。
Full regeneration是每次失败后重新生成完整代码;
Patch repair则只针对诊断出的错误位置生成局部补丁。
在相同最大迭代预算下,patch repair不仅通过率更高,而且平均迭代次数更少、token节省更多。
以GPT-5.4为例:

这说明在长链路解题中,“推倒重来”并不总是好策略。很多时候,候选解法已经有大部分逻辑正确,真正需要的是精准修补,而不是重新生成一份可能引入新错误的代码。
Codeforces真实比赛评测
除了离线benchmark,论文还在近期Codeforces rounds上进行了更接近真实比赛的评估。
评测选取12场post-cutoff Codeforces rounds,共76道题。每场比赛都在最新时间限制内完成,不允许赛后修改,约束与真实选手一致。结果显示,使用GPT-5.4、Claude Opus 4.6、DeepSeek V4 Pro作为backbone的Solvita版本,最终都进入Legendary Grandmaster区间;而相同backbone的bare model则停留在较低区间。
这说明Solvita的收益不只是底层模型本身带来的,而是来自agentic loop(智能体循环)、知识网络和对抗验证机制的系统性增强。

总结与展望
Solvita是一个面向竞赛编程的Agentic Evolution框架。它试图回答一个重要问题:如何让代码Agent不只是“多试几次”,而是真正从过去的成功和失败中积累经验?
该研究的核心贡献可以概括为三点:
1. 提出solve–certify–attack–repair闭环
Solvita将算法题求解拆解为Planner、Solver、Oracle、Hacker四个角色,让策略选择、程序生成、测试认证和对抗攻击形成闭环。
2. 引入可训练的图结构知识网络
每个Agent都拥有自己的知识网络,通过pass/fail判定结果、测试认证质量和对抗性漏洞(adversarial vulnerability)等反馈信号更新边权,在不微调底层LLM的前提下持续积累经验。
3. 在竞赛编程任务上取得显著提升
Solvita在CodeContests、APPS、AetherCode和Codeforces真实比赛评测中均展现出强性能,在多数backbone-benchmark组合上超过了已有的agent框架。
从更大的角度看,Solvita传达了一个很重要的观点:
未来更强的coding agent,不一定只来自更大的模型,也可能来自更好的经验组织方式。
真正可靠的代码智能体,需要会规划、会验证、会攻击自己的答案,也需要能把失败转化为下一次成功的经验。
对于AI for Code研究而言,Solvita提供了一种新的思路:从一次性代码生成,走向持续进化的代码智能体。
参考资料:
https://arxiv.org/pdf/2605.15301


