← 返回 2026-08-26

MARS:面向竞赛编程的多专家 LLM 接力系统 MARS: Multi-Specialist LLM Relay System for Competitive Programming

Andrei Mikhailov, Mikhail Burtsev, Alsu Sagirova 📅 2026-08-24 👍 8 2026-08-30 18:30
LLM智能体 代码生成 多智能体系统 检索增强生成 竞赛编程

算法专家智能体接力协作,用公开测试反馈逐步修复竞赛代码

前置知识

多智能体系统(MAS)

由多个各自持有提示词与角色的 LLM 智能体协作完成任务的框架,常见形态是规划者—编码者—调试者的固定流水线,或通过图结构动态组织智能体通信。协作方式包括顺序接力、并行集成与中央管理器聚合,代表工作有 MapCoder、CodeSIM、AutoAgents 等。

MARS 的出发点正是对 planner-coder-debugger 这类通用角色划分的批判,理解现有 MAS 的组织方式,才能看出它把'角色'替换为'算法主题专长'这一步新在哪里。

检索增强生成(RAG)

在生成前先用向量检索从外部语料中找到相关片段并注入上下文。本文用 Jina Embeddings v2 把 cp-algorithms 算法百科编码成索引,每个专家智能体按自己的标签过滤后检索,拿到该算法主题的理论推导片段再参与解题。

每个专家的'专长'完全由其专属语料切片与标签集定义,检索质量直接决定团队选择与生成质量,是理解 MARS 方法设计的核心。

CodeContests 与 pass rate

DeepMind 发布的竞赛编程基准,题目来自 Codeforces 等平台,每题分公开样例与隐藏测试。pass rate 指生成程序通过全部隐藏测试的任务比例。本文用其测试集的 165 道题,并按 Codeforces 难度分为 Easy/Medium/Hard 三层(56/39/70 题),所有结果为 3 次运行平均。

论文所有主实验都在这 165 题上进行,理解该指标与分层方式才能正确解读 Table 1-3 和难度分析图。

沙箱执行反馈与本地门控(gate)

把生成的 C++17 代码放进 ExecEval 沙箱,对公开样例编译运行,得到'通过多少个样例'的确定性信号。MARS 规定:修复版只有在编译通过且公开样例通过数不少于本轮草稿($R_{after}.passed \geq R_{before}$)时才被接受,否则回退到草稿。

这一确定性 gate 用可观察的执行信号取代模型自报置信度来决定 keep/repair,是 MARS 区别于 Self-Refine、Reflexion 等自反馈方法的关键机制。

研究动机

现有 LLM 多智能体代码生成系统(MapCoder、CodeSIM、Solvita 等)把竞赛编程当一般代码生成处理,套用规划者、编码者、调试者这类与内容无关的通用角色,指望底座模型的大规模预训练自动覆盖算法专长。但竞赛题往往混合多个理论领域,既需要推理技能又需要扎实的算法背景;基准研究显示即便强模型在 olympiad 级题目上解题率也很低,最难档几乎无人能解。具体到本文实验设置:在 CodeContests 测试集 165 题上,直接提示 Gemma 4 只有 0.48 的通过率;Single-RAG 因单一专家缺乏执行信号无法从算法错误中恢复,只能到约 0.529;Parallel ensemble 把多个候选独立生成后仅在最后合并,每题要花 360.9 秒却只换来 0.56。内容无关的流水线没有任何机制把算法专业知识注入解题过程,这是持续失败模式的根源。

本文的目标是本文的目标是构建一个 prompt-only、主题对齐的多智能体框架 MARS(Multi-Agent Relay of Specialized LLMs):每个智能体只负责一个算法领域(动态规划、图论、字符串、几何等),并通过检索增强生成挂载该领域的算法理论语料;团队在推理时按自评的主题胜任度动态组建而非预先固定;公开样例执行作为每一步的循环内信号驱动 keep/repair 决策。实验目标是验证该设计能否在不微调、不更换更强底座的前提下,把 CodeContests 165 题上的通过率从直接提示的 0.48 提升到 0.62 以上,同时以远低于 CodeSIM(0.731,817.5 秒/题)的墙钟成本逼近重搜索系统,并在 3 个底座模型与 2 种语言上保持稳定的排序优势。

与已有工作不同的是,已有工作沿三条轴引入异构性:persona 角色扮演(如 MetaGPT 式角色、医疗专科、Thinker/Judge/Executor)、底座模型多样性、动态组队(按能力描述招募专家或连同边一起优化智能体图),但没有任何系统把智能体专长与任务的主题结构绑定,也没有为每个专家配一个主题知识语料。检索方面,REDCODER、DocPrompting、RepoCoder 检索的是代码、API 文档或代码库,面向实现层面;MARS 检索的是按专家切分的算法理论语料(每个专家一个语料切片),直指题目所需的算法知识本身。执行反馈方面,Self-Refine 与 Reflexion 依赖模型自生成反馈,MARS 用确定性的公开测试执行;组队方面不靠通用能力描述,而靠每个专家对'题目是否属于我领域'的自评,加上标签过滤后的检索质量信号。

核心方法

直觉上,MARS 把一次解题组织成'专家门诊接力':先由 11 个主题专家各自判断这题是否归自己管,选出至多 3 人组队;第一位专家写出 C++17 初稿,之后每位专家在共享草稿上接力修改,每一步都跑公开样例看对错,不行就修或传给下一位,直到有人判定解完或预算用尽,最后做一次基础设施级修复。技术上分四阶段:(1) 自评——每个专家对 cp-algorithms 语料按自身标签过滤后检索,返回 in-scope、relevance 与 0-1 置信度;(2) 组队——按标签重合、RAG 覆盖、置信度排序选至多 3 人,另用 can-start 探针选出 starter;(3) 接力——每轮两次 LLM 调用:先生成草稿并在 ExecEval 上对公开样例执行,再由自检调用决定 keep_code/repair_code/no_change 并产出结构化交接包,修复仅在非回归时被接受;(4) 收尾——净化代码,仅当检测到 I/O、头文件等 boilerplate 级失败才调用 infrastructure-fixer。

核心创新是把'专长'做成一等公民:智能体的异构性不再来自 persona 提示或底座差异,而来自其绑定的算法主题、标签集和专属 RAG 语料切片。由此团队不再是固定的 planner-coder-debugger 链,而是推理时由自评的主题匹配度动态组成——每个专家回答'任务是否匹配我的专长'和'我能否发起接力'两个问题后入队。第二个关键是确定性本地门控:修复版必须编译通过且公开样例通过数不少于本轮草稿($R_{after}.passed \geq R_{before}$),否则拒绝并回退;置信度只参与团队选择,不参与 keep/repair 判断,质量决策完全交给可观察的执行信号。此外共享草稿被顺序编辑,使占 88% 的多主题任务无需任何协调机制。预算上限为 3 名专家、8 步,无进展 streak 达 2 触发重路由、达 3 则停止。

方法步骤详情

第一步自评与组队:输入题面,11 个专家分别检索标签过滤后的 cp-algorithms 片段,输出 JSON(can_solve、is_relevant、confidence、reasoning),按标签重合、RAG 覆盖、置信度排序取前三;再用 can-start 探针确定 starter,其输出是窄的第一步子问题契约。第二步代码生成调用:输入题面、assigned subtask、starter contract、当前代码、上次交接、子任务图、gate 反馈、无进展 streak 与 RAG 上下文,输出完整 C++17 或 no_change。第三步执行:草稿在 ExecEval 沙箱对公开样例编译运行。第四步自检与交接:同一专家看到执行报告后返回 keep/repair/no_change、报告解读、stop 标志、next_agent、子任务完成清单与交接指令;若选 repair,修复版重跑公开样例,仅当编译通过且通过数非降才被接受,否则回退草稿。循环在显式 stop、无未用专家、8 步预算或无进展截止时终止,最后净化并按需调用 infrastructure-fixer。

技术新颖性

与 AutoAgents、AgentVerse 等在推理时凭任务说明生成智能体不同,MARS 的专家池是预定义的 11 个算法主题,专长由语料而非话术承载。与 GPTSwarm、Dynamic LLM-Agent Network 优化智能体间连接不同,MARS 的组织结构由主题匹配自然涌现:82.4% 的任务用满三人团队,但平均仅 1.35 名专家实际改码。与 REDCODER/RepoCoder 检索代码与文档不同,它检索理论推导,附录 E 显示 infrastructure-fixer 只在约 0.2% 的任务上做了实质修改,说明收益来自算法层面而非工程修补。与 AlphaCode 的大规模采样加过滤不同,MARS 是 prompt-only 的单草稿接力,每题约 40.3K tokens、16.6 次调用。'同轮非回归 gate + 每步确定性执行反馈'的组合,以及以自评主题胜任度组建团队,在多智能体竞赛求解中均属首次。

MARS relay pipeline. A task is routed from a pool of RAG-grounded topic specialists to a team of at most three agents. Each turn runs code generation, public-test execution, and self-check/handoff; repair code is rerun locally before the current code and relay packet move to the next specialist or final submission.
Figure 1: MARS relay pipeline. A task is routed from a pool of RAG-grounded topic specialists to a team of at most three agents. Each turn runs code generation, public-test execution, and self-check/handoff; repair code is rerun locally before the current code and relay packet move to the next specialist or final submission.
Specialist self-assessment prompt; the output gates inclusion in the relay team.
Figure 4: Specialist self-assessment prompt; the output gates inclusion in the relay team.
First-agent probe; sets the starter contract that is later passed to every relay step.
Figure 5: First-agent probe; sets the starter contract that is later passed to every relay step.
Example MARS trace for Codeforces 1620_B with three contributing specialists.
Figure 8: Example MARS trace for Codeforces 1620_B with three contributing specialists.

实验结果

主实验(Gemma 4,C++17,165 题,3 次运行):MARS 通过率 $0.624 \pm 0.006$,比 Direct 0.48、Single-RAG 0.53、Base relay 0.55 分别高 14.4、9.5、7.2 分;CodeSIM 复跑 0.731 但耗时 817.5 秒,MARS 以 3.3 倍更低墙钟成本、约 7 倍更小 token 方差逼近。该排序跨底座成立:Gemma 4 对 Single-RAG +9.5 分,Qwen3.5-27B +3.3 分,GPT-5.4-mini +13.9 分;Python 上 MARS 0.622 对 Direct 0.485。消融:去 RAG 掉 2.0 分至 0.604,Generalists 变体 0.615 但慢 31%。分层:Easy 近天花板(0.80-0.93),Medium 0.72 对 0.59,Hard 0.40 为基线 0.18-0.26 的两倍。中继:82.4% 任务用满三人团队,697 次自检中 38.4% 接受修复、4.4% 被 gate 回退;单主题题 0.719、多主题 0.612。

Main results. Pass rate is solved-task fraction. Time in sec, tokens in thousands and number of calls are per-task. All values averaged across 3 runs. CodeSIM* is our rerun on Gemma4.
Table 1: Main results. Pass rate is solved-task fraction. Time in sec, tokens in thousands and number of calls are per-task. All values averaged across 3 runs. CodeSIM* is our rerun on Gemma4.
Backbone and language transfer. The same 165 tasks and final harness as Table 1, using recorded model- and method-specific decoding.
Table 2: Backbone and language transfer. The same 165 tasks and final harness as Table 1, using recorded model- and method-specific decoding.
Ablations and protocol variants on Gemma 4. The generalist variant also disables RAG; the last two rows are the broader Base relay and Parallel ensemble comparisons from Table 1.
Table 3: Ablations and protocol variants on Gemma 4. The generalist variant also disables RAG; the last two rows are the broader Base relay and Parallel ensemble comparisons from Table 1.
Team-selection frequency per specialist.
Figure 2: Team-selection frequency per specialist.
Average pass rate by Codeforces difficulty tier.
Figure 3: Average pass rate by Codeforces difficulty tier.
查看结构化数据
任务指标本文基线提升
CodeContests 165 题(Gemma 4, C++17) pass rate(3 次运行平均) 0.624 ± 0.006 Direct 0.48 ± 0.02 +14.4 个百分点
CodeContests 165 题(Gemma 4, C++17) pass rate 0.624 Single-RAG 0.53 ± 0.01 +9.5 个百分点
CodeContests 165 题(Gemma 4, C++17) pass rate 与每题墙钟时间 0.624 / 244.3 s CodeSIM 复跑 0.731 / 817.5 s 通过率差 10.7 分,成本降至 1/3.3,token 方差小约 7 倍
CodeContests(GPT-5.4-mini, C++17) pass rate 0.503 ± 0.043 Single-RAG 0.364 ± 0.024 +13.9 个百分点
CodeContests(Gemma 4, Python/PyPy 3) pass rate 0.622 ± 0.015 Direct 0.485 ± 0.000 +13.7 个百分点
Hard 难度层(70 题,Gemma 4) pass rate 0.40 Direct 0.18(prompt-only 基线 0.18-0.26) 约 2.2 倍,优势扩大到 +0.14 以上
消融:去掉 RAG 挂载 pass rate 0.604 ± 0.007(完整版 0.624) MARS 完整版 0.624 ± 0.006 RAG 语料贡献 +2.0 个百分点

局限与改进

作者承认的局限:评测仅覆盖 165 道 CodeContests 题、3 个底座、2 种语言、1 个语料库和 Codeforces 标签体系;Python 复用与 C++ 相同的语料和索引,新语言需要重写提示、抽取、沙箱与基础设施;本地门控只拒绝同轮公开样例回归,看不见隐藏测试,也不比较不同专家之间的版本;所有生成代码都需要沙箱执行;CodeSIM 是唯一的 stage-aligned 对比,PairCoder 仅限 Python,其他基线(LDB、LPW、MapCoder、Xolver 等)因移植障碍缺席。我自己的观察:Hard 层 0.40 意味着六成难题仍解不出,与 CodeSIM 的差距集中在该层;同轮贪心 gate 可能锁定局部最优——一个'不回归'的小修可能阻止另一位专家的大重写;每题约 40K tokens、244 秒,相对直接提示贵约 22 倍 token,成本敏感场景不友好;团队选择依赖自评置信度,而底座越弱自评越不可靠,Qwen3.5-27B 上增益缩小到 3.3 分或与此有关。

独立分析的弱点

第一,贪心同轮 gate 短视:修复只与'本轮草稿'比较,无法跨专家比较版本,也看不见隐藏测试;论文数据显示 gate 回退了 4.4% 的自检提议,且专家可能用小修锁死局部最优。改进方向是维护多候选池,或引入自动生成的压力测试作为全局非回归信号。第二,Hard 题瓶颈:0.40 的通过率说明难题需要更长推理与更强搜索,而接力被 8 步预算与 3 人团队硬性限制;可为检测到的难题动态放宽预算。第三,公开样例信号弱:竞赛题公开样例通常很少,通过样例不等于算法正确,容易假阳性停止;可结合性质测试或随机对拍。第四,自评路由无校准:Parallel ensemble 用更宽松的 assessor 反而更差(0.56 vs 0.62)说明选择质量重要,但自评置信度本身未校准,弱底座上更不可靠;可用检索质量或历史成功率训练路由器。第五,语言扩展工程成本高:每个新语言都要重写提示、抽取、沙箱与基础设施,限制了即插即用。

未来方向

作者层面:扩展到更多目标语言(需各自的提示、抽取、沙箱与基础设施)、更大的语料库与更多底座,并移植更多 stage-aligned 基线。基于本文成果可延伸的方向:(1) 把自评路由升级为学习型路由器,用历史通过率训练专家选择策略,替代未校准的置信度;(2) 将确定性 gate 与自动压力测试生成结合,弥补公开样例稀少的缺陷,也部分逼近隐藏测试信号;(3) 在接力中允许跨专家候选比较与受控'重写',而非只许在上一棒基础上微修,突破局部最优;(4) 与 CodeSIM 式计划仿真结合——MARS 提供主题专长,CodeSIM 提供搜索深度,CodeSIM 在每个难度层都领先说明深度仍有价值,两者互补;(5) 把'主题对齐 MAS'范式推广到数学证明、系统设计等其他领域知识密集的生成任务,检验以语料切片定义专家身份的普适性;(6) 探索多专家并行编辑共享草稿或异步接力,压缩 244.3 秒的单题延迟。

复现评估

复现条件较好:源码开源于 GitHub(github.com/fckand/mars);语料 cp-algorithms 公开,嵌入模型 Jina Embeddings v2 开放权重;主底座 Gemma 4-31B-it 与 Qwen3.5-27B 开放权重,GPT-5.4-mini 结果依赖 API 且解码设置取自运行日志;CodeContests 165 题测试集与 ExecEval 沙箱公开。论文附录质量很高:附录 A 给出全部四个 prompt 模板,附录 B 给出 Codeforces 1620_B 的完整成功轨迹,附录 C 给出 MARS 与所有基线的伪代码,附录 D/E 给出 697 次自检决策与 infrastructure-fixer 的统计,附录 F 逐条说明每个基线未能移植的具体障碍。算力方面每题约 16.6 次 31B 级模型调用、40K tokens,165 题 × 3 次运行约数千次调用,单机多卡即可承担,中等规模实验室可复现;主要风险在评测脚手架与 CodeSIM/PairCoder 适配器的工程细节。