代码空间响应预言机:用大语言模型生成可解释的多智能体策略 Code-Space Response Oracles: Generating Interpretable Multi-Agent Policies with Large Language Models
LLM 写代码替代 PSRO 的深度 RL 预言机,生成可读可审计的多智能体博弈策略。
前置知识
策略空间响应预言机(PSRO)
PSRO 是 Lanctot 等人在 2017 年提出的多智能体博弈迭代求解算法。它维护一个策略集合 $P$,每轮先在由 $P$ 中策略对弈得到的经验元博弈上求解近似纳什均衡 $\sigma$,再让一个"最佳响应预言机"计算针对 $\sigma$ 的最优应对 $\pi^*=\arg\max_\pi \mathbb{E}_{\pi'\sim\sigma}[u(\pi, \pi')]$,将新策略并入集合后重复,直到策略集充分覆盖博弈空间。
CSRO 直接建立在 PSRO 框架之上,只把"最佳响应预言机"这一环节从深度强化学习替换为 LLM 代码生成。理解 PSRO 的迭代-求解-扩展流程是看懂 CSRO 算法伪代码的前提,否则无法理解为什么 prompt 的对手描述来自元均衡 $\sigma$。
纳什均衡与可利用度(Exploitability)
在二人零和博弈中,纳什均衡是双方都不能通过单方面改变策略提高收益的策略组。$\epsilon$-纳什均衡允许最多 $\epsilon$ 的单边改进。策略 $\pi$ 的(外)可利用度定义为 $\text{Expl}(\pi) = \max_{\pi'} u(\pi', \pi)$,越小说明越接近均衡。论文用到的 PopExpl 是对一个有限对手集合的最小收益,可视为近似的可利用度。
论文 Table 1/2 的核心指标就是 PopExpl,CSRO 的目标就是让 LLM 生成的代码策略在最优应对上尽可能不被吃干抹净,从而在博弈论意义上接近纳什均衡。如果不理解可利用度,就无法体会为什么 AlphaEvolve 在 RRPS 上把 PopExpl 压到 $25.2$ 比线性精化的 $37.7$ 更重要。
反事实遗憾最小化(CFR+)
CFR+ 是 Tammelin 在 2014 年提出的扩展式博弈求解算法。它通过迭代最小化每个信息集上的瞬时遗憾,再对历史策略做加权平均,保证平均策略收敛到纳什均衡。对两人零和博弈是当前事实标准的 tabular 求解器,常被用作基准。论文在重复 Leduc 上跑了 10000 轮 CFR+ 得到纳什基准对手。
Table 2 把 CSRO 与 CFR+ 直接对比:CSRO-AlphaEvolve 拿到 PopExpl $4.4 \pm 0.6$,逼近 CFR+ 的 $0.0$。理解 CFR+ 是什么、为什么它给出的 Nash 对手是衡量可利用度最严苛的对手,是看懂 Leduc 实验结果的关键。
代码作为策略(Code Policy)
传统 RL 策略是参数化的神经网络 $\pi_\theta(a|o)$。代码策略则是一段可执行程序(如 Python 函数),把观测映射到动作,可以是有状态的(带内部记忆)。这种表示天然具备可读性、可被静态审计、可被人在源码层面修改。CSRO 的核心就是用 LLM 的代码生成能力直接合成这类策略。
这是 CSRO 与 LLM-PSRO 之外大多数 PSRO 变体最根本的差异。如果不熟悉这种"策略=程序"的范式,就无法理解为什么 CSRO 的策略能跑出 32 个预测器集成、显式 EV 计算和"对手心理理论"等可审计模块。
大语言模型上下文学习与代码生成
现代 LLM(如 Gemini 2.5 Pro、Gemma 3)通过预训练掌握了大量编程模式和博弈策略知识。在 prompt 中提供游戏规则、API、对手代码/描述后,LLM 可直接生成可执行 Python 策略函数,且能在不更新权重的情况下利用 prompt 中的反馈迭代改进(如 LinearRefinement)或被外部调度器多线程变异(AlphaEvolve)。
CSRO 的所有创新都建立在 LLM 这两个能力之上:1) 一次性从 prompt 合成复杂程序;2) 根据元博弈收益反馈继续精化代码。理解"prompt=程序规约"和"评测=打分函数"是看懂算法 1 内外双循环的前提。
研究动机
标准 PSRO 及其衍生算法(Pipeline PSRO、α-Rank 等)在 Barrage Stratego、StarCraft 等复杂博弈中已经能算出近似纳什均衡,但它们依赖深度强化学习最佳响应预言机:训练一个 LSTM 策略网络 $\pi_\theta$,需要与环境进行百万到亿次对局才能收敛。这带来两个棘手问题:其一,训练出的策略是不可解释的"黑盒"神经网络,无法审计其内部决策逻辑,难以在高风险场景部署,也无法让研究者复用其中的策略知识;其二,样本效率极低,每一次策略扩展都几乎要从零训练。论文 Figure 1 左侧的元博弈收益曲线就体现了这一点——要把一个 RL oracle 练好需要相当多的迭代成本。这与传统软件工程中"人类写策略代码"的可读可改形成鲜明反差。
本文的目标是论文提出 Code-Space Response Oracles(CSRO),目标是把 PSRO 中的最佳响应计算从"在权重空间中数值优化"重写为"在程序空间中代码合成":用大型语言模型(具体使用 Gemini 2.5 Pro)作为代码生成器,给定博弈规则、API、对手策略描述后直接产出 Python 策略函数 $\pi \in \Pi_{\text{code}}$。新策略应天然可读、可审计、可在源码层面被人复核和修改,同时在博弈论指标上要接近传统深度 RL oracle 甚至在某些场景超越它。
与已有工作不同的是,已有的相关工作 Bachrach 等人的 LLM-PSRO 仅做了零次"best-of-N"开环采样,没有迭代精化,也没有与外部标准对手群体做对比;Gemp 等人把 LLM+PSRO 用于自然语言对话博弈,但产物是 prompt 而非可执行代码;Kempinski 等人的 PSROLM 同样把 LLM 放在外环,但只生成动作而非程序,且没有内层反馈循环。CSRO 的独特定位在于:1) 用 LLM 输出真正可读的 Python 代码而非自然语言;2) 在外环(跨迭代)之上又加了一个内层反馈循环(LinearRefinement 或 AlphaEvolve 进化搜索)来战术硬化候选策略;3) 在 RRPS 和重复 Leduc 两个有外部标准对手群体的标准基准上与 PSRO-IMPALA、CFR+、大模型 LLM Agent 等强基线做严格对比,验证可解释性不是以性能为代价换来的。
核心方法
CSRO 的整体思路是"以 LLM 代替深度 RL 网络",把 PSRO 框架中那个吃环境的最佳响应预言机变成"吃 prompt 出代码的程序员"。直觉上,与其让一个神经网络从几百万次对局里慢慢学到能写循环和加权平均的策略,不如直接把博弈规则、API 文档和对手源码塞给一个已经会写代码的 LLM,让它一次性合成策略函数。技术路线沿 PSRO 的迭代骨架展开:每轮先在策略集 $P$ 的元博弈收益矩阵 $U$ 上求纳什混合 $\sigma$,再构造一个把 $\sigma$ 对应的活跃对手以代码或自然语言描述形式注入的 prompt,调用 LLM 产生新策略 $\pi'$,然后用一个内层循环(评测-反馈-LLM 再生成)做战术硬化,最后把 $\pi'$ 并入 $P$。三种内层机制 ZeroShot / LinearRefinement / AlphaEvolve 分别对应"一次生成"、"单线程迭代修复"和"分布式进化搜索",覆盖从最便宜到最鲁棒的光谱。
CSRO 的核心创新是双重:1) 把最佳响应计算"代码化"为程序合成任务,使策略从 $\theta \in \mathbb{R}^d$ 升级为可读 Python 函数;2) 在 PSRO 外环之上设计内层精化循环(Algorithm 1 第 9-14 行),把一次性 LLM 采样扩展为可基于元博弈收益 $u$ 持续优化的搜索过程。与 LLM-PSRO 相比,CSRO 不再是被动的 best-of-N,而是用 AlphaEvolve 等进化框架主动驱动;与 PSRO-IMPALA 相比,最佳响应不再是反向传播更新权重,而是 prompt + 评测 + 重新生成。本质区别在于"优化对象"从连续权重空间换成了离散的程序空间,配合 LLM 的代码先验让搜索非常高效(RRPS 单次实验只需 20 次外层迭代 ×10 次内层精化)。
方法步骤详情
按 Algorithm 1 严格描述。输入是对称零和博弈 $G$、最大外层迭代数 $K=20$、最大内层精化预算 $M=10$。步骤 1:初始化策略集 $P \leftarrow \{\pi_{\text{initial}}\}$,初始策略可以是均匀随机或任务相关基线。步骤 2-3:第 $k$ 轮先在 $P$ 上对所有 $(\pi_i, \pi_j)$ 对跑若干局得到收益矩阵 $U \in \mathbb{R}^{|P|\times |P|}$。步骤 4:在经验元博弈 $U$ 上求对称纳什均衡混合 $\sigma$(论文用线性规划或 regret minimization)。步骤 5:`construct_prompt` 根据 $\sigma$ 选择当前活跃对手(Top-5 或最小支持过滤),将对手源码或 LLM 生成的策略描述、博弈规则、策略函数 API 规范、"请写一个能赢的最佳响应"的指令拼成 prompt。步骤 6:`llm_oracle(prompt)` 调用 Gemini 2.5 Pro 产生候选代码策略 $\pi'$。步骤 7:`evaluate_policy` 在 $\sigma$ 下跑若干局评估 $\pi'$ 的期望收益 $u$。步骤 8-14:进入内层精化循环——ZeroShot 直接跳过;LinearRefinement 若 $u<0$ 则把 $u$ 写回 prompt 让 LLM 改进代码,重评测,保留更优版本,最多 $M$ 次;AlphaEvolve 则把 $\pi'$ 投入分布式进化集群,$\mathbb{E}_{\pi'\sim\sigma}[u(\pi, \pi')]$ 作为适应度,多线程变异+聚类+高质量重采样。步骤 15:把精化后的 $\pi'$ 并入 $P$。步骤 16-17:循环 $K$ 次后返回最终策略集 $P$ 和均衡混合 $\sigma$。整条流水线在 RRPS 上一轮只需 1 次 LLM 调用(ZeroShot)或 $M+1$ 次(LinearRefinement),相比 27B Gemma 3 LLM Agent 每手 1000 次调用,效率优势巨大。
技术新颖性
技术新颖性体现在三点。第一,把"策略=程序"的范式与 PSRO 严格对齐,提出 Algorithm 1 这一统一骨架,使生成代码既可被 LLM 端到端合成又能被人在源码层审计。第二,跨迭代战略适应(Cross-Iteration Adaptation)与迭代内策略精化(Intra-Iteration Refinement)的双层设计:前者通过每轮重算 $\sigma$ 和重写 prompt 把元博弈拓扑信息传给 LLM,后者用 LinearRefinement 或 AlphaEvolve 主动优化单次生成的代码,两者解耦且可叠加。第三,prompt 构造中"代码 vs 自然语言描述"、"Top-5 vs 最小支持"两种输入/过滤模式的系统消融,发现了一个反直觉结论:ZeroShot 用描述比用源码更好(Aggregate Score $63.5$ vs $-54.3$),但在线性精化下源码输入占优($122.1$ vs $67.7$),并给出基于"复杂度匹配"的解释。这些细致对比在 LLM-PSRO 等前期工作中完全没有。
实验结果
论文在两个基准上验证 CSRO,所有数字均为 $K=20$ 轮后的元均衡表现。RRPS(Table 1)方面,CSRO-AlphaEvolve 的 PopExpl 最低为 $25.2 \pm 20.3$,AggScore $25.4 \pm 21.6$;CSRO-LinearRefinement (code) 在 Top-5 过滤下取得最高的 AggScore $122.1 \pm 9.8$,PopReturn $159.8 \pm 7.7$,PopExpl $37.7 \pm 10.6$,与 27B Gemma 3 LLM Agent 的 AggScore $126.0$ 基本持平,且 PopExpl 显著低于该基线的 $67.2$;CSRO-ZeroShot (desc.) 拿到 AggScore $63.5 \pm 11.4$;作为消融,ZeroShot 无对手信息的变体 PopExpl 飙到 $614.2 \pm 60.8$,AggScore 跌至 $-478.9 \pm 70.2$,证明对手条件化是 prompt 的关键。Leduc(Table 2)方面,CSRO-AlphaEvolve 的 PopReturn $49.3 \pm 3.7$、PopExpl $4.4 \pm 0.6$、AggScore $44.9 \pm 4.1$,全面优于 PSRO-IMPALA(PopExpl $58.4 \pm 3.3$),PopExpl 与 CFR+ 的 $0.0$ 已非常接近;CSRO 在 AlwaysCall 对手上的 PopReturn 达 $110.3 \pm 9.7$,远超 PSRO-IMPALA 的 $57.7 \pm 3.3$ 和 CFR+ 的 $62.1 \pm 0.8$。Figure 1 可视化了 RRPS 单次运行中元博弈收益、均衡解和 20 轮迭代过程中的 RPS 群体回报曲线;Figure 2 把所有 CSRO 变体在三个指标上的训练过程并列展示,可清晰看出 AlphaEvolve 在 PopExpl 上的快速下降和 LinearRefinement 在 AggScore 上的稳定领先。
查看结构化数据
| 任务 | 指标 | 本文 | 基线 | 提升 |
|---|---|---|---|---|
| Repeated Rock-Paper-Scissors (PopExpl, 越低越好) | Within Population Exploitability | CSRO-AlphaEvolve: 25.2 ± 20.3 | LLM Agent 27B: 67.2;PSRO-IMPALA: 423.2 ± 28.0;QL(R=10): 8.6 | 相对 PSRO-IMPALA 降低约 16.8 倍,相对 27B Gemma 3 LLM Agent 降低约 2.7 倍;略逊于 Q-learning 基线(8.6)但 PopReturn 高出两个数量级 |
| Repeated Rock-Paper-Scissors (AggScore, 越高越好) | Aggregate Score | CSRO-LinearRefinement (code) Top-5: 122.1 ± 9.8 | LLM Agent 27B: 126.0;LLM Agent 70B (Chinchilla, 上轮文献): 155.2;ContRM: 148.5;PSRO-IMPALA: -532.1 | 与 27B Gemma 3 LLM Agent 持平,差 70B Chinchilla Agent 约 21%;远胜 PSRO-IMPALA 约 654 分 |
| Repeated Rock-Paper-Scissors (PopReturn, 越高越好) | Population Return | CSRO-LinearRefinement (code) Top-5: 159.8 ± 7.7 | LLM Agent 27B: 193.2;LLM Agent 70B: 201.0;PSRO-IMPALA: -108.9 | 约为 PSRO-IMPALA 的 +268.7 分(符号反转),落后 27B/70B LLM Agent 约 17-21% |
| Repeated Leduc Hold'em (PopExpl) | Within Population Exploitability | CSRO-AlphaEvolve: 4.4 ± 0.6 | CFR+: 0.0 ± 0.0;PSRO-IMPALA: 58.4 ± 3.3 | 约为 CFR+ 基准的 4.4 倍,但比 PSRO-IMPALA 低 13.3 倍,已经接近理论最优 |
| Repeated Leduc Hold'em (AggScore) | Aggregate Score | CSRO-AlphaEvolve: 44.9 ± 4.1 | CFR+: 39.8 ± 0.3;CSRO-LinearRefinement: 34.0 ± 4.3;PSRO-IMPALA: -45.0 ± 10.1 | 比 CFR+ 高 5.1 分(约 13%),比 PSRO-IMPALA 高 89.9 分,验证 AlphaEvolve 在小规模博弈中也能超过 tabular 求解器 |
| Repeated Leduc Hold'em vs AlwaysCall (PopReturn) | Population Return | CSRO-AlphaEvolve: 110.3 ± 9.7 | CFR+: 62.1 ± 0.8;PSRO-IMPALA: 57.7 ± 3.3 | 约为 CFR+ 的 1.78 倍、PSRO-IMPALA 的 1.91 倍,体现 LLM 善于发现可被剥削的对手模式 |
局限与改进
作者在文末明确承认三点局限。其一,CSRO 的质量直接受限于底层 LLM 的代码能力与 prompt 设计,prompt 写得不好或模型本身能力不足就会产出语法错误或低效代码,需要额外的错误处理和重生成逻辑兜底;论文所有结果都依赖 Gemini 2.5 Pro,迁移到更小模型是否仍可工作并未验证。其二,虽然省去了 RL 海量环境交互,但引入了大量 LLM API 调用开销,对 LinearRefinement 是 $K\times(M+1) = 20\times 11 = 220$ 次/实验,对 AlphaEvolve 则需在多线程中持续采样,部署成本不容忽视。其三,可扩展性是开放问题:在 Stratego、StarCraft 这类高维观测博弈中如何把复杂状态和对手信息压缩进有限上下文是巨大工程挑战。我自己观察到的额外问题:1) Top-5 vs 最小支持过滤的结论可能与具体游戏收益分布强相关,泛化性需要更多博弈验证;2) 评估对手群体(43 个 RRPS bot)大多是 hand-crafted 启发式,可能与 LLM 预训练知识重叠,方法在真正未见过的强 RL 对手上的稳健性需要补充实验;3) AlphaEvolve 虽效果最强,但其实现复杂度和算力代价(需要分布式调度)远超 LinearRefinement,论文未给出详细的成本-性能曲线。
独立分析的弱点
独立分析论文的弱点有以下几条。第一,prompt 依赖性极强:Table 1 末尾的 ZeroShot (no opponent input) 变体 PopExpl 飙到 614.2,说明 prompt 中对手信息是几乎唯一驱动策略质量的来源,这意味着 prompt 工程本身就是隐形的"超参数",论文虽然消融了"代码 vs 描述"和"Top-5 vs 最小支持"两个轴,但并未给出 prompt 模板敏感性测试,也没有公布完整 prompt 文本(仅在 Supplementary A.2 简述),复现时一个标点改动可能让结果天差地别。改进方向:开源全部 prompt 模板 + 加入自动 prompt 优化(DSPy、TextGrad 之类)。第二,CSRO 评估的"对手群体"偏向 hand-crafted 启发式,对 LLM 预训练数据而言可能是"已知分布",且 RRPS bot 大多记忆短、可被简单模式匹配破解,论文未能验证在真正的 SOTA 强 RL 对手(AlphaStar 级)面前的性能。改进方向:增加 PSRO 自博弈训练出的强神经网络策略作为评估对手。第三,AlphaEvolve 的复现门槛过高,论文只给一句"按 Novikov 等人 2025 的方法"就带过,没有公布种群规模、变异温度、聚类阈值等关键超参,导致外部研究者难以复现 AlphaEvolve vs LinearRefinement 的对比。改进方向:开源 AlphaEvolve 配置和种子。第四,论文完全没有对 prompt 注入攻击或策略注入攻击的鲁棒性测试——若评估群体里混入恶意 bot(返回伪造收益或带后门的代码描述),CSRO 可能直接生成有缺陷的代码。改进方向:加入对抗性评估。第五,实验仅在 5 个 seed 上取均值(RRPS)和 3 个 seed(Leduc),统计功效有限,特别是 AlphaEvolve 的 PopExpl 标准差达到 20.3,置信区间已经接近均值。
未来方向
作者明确提出的方向是"扩展到 Stratego、StarCraft 等大状态空间博弈",核心挑战是上下文长度内的状态-对手信息压缩。基于此我可以延伸出几条更具操作性的方向:1) 引入检索增强生成(RAG)让 LLM 在生成策略时按需查询大型博弈状态库和历史对局片段;2) 把 LLM 的精化反馈与正式博弈论工具(虚拟对局、最优响应求解器)结合,做到混合 oracle——容易的情形由 LLM 代码生成,难的情形回退到 CFR+;3) 在多智能体非零和或合作博弈中探索 CSRO,因为目前所有实验都是二人零和;4) 研究代码策略的程序修复(program repair)技术,让 LLM 专门针对编译错误、运行时异常做自动调试,把论文提到的"错误处理和重生成逻辑"系统化;5) 把 AlphaEvolve 升级为可提示进化的版本,让用户用自然语言指定"既要可解释也要高回报"等多目标约束;6) 探索用更小的开源模型(如 Qwen-Coder、DeepSeek-Coder)替代 Gemini 2.5 Pro 以降低部署成本,并研究模型规模与策略质量的缩放规律。
复现评估
复现难度评估为中等偏上。论文中具体实现细节分散在多处:算法伪代码(Algorithm 1)描述了高层流程,博弈环境基于开源 OpenSpiel(Lanctot et al., 2019),评估对手群体中 RRPS 的 43 个 bot 来自国际 RPS 竞赛(Billings, 2000a,b),Leduc 评估用的 CFR+ 来自 Tammelin (2014) 10000 轮迭代结果——这些组件均开源。但论文没有给出 CSRO 框架本身的代码仓库链接,prompt 模板、构造逻辑、Top-5 过滤阈值等仅在 Supplementary A.2 简略提及。算力上,LinearRefinement 一次完整实验约需 $K\times(M+1)=220$ 次 Gemini 2.5 Pro 调用,AlphaEvolve 还需要分布式调度集群,单卡 4090 显然不够;外部研究者若想完整复现 Table 1/2 大约需要数千美元级 API 费用和几天到一周的算力。基线方面,PSRO-IMPALA 用 IMPALA 算法 + LSTM 网络,配置在 Supplementary A.1.1;Gemma 3 27B LLM Agent 与 ContRM、QL(R=10) 的实现见 Lanctot 等人 2023 的原论文。综合判断,组件层面可复现,但完整 Table 1/2 的数值复现需要 LLM API 访问、AlphaEvolve 工程实现和精心的 prompt 调优,对非 Google 研究者来说门槛较高。
论文图表