ARTICLE DETAIL

资讯详情

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

Manus第三篇-Prompt优化:两周实战,一套注意力视角的prompt优化框架,真的有用!

Manus第三篇-Prompt优化:两周实战,一套注意力视角的prompt优化框架,真的有用! 1. 为什么你的 Manus 多轮任务总在第三步跑偏如果你正在用 Manus 或 OpenManus 跑多轮自动化任务大概率遇到过这种场景第一轮让它查数据它干得挺漂亮第二轮让它整理它开始夹带私货第三轮你还没开口它已经自作主张把「下一步」也做了甚至调用 terminate 之前还要多跑两个无关步骤。这不是模型变笨了而是注意力漂移在多轮上下文里被逐轮放大。我拿一个真实任务链做过对照让 Agent 完成「打开页面 → 提取价格 → 写入表格 → 终止」四步。原始 Prompt 下10 次里有 7 次会在第三步之后继续调度把页面上的推荐商品也抓进来或者重复执行第二步。两周里我改了 30 多个版本最后收敛出一套以注意力锚点为核心的 CO-START 框架把异常终止率从 70% 压到 15% 以内。这篇不讲空泛的提示词理论只交付三样东西可复制的 Prompt 模板、注意力锚点的具体配置位置、以及每一轮怎么验证有没有生效。适合已经在跑 Manus/OpenManus 工作流、被多轮任务漂移折磨过的同学。如果你还没搭好统一调用通道后面也会给出用 TaoToken 统一 Key 接入调试的配置方式避免在多个 Key 之间来回切换。2. 前置准备用 TaoToken 统一 Key 与 API 通道调试 Prompt 最怕什么不是模型不听话而是你每换一个模型就要改一次 base_url 和 Key改到最后自己都忘了哪次结果对应哪个配置。我的做法是把所有调试请求收敛到一个统一通道上TaoToken 在这里扮演的就是这个角色一个 Key 覆盖多种模型base_url 固定切换模型只改 model 字段。先拿到 Key。进入控制台创建 API Key地址是 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewrite 。创建后复制保存页面只显示一次。然后确认接入文档里的 base_url 写法。文档入口在 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewrite 核心就一句所有请求走 https://taotoken.net/api 不要带 UTM 参数拼到 API 路径里。这一点很容易踩坑有人把带 utm 的完整链接直接塞进 base_url结果 404。如果你要跑的是长期编码或 Agent 任务建议顺手看一下 Coding Plan 的额度说明 https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewrite 。调试阶段用按量计费就够等 Prompt 稳定了再切套餐更划算。环境变量建议这样设避免 Key 写死在代码里export TAOTOKEN_API_KEYsk-你的key export TAOTOKEN_BASE_URLhttps://taotoken.net/api注意base_url 结尾不要带斜杠也不要拼/v1之外的路径具体以接入文档为准。不同 SDK 对 base_url 的处理不一样OpenAI SDK 会自动补/chat/completions。3. CO-START 框架落地把注意力锚点写进 PromptCO-START 原本是 C-背景、O-目标、S-风格、T-语调、A-听众、R-返回值格式。但在 Manus 这类多轮 Agent 场景里光有这六项不够因为每一轮模型看到的上下文都在变上一轮的返回值会挤占这一轮的注意力。所以我在 CO-START 基础上加了两个动作锚点定位和核心句转移。3.1 基础模板先让结构稳定下来先给一个可以直接复制的基础版角色、目标、返回值、重要说明四段式用###做分隔符。分隔符不是装饰它直接影响模型对段落边界的识别。### 身份 你是一个网页数据提取助手只执行当前步骤不推测后续步骤。 ### 目标 你的目标是完成用户在当前轮次给出的单一任务。 ### 返回值 返回结构化步骤每步格式为 1.[页面元素]执行动作 2.[页面元素]执行动作 不要返回与当前任务无关的内容。 ### 重要 1. 只处理用户本轮输入中出现的数字和括号内信息。 2. 不要编造 URL、价格、日期。 3. 当前步骤完成后立即调用 terminate。这个版本能解决 60% 的漂移问题但遇到多轮任务链还是会漏。原因在下一节。3.2 注意力锚点把关键句放到模型真正关注的位置模型每一轮真正「盯」的是提交给它的那个任务句。你写在 Important 里的约束权重远低于任务句本身。所以正确做法不是把约束写得更狠而是把约束挪到任务句旁边。以 OpenManus 里常见的终止判断为例。原始写法4. 任务完成 - 如果完成则使用 terminate 工具 为实现当前步骤下一步应该做什么问题在于「下一步应该做什么」这句才是模型的核心关注句它会盖过上面的终止条件。改成把判断嵌进核心句4. 任务完成 - 如果完成则使用 terminate 工具 当前步骤做完了吗做完了请调用 terminate 没做完的话为实现当前步骤下一步应该做什么实测下来这一处改动让终止准确率提升最明显。原理就是核心转移把你要强调的信息放到模型本来就会重点读的那句话附近。除了核心转移还有三个可复用的锚点位置锚点类型放置位置适用场景后置转移Prompt 最后一段上下文很长怕前面被遗忘模块转移与任务句同一子标题内同一约束写在 Important 无效时记忆转移上一轮返回值中需要跨轮保持的约束模块转移我踩过的坑同一条「没有 changeId 就不执行」的约束写在 Task 段里生效写在 Important 段里完全没用。所以约束不是越多越好位置错了等于没写。3.3 强化手段数字、括号、分隔符模型对数字和括号的敏感度高于普通文本。要防止它编造 URL 或价格可以这样写### System 对于括号中的内容以及数字你要重点关注这是用户对关键信息的解释可以加入到对应步骤中。 ### User 请在百度页面www.baidu.com搜索6月15日从杭州飞往北京的特价机票价格比平常低30%的机票。另外两条我实测有效的规则要么全中文要么全英文中英混排会稀释注意力术语前后一致前面用 RequirementId后面就别简写成 ReqId。至于网传的「威胁 AI 会有严重后果」「让模型不要做某事」我测下来基本无效。模型对「不要」的处理远弱于对「要做」的处理所以约束尽量写成正向动作。4. 逐轮验证怎么确认锚点真的生效了Prompt 改完不能只看一次结果要按轮次验证。我的验证流程分三步。第一步单轮隔离测试。把多轮任务拆成单轮每轮只给一个任务句看模型是否在该终止时终止。用 curl 直接打 TaoToken 的接口方便快速迭代curl https://taotoken.net/api/chat/completions \ -H Authorization: Bearer $TAOTOKEN_API_KEY \ -H Content-Type: application/json \ -d { model: claude-sonnet-4-20250514, messages: [ {role: system, content: 你是一个只执行当前步骤的助手完成后调用 terminate。}, {role: user, content: 当前步骤做完了吗做完了请调用 terminate没做完的话下一步应该做什么} ] }返回里如果出现 terminate 调用意图说明锚点位置对了。如果模型继续输出下一步动作说明核心句还是被任务句盖住了回去调 3.2 的位置。第二步多轮串联测试。把上一轮的返回值原样喂进下一轮观察约束有没有被历史记忆冲淡。这一步最容易暴露「记忆转移」有没有配好。第三步换模型对照。同一个 Prompt 在 Claude 和 GPT 系模型上表现可能不同用 TaoToken 的好处是只改 model 字段就能对照不用重配 Key。想快速对比模型输出也可以直接用模型对话页面手动试 https://taotoken.net/model-chat?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewrite 。验证通过的标准很简单连续 10 次多轮任务异常终止不超过 2 次。达不到就继续调锚点位置不要急着加新约束。5. 本篇常见错排查报错一401 Unauthorized。九成是 Key 没读到环境变量或者复制时带了空格。先echo $TAOTOKEN_API_KEY确认再检查请求头是不是Bearer加空格加 Key。报错二404 Not Found。检查 base_url 是不是误拼了 UTM 参数或多余路径。正确写法是https://taotoken.net/api不带 query string。报错三模型不调用 terminate。先确认 terminate 工具在当轮是否真的可用再检查核心句位置。把「做完了吗」这句挪到任务句正下方通常能解决。报错四约束写在 Important 里无效。这是模块转移的典型症状把该约束移到 Task 子标题内和任务句同段。报错五多轮后约束失效。用记忆转移把关键约束写进上一轮返回值而不是每轮重复塞进 System。报错六中英混排导致输出语言乱跳。统一成单一语言术语全称保持一致。6. 把调试通道固定下来Prompt 才能持续迭代两周调下来最大的体会是Prompt 优化不是一次写完而是每轮验证、每轮挪锚点。如果每次调试都要换 Key、换 base_url你根本没法判断是 Prompt 的问题还是通道的问题。把 TaoToken 作为固定接入层Key 和 base_url 一次配好之后只动 Prompt 和 model 字段变量就少了一个。需要新建或轮换 Key 时走这里 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewrite 。接入参数以文档为准 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewrite 。长期跑 Agent 任务的话Coding Plan 的额度模型更适合持续迭代 https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewrite 。最后留一个我自己的习惯每改一版 Prompt就在文件头记一行日期和改动点两周后回头看你会清楚知道哪个锚点真正起了作用而不是凭感觉反复推翻。
返回列表