猫头虎 分享 京东开源 JoyAgent-JDGenie 多智能体:GAIA 准确率 75.15%,用 TaoToken 统一 Key 跑通端到端配置 1. 为什么 JoyAgent-JDGenie 值得本地跑一遍JoyAgent-JDGenie 是京东开源的一款端到端通用多智能体产品在 GAIA 基准测试上拿到 75.15% 的准确率超过 OWLCAMEL的 64.24% 和 OpenManus 的 40.61%。它不是只开源一个框架壳子而是把前端、后端、执行引擎、报告 Agent、代码 Agent、PPT Agent、文件 Agent 整套放出来属于「产品级」开源。适合谁想在自己机器上复现多智能体端到端任务、想研究 Plan Executor 与 React 双模式调度、想把统一 Key 接进多模型路由的开发者。我这次的目标很明确不改业务代码只通过一份统一 Key 把 JoyAgent-JDGenie 的模型调用层接起来然后跑一个 GAIA 风格的样例任务核对结果。下面把 config.toml、settings.json 骨架和验证清单都给出来你可以直接抄。2. TaoToken 前置统一 Key 与接入地址JoyAgent-JDGenie 默认会读环境变量里的模型配置。为了不让每个子 Agent 各配一套 Key我用 TaoToken 做统一入口一个 Key 覆盖对话模型、代码模型、报告模型省去在 application.yml 里到处填不同厂商的 base_url。需要先拿到 Key入口在这里控制台取 Keyhttps://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentconsoleAPI Key 管理页https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentapi-keys接入文档base_url 与兼容格式https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentdocAPI 基地址统一用https://taotoken.net/api这个地址不加 UTM直接写进配置。它兼容 OpenAI 风格的/v1/chat/completions所以 JoyAgent 里凡是走 OpenAI SDK 的调用点改 base_url 和 api_key 就能通。注意Key 只放环境变量或本地 settings.json不要提交到 Git。下面配置里我用${TAOTOKEN_API_KEY}占位。3. 可复制配置config.toml 与 settings.json 骨架JoyAgent-JDGenie 的 Python 侧genie-tool用 uv 管理依赖Java 侧genie-backend读 application.yml。我额外加了两份统一配置文件让模型层集中管理。先建目录结构mkdir -p ~/joyagent-config cd ~/joyagent-config3.1 config.toml模型路由与统一 Key# ~/joyagent-config/config.toml # JoyAgent-JDGenie 统一模型配置所有子 Agent 共用 TaoToken Key [provider] name taotoken base_url https://taotoken.net/api api_key ${TAOTOKEN_API_KEY} api_style openai # 兼容 /v1/chat/completions [models] # 主规划模型Plan Executor 模式用 planner gpt-4o # 执行模型React 模式子 Agent 用 executor gpt-4o-mini # 代码 Agent 专用 coder claude-3-5-sonnet # 报告 / PPT 生成 reporter gpt-4o [agent] max_turns 12 enable_memory true # 跨任务记忆 enable_tool_evolve true # 工具自动进化 dag_concurrency 4 # DAG 执行引擎并发度 [gaia] dataset gaia_validation level level1 timeout_seconds 3003.2 settings.json后端读取的运行时配置{ llm: { provider: taotoken, base_url: https://taotoken.net/api, api_key_env: TAOTOKEN_API_KEY, default_model: gpt-4o, fallback_model: gpt-4o-mini }, agents: { report: { model: gpt-4o, enabled: true }, code: { model: claude-3-5-sonnet, enabled: true }, file: { model: gpt-4o-mini, enabled: true }, ppt: { model: gpt-4o, enabled: true } }, mcp: { servers: [] }, runtime: { work_dir: ./genie-workspace, log_level: INFO } }3.3 环境变量与启动export TAOTOKEN_API_KEYsk-你的Key export JOYAGENT_CONFIG$HOME/joyagent-config/config.toml export JOYAGENT_SETTINGS$HOME/joyagent-config/settings.json # 依赖安装 pip install uv cd genie-tool uv sync source .venv/bin/activate # 首次初始化 sh start_genie_init.sh # 后续启动 sh start_genie.shJava 侧如果走 application.yml把模型段替换成llm: base-url: https://taotoken.net/api api-key: ${TAOTOKEN_API_KEY} model: gpt-4o这样前端、后端、Python 工具层三处都指向同一个 Key不用再分厂商维护。4. 验证请求GAIA 样例任务与结果核对配置写完必须验证不然你不知道是 Key 没通还是 Agent 调度出错。分两步先验模型连通再跑 GAIA 样例。4.1 先验 Key 连通性curl https://taotoken.net/api/v1/chat/completions \ -H Authorization: Bearer $TAOTOKEN_API_KEY \ -H Content-Type: application/json \ -d { model: gpt-4o-mini, messages: [{role: user, content: reply with ok}] }返回里有choices[0].message.content就说明 Key 和 base_url 都对。这一步不通后面 Agent 一定报错。4.2 跑一个 GAIA Level1 样例GAIA 的 Level1 任务通常是「查一个事实 简单推理」。我用一个典型样例给定一段公开网页信息要求 Agent 检索并给出答案。cd genie-tool python -m genie.run \ --task Find the name of the tallest building in the city where the 2024 summer Olympics were held, and report its height in meters. \ --level level1 \ --config $JOYAGENT_CONFIG执行时观察日志里的几个关键点planner是否先输出任务分解Plan Executor 模式子 Agent 是否被正确路由到 file / reportDAG 引擎是否并发执行了检索与推理分支最终是否输出结构化答案4.3 结果核对清单核对项期望结果不通过时看哪模型调用无 401/404Key、base_url、模型名任务分解有 plan 输出planner 模型是否可用子 Agent 路由report/code/file 被调用settings.json agents 段DAG 并发日志出现并行分支dag_concurrency 配置最终答案与 GAIA 标注一致检索工具是否挂载记忆复用第二次相似任务命中缓存enable_memory跑通后你可以把--level换成 level2 复测JoyAgent-JDGenie 在 Level2 的得分是 77.91%比 Level1 的 86.79% 低说明多跳推理是难点正好用来观察 Plan 模式的表现。5. 本篇常见错排查报 401 Unauthorized九成是TAOTOKEN_API_KEY没 export或者 settings.json 里写成了字面量${TAOTOKEN_API_KEY}而没做变量替换。检查echo $TAOTOKEN_API_KEY是否有值。报 model not foundconfig.toml 里的模型名要和 TaoToken 文档里支持的名称一致。别自己拼gpt4o这种简写用gpt-4o。Agent 卡在 planning 不动planner 模型超时。把max_turns调小或换gpt-4o-mini先跑通流程再换回大模型。DAG 并发报资源冲突dag_concurrency设太高本地机器扛不住。降到 2 再试。GAIA 答案对不上先确认检索工具file Agent是否真的挂载成功很多「答错」其实是没检索到源信息不是推理错。Java 侧读不到配置application.yml 的缩进容易错llm:下面必须是两个空格不是 Tab。提示排障时优先看genie-workspace下的运行日志里面会打印每次模型请求的 base_url 和状态码比猜快得多。6. 把统一 Key 接进你的多智能体工作流JoyAgent-JDGenie 的价值在于端到端从任务输入到报告输出中间不需要你手动串子 Agent。而 TaoToken 统一 Key 的价值在于你只维护一份凭证就能让 planner、executor、coder、reporter 四个角色各用各的模型不用在四个厂商后台之间来回切。如果你后面要长期跑编码类 Agent 任务可以看 Coding Planhttps://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentcoding-plan想直接在网页里对比不同模型对同一个 GAIA 任务的输出用模型对话https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentchat接入细节和兼容格式以文档为准https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentdoc我实测下来最容易踩的坑不是模型能力而是配置分散——三处 base_url 不一致排查半天。把 config.toml 和 settings.json 集中管理后换模型只改一个文件重跑 GAIA 样例就能验证效率高很多。