1. 从一次真实的答疑翻车说起:多 Agent 协作到底解决什么问题
先讲个我自己的经历。去年帮一个做 K12 辅导的朋友搭学习助手,最初图省事,所有学科问题都丢给同一个 Agent 处理。结果很快就崩了:数学题它用语文老师的口吻讲得云里雾里,英语语法问题它又搬出一堆数学符号,学生问「这道物理题为什么用动能定理」,它回了一段关于「能量守恒的历史背景」。问题不在模型能力,而在于一个 Agent 试图扮演所有角色,最后哪个角色都演不好。
这就是 OpenClaw 多 Agent 协作在教育场景里最直接的价值。OpenClaw 是一个可以跑在自己设备上的个人 AI 助手框架,支持多渠道接入、多 Agent 并行、技能扩展和本地记忆。放到教育场景里,它不是一个「更聪明的答疑机器人」,而是一套可以编排的教学团队:数学 Agent 负责解题思路,英语 Agent 负责语法纠错,学习规划 Agent 负责根据错题记录生成复习路径,还有一个「总调度」负责判断学生的问题该转给谁。
我试过把这套结构跑通之后,最明显的感受是:学生的提问不再需要「猜学科」。你只要把问题发进来,路由规则会自动判断意图,分发给对应的 Agent,再把各 Agent 的反馈汇总成一份分层答复。这篇文章就带你从零复现这套流程——包括 Agent 角色配置、路由规则、可复制的配置文件,以及一次从提问到分层反馈的完整验证。
适合谁看:想给自己或团队搭学习助手的技术同学、做教育产品的开发者、以及想把 AI 真正用进教学流程的老师。不需要你懂多深的模型原理,但需要你能改 JSON、能跑命令行。
核心检索词先明确:OpenClaw 多 Agent 协作、智能答疑、个性化学习路径。这三个词会贯穿全文,也是你复现时最该盯住的三个点。
2. 前置准备:TaoToken 接入与 OpenClaw 环境搭建
在配置多 Agent 之前,得先让 OpenClaw 能调用大模型。这一步很多人卡在「Key 从哪来、Base URL 填什么、Model ID 写哪个」三件套上。我用的是 TaoToken 作为模型接入层,它兼容 OpenAI 风格的接口,配置起来比较直接。
2.1 拿到 API Key 和 Base URL
先去 TaoToken 控制台创建一个 API Key。地址是https://taotoken.net/api-keys,登录后在「API Keys」页面点新建,复制生成的 Key(形如sk-开头的一串)。这个 Key 只显示一次,记得存好。
Base URL 统一填https://taotoken.net/api,注意这里不要加任何 UTM 参数,接口地址保持干净。Model ID 根据你要用的模型填,比如gpt-4o、claude-3-5-sonnet这类,具体以控制台模型列表为准。
注意:Base URL 和 API Key 是两个独立的东西,别把 Key 填到 Base URL 里,也别在 Base URL 后面拼
/v1/chat/completions,OpenClaw 的 provider 配置会自动补全路径。
2.2 OpenClaw 的 provider 配置
OpenClaw 的模型接入配置通常放在~/.openclaw/config.toml(不同版本路径可能略有差异,以你本地实际为准)。下面是一段可复制的 TOML 片段,把api_key换成你自己的:
[providers.taotoken] type = "openai-compatible" base_url = "https://taotoken.net/api" api_key = "sk-你的Key" default_model = "gpt-4o" [providers.taotoken.models] fast = "gpt-4o-mini" smart = "gpt-4o"这里我配了两个模型别名:fast用于路由判断这种轻量任务,smart用于实际解题和生成反馈。多 Agent 场景下,路由 Agent 用便宜快的模型,专业 Agent 用能力强的模型,成本能压下来不少。
2.3 验证接入是否成功
配置写完后,先别急着搭 Agent,用一条最简单的请求验证链路通不通:
curl https://taotoken.net/api/chat/completions \ -H "Authorization: Bearer sk-你的Key" \ -H "Content-Type: application/json" \ -d '{ "model": "gpt-4o-mini", "messages": [{"role": "user", "content": "用一句话解释什么是动能定理"}] }'如果返回里有choices[0].message.content,说明 Key、Base URL、Model ID 三件套都对。如果报 401,往下看第 5 节的排错。
2.4 目录结构规划
多 Agent 协作需要清晰的目录,我建议这样组织:
~/.openclaw/ ├── config.toml # provider 与全局配置 ├── agents/ │ ├── router.json # 路由 Agent │ ├── math.json # 数学 Agent │ ├── english.json # 英语 Agent │ └── planner.json # 学习规划 Agent ├── memory/ │ └── MEMORY.md # 长期记忆 └── routes.json # 路由规则agents/放每个角色的定义,routes.json放分发规则,memory/放学习记录。这个结构的好处是:加一个新学科 Agent,只要新增一个 json 文件加一条路由,不用动其他代码。
3. 可复制的 Agent 角色配置与路由规则
这一节是全文的核心,直接给你能抄的配置。多 Agent 协作的关键不在 Agent 数量多,而在于每个 Agent 的职责边界清晰,以及路由规则能准确判断意图。
3.1 路由 Agent 配置
路由 Agent 不负责解题,只负责判断「这个问题该给谁」。它的 system prompt 要写得非常克制:
{ "name": "router", "model": "fast", "system_prompt": "你是一个学科路由器。只输出一个 JSON,格式为 {\"target\": \"math|english|planner\", \"reason\": \"简短理由\"}。不要解答问题本身。判断依据:涉及公式、计算、几何、物理化学的归 math;涉及语法、单词、写作、阅读的归 english;涉及复习计划、学习安排、进度查询的归 planner。无法判断时归 planner。", "temperature": 0.1, "max_tokens": 120 }temperature压到 0.1 是为了让路由结果稳定,别让它发挥创意。max_tokens限制在 120,防止它啰嗦。
3.2 学科 Agent 配置
数学 Agent 的配置,重点是让它「讲思路而不是直接给答案」:
{ "name": "math", "model": "smart", "system_prompt": "你是数学辅导老师。回答分三层:第一层指出题目涉及的核心知识点;第二层给出解题思路和关键步骤;第三层给一道同类练习题。不要直接抛出最终答案,引导学生自己算。涉及计算时逐步展示过程。", "temperature": 0.4, "memory_enabled": true }英语 Agent 类似,但侧重纠错和地道表达:
{ "name": "english", "model": "smart", "system_prompt": "你是英语学习助手。学生用英语提问时,先用英语回答,再单独列出语法或用词问题。学生用中文提问时,用中文解释,并给出对应的英文表达。每次回答末尾附一个可替换的例句。", "temperature": 0.5, "memory_enabled": true }学习规划 Agent 则要能读记忆:
{ "name": "planner", "model": "smart", "system_prompt": "你是学习规划助手。基于学生的历史错题和提问记录,生成分层复习计划:今日必做、本周巩固、长期提升。每层给出具体任务和预计耗时。如果记忆中没有相关记录,先询问学生最近的学习内容。", "temperature": 0.3, "memory_enabled": true }3.3 路由规则文件
routes.json定义分发逻辑。OpenClaw 的路由支持按关键词、按渠道、按发送者多维度匹配,这里用关键词加默认兜底:
{ "rules": [ { "match": { "keywords": ["函数", "方程", "几何", "证明", "求导", "受力", "动能", "化学式"] }, "target": "math" }, { "match": { "keywords": ["语法", "时态", "单词", "作文", "阅读", "翻译", "pronunciation"] }, "target": "english" }, { "match": { "keywords": ["复习", "计划", "进度", "安排", "错题", "薄弱"] }, "target": "planner" } ], "fallback": "router" }注意fallback设成router,意思是关键词都没命中时,交给路由 Agent 用模型判断。这样既保证了常见问题的快速分发,又不会漏掉长尾提问。
3.4 分层反馈的汇总配置
多个 Agent 的反馈要汇总成一份给学生,需要一个 aggregator 配置:
{ "aggregator": { "enabled": true, "template": "【知识点】{knowledge}\n【思路】{approach}\n【练习】{exercise}\n【建议】{advice}", "max_agents_per_query": 2 } }max_agents_per_query限制一次最多调用两个 Agent,避免一个简单问题触发一堆 Agent 导致响应变慢。实测下来,两个 Agent 的协作已经能覆盖绝大多数学习场景。
4. 完整验证:从一次提问到分层反馈
配置写完,得跑一遍完整流程验证。我拿一个真实场景演示:学生发来「这道物理题为什么用动能定理而不是牛顿第二定律」。
4.1 启动 OpenClaw 并加载配置
openclaw start --config ~/.openclaw/config.toml --agents ~/.openclaw/agents --routes ~/.openclaw/routes.json启动后看日志,确认四个 Agent 都加载成功:
[INFO] loaded agent: router (model=fast) [INFO] loaded agent: math (model=smart) [INFO] loaded agent: english (model=smart) [INFO] loaded agent: planner (model=smart) [INFO] routes loaded: 3 rules, fallback=router如果某个 Agent 没加载,多半是 json 格式错了,用python -m json.tool agents/math.json检查一下。
4.2 发送测试提问
通过 OpenClaw 的对话接口发一条:
curl -X POST http://localhost:8080/chat \ -H "Content-Type: application/json" \ -d '{"user_id": "student_001", "message": "这道物理题为什么用动能定理而不是牛顿第二定律"}'4.3 观察路由与分发过程
日志里会看到路由决策:
[ROUTER] matched keyword "动能" -> target=math [AGENT:math] processing query... [AGENT:math] memory_search: found 2 related records [AGGREGATOR] combining 1 agent response关键词「动能」命中 math 规则,直接分发给数学 Agent,没有走模型路由,省了一次调用。
4.4 检查分层反馈结果
返回的响应应该是这样的结构:
{ "reply": "【知识点】动能定理描述合外力做功与动能变化的关系,适用于变力做功场景。\n【思路】牛顿第二定律需要知道加速度,而本题加速度随位置变化,直接积分较复杂;动能定理只关心初末状态,绕开了过程细节。\n【练习】一物体从斜面滑下,摩擦力做功 20J,求末速度。\n【建议】下次遇到「变力」「位移相关」的题目,优先考虑动能定理。", "agents_used": ["math"], "memory_written": true }看到memory_written: true说明这次问答已经写进记忆,下次学生问相关问题时,planner Agent 能读到这条记录。
4.5 验证个性化路径生成
再发一条规划类提问:
curl -X POST http://localhost:8080/chat \ -H "Content-Type: application/json" \ -d '{"user_id": "student_001", "message": "帮我看看最近物理哪里薄弱"}'这次会命中 planner 规则,planner Agent 读取memory/里的历史记录,生成分层复习计划。如果之前那条动能定理的问答被正确写入,这里应该能看到「动能定理」出现在复习任务里。这一步跑通,说明记忆系统与多 Agent 的联动是通的,个性化学习路径才算真正落地。
5. 常见报错排查:401、local proxy failed 与 OAuth 问题
多 Agent 协作跑起来后,最容易在接入层和路由层翻车。这一节把几个高频报错对照着讲清楚。
5.1 401 Unauthorized
最常见,报错长这样:
{"error": {"message": "Invalid API key", "type": "invalid_request_error"}}排查顺序:第一,确认config.toml里的api_key是完整的sk-开头字符串,没有多余空格或换行;第二,确认 Key 没有过期或被删除,去https://taotoken.net/api-keys核对;第三,确认 Base URL 是https://taotoken.net/api,没有拼错。三件套里任何一个错都会 401。
5.2 local proxy failed
这个报错通常出现在 OpenClaw 启动阶段:
[ERROR] local proxy failed: connection refused原因一般是本地代理端口被占用,或者 provider 配置里的base_url指向了一个不存在的本地地址。检查config.toml里有没有残留的localhost配置,把它改成https://taotoken.net/api。另外确认 8080 端口没被其他程序占用,用lsof -i :8080查一下。
5.3 reading choices 相关错误
有时候请求发出去了,但解析响应时报:
[ERROR] failed reading choices: unexpected end of JSON input这多半是模型返回了空响应或流式响应被截断。检查max_tokens是不是设得太小(路由 Agent 设 120 够用,但学科 Agent 别低于 800);另外确认没有在请求里同时开stream: true又用非流式解析。OpenClaw 的 aggregator 默认按非流式处理,如果你手动改了流式配置,要同步改解析逻辑。
5.4 OAuth 与 Codex auth.json 相关
如果你用的是 Codex 风格的认证,配置会落在~/.codex/auth.json。这个文件里同样要保证三件套齐全:
{ "base_url": "https://taotoken.net/api", "api_key": "sk-你的Key", "model": "gpt-4o" }OAuth 报错通常是 token 过期,重新走一遍授权流程即可。注意auth.json的权限设成600,别让其他用户读到你的 Key。
5.5 路由不生效
如果发现所有问题都走了 fallback,检查routes.json的keywords数组有没有拼写错误,以及 OpenClaw 启动时有没有真正加载这个文件。日志里搜routes loaded,确认规则条数对得上。另外关键词匹配是包含匹配,不是精确匹配,所以「动能定理」能被「动能」命中,但「力学」不会被「动能」命中,关键词要覆盖常见表述。
6. 把学习助手真正用起来:接入方式与后续迭代
配置跑通只是起点,真正决定体验的是你怎么把它接到学生的日常使用场景里。OpenClaw 支持多渠道接入,学生用微信、钉钉、飞书提问都行,底层都是同一套多 Agent 逻辑。
如果你想让助手支持更复杂的交互,比如学生发一张手写作业照片,可以启用 OpenClaw 的 browser 工具读取图片,再交给对应的学科 Agent 处理。这一步需要在 Agent 配置里加tools: ["browser", "memory_search"],并确保本地有对应的工具运行时。
长期来看,多 Agent 协作的教育助手最值得投入的方向是记忆的积累。每次问答、每次错题、每次复习计划都写进memory/,时间越长,planner Agent 给出的路径越准。这也是本地部署相比云端服务的优势——数据在自己手里,记忆可以持续沉淀,不用担心服务下线或数据迁移。
想直接体验模型对话效果,可以去https://taotoken.net/chat;需要长期跑编码类或 Agent 类任务,看https://taotoken.net/coding-plan;接入文档在https://taotoken.net/doc,API Key 管理在https://taotoken.net/api-keys。Claude Code 相关的接入配置可以参考https://taotoken.net/ClaudeCodeAnthropic。
最后给一个实用技巧:多 Agent 场景下,别一上来就配五六个 Agent。先从「路由 + 一个学科 + 一个规划」三个跑通,验证记忆写入和路由分发都正常,再逐步加学科。Agent 越多,路由冲突和响应延迟的风险越大,小步迭代比一次性铺开稳得多。