ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

MultiAgentBench 论文精读:用 MARBLE 复现 LLM agents 协作与竞争评测,TaoToken 统一 Key 跑通多模型对照

MultiAgentBench 论文精读:用 MARBLE 复现 LLM agents 协作与竞争评测,TaoToken 统一 Key 跑通多模型对照 1. 从论文到本地跑通MultiAgentBench 到底在测什么MultiAgentBench 是一套专门用来评估 LLM agents 协作与竞争能力的基准配套框架叫 MARBLEMulti-agent cooRdination Backbone with LLM Engine。它要解决的问题很直接以前的 AgentBench、GAIA、ToolBench 这些基准测的都是单个 agent 的推理和工具调用但真实场景里往往是多个 agent 一起干活——有的合作写提案有的在狼人杀里互相骗。单 agent 基准根本测不出这种动态。MultiAgentBench 的核心设计有三块。第一多领域覆盖包含科研协作、Minecraft 建造、数据库错误分析、协同编程四个合作类任务外加狼人杀和讨价还价两个竞争类任务。第二它不只算任务完成度还用基于里程碑的 KPI 来衡量协作质量——每个任务被切成若干里程碑一个 LLM 检测器持续判断哪些里程碑达成了、是谁贡献的。第三它支持四种通信拓扑星型、树型、图型、链型和四种规划策略直接提示、CoT、小组讨论、认知自进化规划。论文里几个值得记住的结论gpt-4o-mini 拿到最高平均任务得分图结构在研究场景中协调效果最好认知规划把里程碑达成率提升了约 3%小组讨论反而在所有指标上垫底作者猜测是规划组太大拖了后腿。这些结论你想在本地复现就需要一套能切换模型、切换拓扑、切换规划策略的实验环境。问题来了MARBLE 要跑多模型对照你得同时接 OpenAI、Together AI 等好几家 API每家的 Key、Base URL、模型名格式都不一样。我试过手动改环境变量切来切去跑一组对照实验光配置就耗掉半小时。下面这套流程用 TaoToken 统一 Key 来管多模型把配置成本压到最低。2. 前置准备TaoToken 统一 Key 与 MARBLE 环境搭建MARBLE 的代码在 GitHub 上公开ulab-uiuc/MARBLEclone 下来之后你会发现它依赖函数调用能力所以选的模型必须支持 function calling。论文里用了 Meta-Llama-3.3-70B、Meta-Llama-3.1-70B-Instruct-Turbo、Meta-Llama-3.1-8B-Instruct-Turbo、GPT-3.5-turbo-0125 和 GPT-4o-mini 五个模型。你自己复现时不一定要全跑选两三个做对照就够。关键问题是这些模型分散在不同供应商。OpenAI 的走官方 APILlama 系列论文里走的是 Together AI。如果你要加 DeepSeek 系列做扩展实验又是另一个端点。TaoToken 的作用是把这些统一到一个 API 入口你只需要一个 Key通过改 model 参数就能切换底层模型。先去 TaoToken 控制台创建一个 API Key。地址是 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keysutm_campaignrewrite 登录后在 API Keys 页面点创建复制出来的 Key 形如sk-xxxxxxxx。这个 Key 同时能调 GPT 系列、Claude 系列和主流开源模型省掉你分别注册多家平台的麻烦。拿到 Key 之后在 MARBLE 项目根目录建一个.env文件。MARBLE 的配置读取逻辑在marble/configs/下面不同场景有各自的 config 文件但 API 相关的环境变量是全局的。你需要设置三个核心变量Base URL 指向 TaoToken 的 API 端点API Key 填你刚创建的模型名按场景 config 里的字段来。# .env 文件放在 MARBLE 项目根目录 OPENAI_API_KEYsk-你的TaoToken密钥 OPENAI_BASE_URLhttps://taotoken.net/api # 如果 MARBLE 代码里用的是 openai 库的 client 初始化 # 它会自动读取上面两个环境变量这里有个坑要注意MARBLE 部分模块可能硬编码了https://api.openai.com/v1你需要全局搜一下base_url或api_base关键字把它改成从环境变量读取。通常在marble/agents/或marble/llm/目录下的 client 初始化代码里。改完之后所有走 OpenAI 兼容接口的模型调用都会经过 TaoToken。模型清单方面你需要在场景 config 里指定每个 agent 用哪个模型。以研究场景为例config 文件里会有类似agent_model: gpt-4o-mini的字段。如果你想做多模型对照就复制一份 config把模型名换成Meta-Llama-3.3-70B或DeepSeek系列。TaoToken 支持的模型 ID 可以在模型对话页面查到https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_contentchatutm_campaignrewrite 页面上能直接切换模型看效果确认哪个模型 ID 可用再写进 config。Python 环境用 3.10 以上依赖装法git clone https://github.com/ulab-uiuc/MARBLE.git cd MARBLE python -m venv venv source venv/bin/activate # Windows 用 venv\Scripts\activate pip install -r requirements.txt如果 requirements 里有openai库确认版本在 1.0 以上因为新版才支持base_url参数。装完后跑一个最小连通性测试确认 Key 和 Base URL 配对了。3. 可复制配置环境变量、模型清单与运行命令这一节给你一份能直接抄的配置。MARBLE 的配置分两层全局环境变量管 API 接入场景 config 管 agent 角色、拓扑结构和规划策略。先看全局环境变量。除了上面.env里的两个变量如果你用 python-dotenv 加载在入口脚本里加一行from dotenv import load_dotenv; load_dotenv()。有些 MARBLE 版本用的是OPENAI_API_BASE而不是OPENAI_BASE_URL两个都设上最保险# .env 完整版 OPENAI_API_KEYsk-你的TaoToken密钥 OPENAI_BASE_URLhttps://taotoken.net/api OPENAI_API_BASEhttps://taotoken.net/api接下来是场景 config。MARBLE 的 config 通常是 JSON 或 YAML 格式放在marble/configs/下。以研究场景为例一份精简的 config 长这样{ scenario: research, coordination_protocol: graph, planning_strategy: cognitive_evolving, max_iterations: 5, max_communication_iterations: 5, agents: [ { name: planner, role: project_manager, model: gpt-4o-mini, max_token_num: 1024, temperature: 0.7, top_p: 1.0 }, { name: researcher_a, role: domain_expert, model: gpt-4o-mini, max_token_num: 1024, temperature: 0.7, top_p: 1.0 }, { name: researcher_b, role: technical_specialist, model: Meta-Llama-3.3-70B, max_token_num: 1024, temperature: 0.7, top_p: 1.0 } ], graph_edges: [ [planner, collaborates, researcher_a], [planner, collaborates, researcher_b], [researcher_a, collaborates, researcher_b] ] }这份 config 里coordination_protocol可选star、tree、graph、chainplanning_strategy可选vanilla、cot、group_discussion、cognitive_evolving。你要复现论文里“图结构最好”的结论就把 protocol 设成graph要对比认知规划的效果就把 strategy 在cot和cognitive_evolving之间切换。模型清单方面TaoToken 上可用的模型 ID 直接写进model字段。做多模型对照时建议固定其他变量只改一个 agent 的模型这样能隔离出模型能力的影响。比如上面 config 里 researcher_b 用 Llama其他用 gpt-4o-mini跑完对比 researcher_b 的 KPI 贡献。运行命令# 单场景运行 python -m marble.run --config marble/configs/research_graph_cognitive.json # 批量对照实验写个 shell 脚本循环 for model in gpt-4o-mini Meta-Llama-3.3-70B DeepSeek; do sed s/\model\: \gpt-4o-mini\/\model\: \$model\/g \ marble/configs/research_graph_cognitive.json /tmp/config_$model.json python -m marble.run --config /tmp/config_$model.json \ --output results/research_$model.json done跑之前确认max_iterations别设太大。论文消融实验显示Minecraft 场景迭代到 7 次时任务和协调得分最高到 10 次反而急剧下降20 次任务分回升但协调分不再涨。研究场景论文设的是 5 次你复现时保持 5 就行别为了“跑充分”调到 20那样反而引入通信开销导致协调退化。4. 验证请求与结果校验确认多模型对照跑通配置写完先做一次最小验证确认请求真的打到了 TaoToken 并且模型返回正常。MARBLE 跑起来后会在控制台打印每个 agent 的通信日志你重点看两个东西一是请求有没有报错二是返回的 JSON 里有没有choices字段。最直接的验证方式是单独调一次 API不经过 MARBLE 的复杂流程from openai import OpenAI import os from dotenv import load_dotenv load_dotenv() client OpenAI( api_keyos.getenv(OPENAI_API_KEY), base_urlos.getenv(OPENAI_BASE_URL) ) resp client.chat.completions.create( modelgpt-4o-mini, messages[{role: user, content: 回复 OK 两个字母}], max_tokens10 ) print(resp.choices[0].message.content)如果打印出OK说明 Key 和 Base URL 没问题。换成Meta-Llama-3.3-70B再跑一次确认开源模型也能通。这一步过了再跑 MARBLE 全流程。MARBLE 跑完后会在results/目录生成 JSON 结果文件。结果里包含每个 agent 的里程碑贡献数n_j、总体 KPI、任务得分 TS、通信得分 C_score、规划得分 P_score 和协调得分 CS。校验时按论文公式对一遍import json with open(results/research_gpt-4o-mini.json) as f: result json.load(f) # 论文公式KPI_overall (1/(N*M)) * sum(n_j) N len(result[agents]) M result[total_milestones] n_j_sum sum(a[milestones_contributed] for a in result[agents]) kpi_calc n_j_sum / (N * M) print(f论文公式算出的 KPI: {kpi_calc:.4f}) print(f框架报告的 KPI: {result[kpi_overall]:.4f}) # 两者应该一致不一致说明里程碑检测或统计逻辑有问题协调得分 CS 是 C_score 和 P_score 的平均值也校验一下cs_calc (result[communication_score] result[planning_score]) / 2 print(fCS 校验: {cs_calc:.2f} vs {result[coordination_score]:.2f})多模型对照的结果对比建议拉个表格。把每个模型在每个场景的 TS 和 CS 填进去看趋势是否符合论文结论。比如论文说 gpt-4o-mini 在研究场景 TS 是 84.13%你跑出来如果差太多比如低于 70%可能是里程碑检测的 prompt 没对齐或者模型版本变了。这时候去检查marble/evaluation/下的里程碑检测逻辑确认它用的判定 prompt 和论文附录 A.4 一致。还有一个容易忽略的点论文里每个 agent 的长期记忆设为无限通信轮次上限 5。你复现时如果记忆被截断agent 会“忘掉”之前的里程碑进展导致 KPI 偏低。检查 config 里有没有memory_limit字段设成null或unlimited。5. 常见报错排查401、local proxy failed 与 choices 解析失败跑多模型对照时报错集中在几个地方。下面按真实遇到的错误逐个拆。401 Authentication Error。这个最常见说明 Key 没被正确读取。先确认.env文件在项目根目录而不是子目录然后确认代码里真的调用了load_dotenv()。如果用的是 MARBLE 自带的 config 加载器它可能从os.environ直接读那你就得在 shell 里export OPENAI_API_KEYsk-xxx而不是只写.env。还有一种情况Key 复制时带了空格或换行用print(repr(os.getenv(OPENAI_API_KEY)))检查一下首尾字符。local proxy failed / Connection error。这个报错通常出现在你本地有网络代理设置但代理没生效或配置冲突。检查环境变量里有没有HTTP_PROXY、HTTPS_PROXY、ALL_PROXY如果有但代理服务没开请求就会失败。临时清掉这些变量再跑unset HTTP_PROXY HTTPS_PROXY ALL_PROXY python -m marble.run --config your_config.json如果清掉后能通说明是代理配置问题。另外确认OPENAI_BASE_URL写的是https://taotoken.net/api不要多加/v1或结尾斜杠不同库对 URL 拼接的处理不一样多写的路径会导致 404 而不是 401报错信息会误导你以为是 Key 的问题。reading choices 报错 / KeyError: choices。这个说明 API 返回的 JSON 结构和你代码预期的不一样。正常返回是{choices: [{message: {...}}]}如果返回的是{error: {...}}代码去取choices就会 KeyError。根因通常是模型 ID 写错了TaoToken 找不到这个模型就返回错误对象。去模型对话页面确认模型 ID 的准确拼写注意大小写和连字符。比如Meta-Llama-3.3-70B和meta-llama-3.3-70b可能不一样以页面上显示的为准。OAuth / token expired。如果你用的是 Claude Code 或某些需要 OAuth 流程的工具接 MARBLE可能会遇到 token 过期。这类工具建议直接用 API Key 模式而不是 OAuth。在 TaoToken 控制台重新生成一个 Key确保它有调用目标模型的权限。如果用的是 Coding Plan 做长期实验确认套餐覆盖了你需要的模型https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding-planutm_campaignrewrite 。里程碑检测返回空。MARBLE 跑完但 KPI 是 0说明里程碑检测器没识别出任何达成项。检查检测器用的模型是否支持结构化输出有些小模型返回的 JSON 格式不规范解析失败就静默返回空。把检测器模型换成 gpt-4o-mini 试试它的 JSON 遵循度更好。另外确认total_milestones字段不为 0如果任务配置里没定义里程碑检测器无从判断。排查顺序建议先单独调 API 确认连通性再跑单 agent 单场景确认流程最后才上多模型对照。这样出错时能快速定位是接入层还是业务层的问题。6. 从复现到扩展把 MARBLE 用到你自己的 agent 场景跑通论文复现只是起点MARBLE 的框架设计允许你接入自有场景。扩展路径有三条加新任务、加新拓扑、加新规划策略。加新任务需要实现一个场景类定义 agent 角色、里程碑列表和评估函数。MARBLE 的场景接口在marble/scenarios/下你照着research或coding的实现抄一份改掉里程碑定义和评分逻辑就行。里程碑定义是关键——论文里研究场景的里程碑是“完成 5 个关键问题”你的场景可以是“完成需求分析”“通过单元测试”“生成文档”这类可检测的节点。每个里程碑要能被 LLM 检测器判断是否达成所以描述要具体别写“代码质量好”这种模糊标准。加新拓扑需要改 Agent Graph 模块。论文支持星、树、图、链四种核心是定义 agent 之间的边关系。你可以在 config 的graph_edges里自定义任意连接方式比如环形、全连接、分层混合。改完后确认通信模块只允许有边相连的 agent 之间传递消息否则就退化成全广播了。加新规划策略需要改 Cognitive Module 里的 prompt 模板。论文的四种策略本质是四套不同的 planning prompt。你可以在marble/prompts/下加一个新模板比如“辩论式规划”——让两个 agent 先对立辩论再综合。然后在 config 的planning_strategy里注册这个新策略名。做多模型对照实验时建议固定随机种子。MARBLE 的 agent 行动有 temperature0.7 的随机性同一 config 跑两次结果可能不同。在 config 里加seed: 42并在 LLM 调用时传seed参数OpenAI 兼容接口支持。这样你的对照实验才有可重复性。最后提醒一个实操细节跑大规模对照实验时API 调用量大注意控制并发。MARBLE 默认可能是串行调用一个研究场景 5 个 agent、5 轮迭代、每轮多次通信单次实验就是几十到上百次 API 调用。多模型多场景跑下来轻松上千次。用 TaoToken 的好处是统一计费和限流你可以在控制台看到用量避免某一家突然限流打断实验。如果要做长期反复的 agent 实验Coding Plan 的额度模式比按次计费更划算。扩展场景跑通后把结果和论文基线对比如果趋势一致比如图结构确实比树结构好、认知规划确实提升 KPI说明你的复现是可信的这时候再往自有场景迁移就有底气了。
返回列表