ARTICLE DETAIL

资讯详情

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

【AI大模型】如何用TaoToken统一Key搭建Manus任务规划模块(Planner/Master)?看完这一篇你就知道了!!

【AI大模型】如何用TaoToken统一Key搭建Manus任务规划模块(Planner/Master)?看完这一篇你就知道了!! 1. 为什么 Manus 的 Planner/Master 值得单独搭一套Manus 这类 Agent 产品最吸引人的地方不是它能聊天而是它会把一个模糊需求拆成一条条能看见进度的任务清单正在做的标彩色、做完的划掉、待办的排好队。这个体验背后就是 Planner有些项目叫 Master在干活。它本质上是一个“项目经理”角色把“帮我做个打地鼠游戏”翻译成“建目录 → 写 HTML → 写 JS → 写 CSS → 加特效”再给这些步骤排依赖、记状态、处理失败重规划。问题在于很多人第一次搭 Planner 时模型调用是散的规划用一个 Key执行用一个 Key重规划又换一个通道结果日志对不上、额度算不清、报错难复现。我这次的做法是用 TaoToken 的统一 Key 和 API 通道把 Planner/Master 的规划、重规划、状态回写全部收敛到一条链路上再配一份 config.toml 和 settings.json让骨架能直接跑起来。这篇就按“能跟做”的标准来先讲 Planner 的职责边界再给可复制配置最后演示一次任务规划请求的验证动作和预期返回结构。适合正在做 Agent 任务拆解、调度模块或者想把现有 Planner 从“能跑”改成“可观测、可重规划”的开发者。2. TaoToken 前置统一 Key 与通道准备Planner 模块对模型调用的要求其实比普通对话高它要稳定返回结构化计划、要支持多轮重规划、还要能在状态更新时被反复调用。如果每个环节各接一个来源排查一次“计划没更新”就要翻三套日志。TaoToken 在这里的作用是提供一个统一的 API 通道和 Key 管理入口让 Planner、Master、执行器共用同一套凭证和调用地址。你需要先拿到一个可用的 Key。打开官网 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 注册后进入控制台在 API Keys 页面创建一个新 Key。建议给 Planner 单独建一个 Key命名成manus-planner-dev方便后面按模块看用量。创建入口在 https://taotoken.net/console/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi_keysutm_campaignrewrite 。调用地址统一用 https://taotoken.net/api 注意这个地址后面不加任何查询参数。模型对话调试可以用 https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_contentmodelsutm_campaignrewrite 先确认你要用的模型名Planner 建议选指令跟随强、JSON 输出稳的模型。如果你后面要把 Planner 接到长期编码或 Agent 流水线里可以看 Coding Planhttps://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding_planutm_campaignrewrite 。接入细节和字段说明在文档里https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 。注意Key 只放在服务端环境变量或本地配置文件里不要写进前端代码也不要提交到 Git。3. 可复制配置config.toml 与 settings.jsonPlanner/Master 的骨架我拆成两层配置config.toml管通道和模型参数settings.json管 Planner 的行为规则和状态机。这样改规划策略时不用动调用代码。先看config.toml# config.toml [llm] base_url https://taotoken.net/api api_key ${TAOTOKEN_API_KEY} model gpt-4o-mini timeout_seconds 60 max_retries 2 [planner] max_steps 5 allow_parallel true state_file ./runtime/plan_state.json log_file ./runtime/planner.log [master] replan_on_block true max_replan_times 3 human_in_loop falsebase_url固定为 TaoToken 的 API 地址api_key从环境变量读避免硬编码。max_steps 5是经验值步骤太多模型容易在依赖关系上出错3 到 5 步最稳。再看settings.json它定义 Planner 的职责和状态流转{ planner: { role: planning_assistant, goal: 把用户需求拆成可执行步骤并维护依赖关系, output_format: { title: string, steps: [string], dependencies: {1: [0], 2: [0]} }, state_machine: { pending: 待办, in_progress: 进行中, completed: 已完成, blocked: 阻塞 } }, master: { responsibilities: [ 生成初始计划, 分配步骤给执行器, 收集执行结果并更新状态, 评估是否需要重规划 ], replan_rules: { keep_completed: true, only_modify_pending: true, drop_irrelevant_after_answer: true } } }职责划分上Planner 只负责“拆”和“排”Master 负责“派”和“跟”。Planner 输出title steps dependenciesMaster 拿着这份计划去调度执行器每完成一步回写状态。两者共用同一个 TaoToken Key但日志分开写方便定位是规划错了还是执行错了。4. 验证请求一次任务规划调用与预期返回配置就绪后先别急着接执行器单独验证 Planner 能不能稳定返回结构化计划。下面是一段 Python 验证脚本直接读config.toml并发一次规划请求import os import json import tomllib import requests with open(config.toml, rb) as f: cfg tomllib.load(f) api_key os.environ[TAOTOKEN_API_KEY] base_url cfg[llm][base_url] model cfg[llm][model] system_prompt 你是一个计划助手。把用户需求拆成3-5个高层步骤。 只返回JSON格式 {title: ..., steps: [...], dependencies: {1: [0]}} 不要输出多余解释。 user_task 帮我做一个打地鼠小游戏 resp requests.post( f{base_url}/chat/completions, headers{ Authorization: fBearer {api_key}, Content-Type: application/json }, json{ model: model, messages: [ {role: system, content: system_prompt}, {role: user, content: user_task} ], temperature: 0.2 }, timeoutcfg[llm][timeout_seconds] ) data resp.json() content data[choices][0][message][content] plan json.loads(content) print(json.dumps(plan, ensure_asciiFalse, indent2))跑通后预期返回结构类似这样{ title: 打地鼠小游戏开发, steps: [ 创建游戏目录与基础布局, 编写游戏逻辑 JS, 编写样式 CSS, 增加难度与特效 ], dependencies: { 1: [0], 2: [0], 3: [1, 2] } }拿到这个结构后Master 就可以按dependencies做拓扑排序第 0 步先跑第 1、2 步可并行第 3 步等前两步完成。状态回写时把每一步标记成pending / in_progress / completed / blocked写进runtime/plan_state.json。验证成功的标志是返回是合法 JSON、步骤数在 3 到 5 之间、依赖索引不越界。如果模型返回了带 Markdown 代码块的 JSON在解析前先剥掉 json 包裹。5. 本篇常见错排查报错一401 Unauthorized。多数是 Key 没读到或带了多余空格。检查环境变量TAOTOKEN_API_KEY是否导出成功echo $TAOTOKEN_API_KEY看有没有值。另外确认请求头是Bearer加 Key中间一个空格。报错二返回内容不是合法 JSON。Planner 对输出格式敏感temperature建议压到 0.2 以下system prompt 里明确写“只返回 JSON”。如果还是不稳定可以在解析前做一次清洗去掉首尾的json 和再json.loads。报错三依赖索引越界。比如 steps 只有 4 个dependencies 里却出现4: [3]。这是模型把步骤编号从 1 开始数导致的。在 prompt 里明确“步骤索引从 0 开始”解析后加一层校验所有依赖索引必须小于len(steps)不满足就触发一次重规划。报错四重规划后已完成步骤丢了。这是 Master 的replan_rules没生效。确认keep_completed true并且在调用重规划时把当前plan_state.json里已完成和进行中的步骤一起传给模型让它只改pending部分。报错五超时。Planner 请求偶尔会慢timeout_seconds设 60 比较稳max_retries 2做兜底。重试时建议换一个稍低的temperature减少重复失败。6. 把 Planner 接进你的 Agent 流水线骨架跑通后下一步是把 Planner 和 Master 接到真实执行器上。我的建议是先把状态文件plan_state.json的读写封装成独立模块Planner 只负责生成计划Master 只负责调度和回写两者通过状态文件解耦。这样后面换模型、换执行器都不用动规划逻辑。如果你要长期跑编码类 Agent把 Planner 的调用通道固定成 TaoToken 的 Coding Plan 会更省心https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding_planutm_campaignrewrite 。需要先调模型确认规划效果可以用模型对话页快速试https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_contentmodelsutm_campaignrewrite 。Key 管理和新建入口在 https://taotoken.net/console/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi_keysutm_campaignrewrite 接入字段和错误码对照看文档https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 。Claude Code 相关的接入方式可以参考https://taotoken.net/claude-code-anthropic?utm_sourcetaotoken_aicg_blog_endutm_contentclaude_codeutm_campaignrewrite 。最后留一个实操技巧Planner 的 system prompt 里把“步骤数 3-5”和“索引从 0 开始”写死比事后校验省事得多。状态机先用文件存等并发上来了再换 Redis别一上来就过度设计。
返回列表