跳到正文
原文
Hacker News· guregodevo·· 7 天前精选AI 评分80

Qwen3.8-27B模型组击败Fable 5

Memdoor: A team of 5 Qwen3.8-27B models beats Fable 5 on LiveCodeBench Hard

正文 · AI 翻译

一个用于编程问题的多智能体框架,以 Memdoor 工作流的形式编写。五个角色(规划者、两个创意者、求解者、管理者)和一个维修工各自从一个全新的上下文开始,并且仅通过磁盘上的文件进行交流。一个运行示例的 Shell 脚本决定成功与否,而不是一个模型。这是 GVS5H(Lee,2026:五个 Qwen3.8-27B 模型在 LiveCodeBench Hard 上匹配 Fable 5)的方法。

使用作者的精确提示在 Qwen3.8-27B 上重新构建,他们的循环在第一个十个 LiveCodeBench Hard 问题上的平均分为 9.8 分(满分 10 分),而他们的框架为 9.6 分,Fable 5 单独为 8.0 分(下文,每次运行都已发布)。

编码者根据方法描述(2026-10-25)自己编写了这些文件。没有人手工编写它们。

作者十个(2026-10-31)的五个循环。

GVS5H 自己的框架,作为 Memdoor 工作流在相同模型上重建:Qwen3.8-27B,128K 回复限制,作者的提示和循环。他们 LiveCodeBench Hard 列表的前十个问题,五个循环,每个程序都在所有公共和隐藏测试中用他们的修正评分器进行评分。

pass Memdoor 工作流 作者的 27B 框架 Fable 5 单独
1 10 / 10 9 7
2 10 / 10 10 8
3 10 / 10 10 10
4 10 / 10 9 8
5 9 / 10 10 7
平均 9.8 9.6 8.0

作者的列是他们仓库的重新评分结果文件(q38_multiagent_pN,fable5_single_pN),他们论文中的数字。 bench/results/parity-5pass/ 包含所有 50 运行:每次请求和回复,程序,评分器的完整输出,每次调用的成本和服务它的主机,以及每次不计数的尝试。 49 个解决了 50 个;50 次运行花费 $35.79(15.3M 输出 token),$38.77 包括被时钟切掉的 16 次尝试、用于修复而停止或暂停的尝试。

注意:十个问题,每个问题五个循环,而不是作者的 100 个。比赛日期从 2025 年 3 月 29 日到 4 月 6 日,模型可能在训练中看到了这些问题:污染不能排除。Fable 5 的列是作者文件中每个问题的一次调用;它没有在这个框架中运行。循环只看到公共样本;分数是隐藏测试。一次运行平均花费 40 分钟的模型时间(最长的 4 小时)和 $0.39。所有在 OpenRouter 上,不是本地机器;Modal 没有发布其精度。 运行脚本中的本地路径和四个轨迹回溯中显示管理者读取了 <scratch> 和 $HOME;运行中没有任何其他内容被编辑。

与作者的相同。 每条消息,字节精确对应: lib/test_parity.py 运行他们的 multiagent_solve 和我们的工作流与一个脚本模型进行比较,并比较每个请求(四种情况,所有情况都相同;一个字符的变化使它们不同)。温度(计划 0.3,创意 0.4,管理和维修工 0.2),top_p 0.95 和 top_k 20(他们 vLLM 从模型自己的配置中应用的),128K 限制,最多 10 轮,一个切掉维修工的总结,以及一个没有文本的回复由其推理回答。

不同。 主机。他们的 vLLM 是 FP8。 ours 是 OpenRouter,按 Modal、CoreWeave、Parasail、Wafer 的顺序请求,直到 Modal 减慢到 14 token/s,然后只有 FP8 主机(Wafer、Parasail、CoreWeave): 203 个调用由 Modal 服务,27 个由 CoreWeave 服务,115 个由 Wafer 服务,每个 FP8 顺序的调用都由 Wafer 服务。三个运行在运行中途移动,他们的完成步骤被保留(log/host-switch.txt)。

它付出了什么。问题文本中的不匹配是:我们最初的版本在每个问题周围编写自己的任务文件,而 27B 从中计划的比从作者精确的 LiveCodeBench 文本(arc196_c 的计划:0 对 2 对 2)更糟。四个 Memdoor 变更让工作流询问它们的 harness 询问什么:当任务没有编写文本时,它用模型的推理回答,top_p/top_k在一个模型行上,mark_cutoff用于在帽子处被截断的回复,以及一个在其自己的四小时时钟上运行的调用。

它在哪里失去了。两次,作者循环中的相同两个差距:

  • Pass 5, abc399_e (44 个中的 32 个隐藏):第一轮的程序是正确的;经理发明了一个具有错误预期答案的反例,团队重写了它,并且新程序通过了样本,这些样本没有覆盖该情况。
  • Pass 4, arc196_c 和 arc196_d:一个通过每个隐藏测试的程序被后续的回合覆盖,因为经理没有说完成;两者都在循环结束之前得到了正确的程序(arc196_d 在第 8 轮,arc196_c 通过最后的调用),在 $3.44 和 $4.24,两次最昂贵的运行。

两者都可以在不改变方法的情况下修复(检查经理的反例与小输入上的暴力破解;保留通过样本的最后一个程序)。两者都不在这些数字中。

运行它

curl -fsSL https://memdoor.ai/install.sh | bash
memdoor connect openrouter                 # or anthropic, openai, gemini, chatgpt
# or no key at all: memdoor connect local   # Ollama, llama.cpp, vLLM, LM Studio on this machine
git clone --depth 1 https://github.com/guregodevo/memdoor

mkdir -p ~/.memdoor/workflows
cp -r memdoor/examples/workflows/team-solve ~/.memdoor/workflows/   # the library: any project sees it
mkdir my-problem && cd my-problem
cp -r ../memdoor/examples/workflows/team-solve/sample/* .          # task.md + tests/1.in … 5.out
memdoor workflow run team-solve --wait   # progress on stderr, exit 0 when every sample passes

/workflow 在 memdoor tui 中绘制相同的运行。对于您自己的问题,替换 task.md 并在旁边放置成对的 tests/N.in / tests/N.out 文件。程序是 solution.py,从 stdin 读取,与样本使用 diff 进行比较。它需要 Python 3 和 bash。为了将其与一个存储库保持在一起,将文件夹复制到该项目的 .memdoor/workflows/ 中。项目的副本获胜。

步骤不命名任何模型。无论 /model 固定到什么答案,都包含一个本地模型(memdoor connect local 用于 Ollama, llama.cpp, vLLM, LM Studio 或 janis:如何连接一个)。

它是如何工作的

plan ──┬── ideate-a ──┬── solve ── test ── review ── repair ── verify
       └── ideate-b ──┘
步骤 类型 读取 写入
plan 代理 task.md plan.md,以及一个具有每个 ideator 一个锚的 notes.md 分类账
ideate-a, ideate-b 代理,并行 task.md, plan.md, notes.md 在其自己的锚处的一个提议:A 最直接的证明算法,B 来自不同技术系列的另一个
solve 代理 两个提议 notes.md, solution.py 中的决定
test 命令 tests/ test-output.log, test-status.txt(从不失败运行)
review 代理 捕获的测试输出,不是模型的断言 review.md, notes.md 中的修复说明
repair 代理 经理的说明 一个固定的 solution.py,或者如果样本通过则为空
verify 命令 tests/ final-test-output.log;非零退出失败运行

每个代理提示都说“新鲜上下文,读取文件,不要依赖聊天”。论文将这种分类账纪律归功于收益。有一个修复回合,没有人类门。最后一步是整个裁决:

type: command
requires:
  - table_pattern: repair
command: |
  check=.memdoor/workflows/team-solve/check-samples.sh
  [ -f "\(check" ] || check="\)HOME/.memdoor/workflows/team-solve/check-samples.sh"
  bash "$check" > final-test-output.log 2>&1
  result=$?
  cat final-test-output.log
  exit "$result"

每一步都是一个 steps/ 中的 YAML 文件,格式为 mario,引擎的下面。requires: 是 DAG。改变一个角色意味着改变它的提示。

第一轮发现了什么

样本:计算字符串中 {a, b, c} 上具有每个字母相等计数的子字符串,最多 200,000 个字符。在默认的梯子上通过 OpenRouter 运行:

  • 8 个中的 8 个步骤,5 个中的 5 个样本。求解器采用了 ideator A 的前缀状态方法,O(N) 并带有 (a−b, a−c) 对的字典。在 300 个随机字符串上的暴力破解之后没有发现不匹配,并且在 N = 200,000 时运行时间为 0.04 s。经理没有发现可以修复的东西。
  • 一个 ideator 的提供者在中回答时掉了流。编码人员编写了 max_retries: 0,所以运行在那里死亡。代理步骤现在携带 max_retries: 1,并且运行使用 --partition 恢复,它保持了规划器和另一个 ideator 的工作。
  • 构思者提示编写者命名的样本方法(A:一个流式前缀状态计数,B:排序前缀状态),这会误导任何其他问题的方向。他们现在要求A提供一个最直接的可证明算法,并要求B提供一个来自不同技术家族的算法(2026-10-28).
  • 第一次尝试在0秒内每一步都失败了,因为“没有名为编写者的代理”:一个运行时只在其自己的工作空间中查找其代理。这个问题在当天修复了网关(v1.692.0)。

来源:Hacker News · github.com

00