☰
DeepAgents+MCP+A2A+Skills:多智能体集群实战拆解
2026/9/30 10:24:34 网站建设 项目流程

多智能体这个词已经被说烂了,但真把DeepAgents、MCP、A2A、Skills这四样东西组合在一起,搭出一套能稳定干活的多智能体集群架构,完全是另一回事。过去大半年我一直在折腾这套组合,从最初拿单个Agent硬怼复杂任务,到后来逐步拆成规划层、工具层、通信层、技能层,踩的坑不算少。这篇就把我自己的拆解思路、配置方法、以及能直接照抄的实战经验整理出来,给想从Demo走向工程化的朋友一点参考。

这套东西适合谁?如果你在做自动化Agent开发、在LangChain生态里跑过多步任务、或者正被"Agent只会调工具但做不了复杂决策"卡住,那这篇值得看完。我也会把社区里争议比较大的几个问题一并说透:DeepAgents到底行不行、和Claude Code比差距在哪、MCP和Skills是不是重复造轮子。都是亲身实测后的结论。

1. 为什么是这四个词:多智能体集群的底座拆解

1.1 单体Agent的瓶颈:一个什么活都要自己干的“全才”有多不靠谱

先看最常见的问题。很多人一开始是拿单个Agent接一堆工具去干活,比如既给它浏览器MCP、又给它代码库搜索、还给它数据库查询权限,然后在系统提示词里写"你要一步一步思考"。前几轮还好,任务一复杂就出幺蛾子:上下文窗口被塞满、工具调用互相干扰、模型开始绕来绕去不落地。

体感上就像让一个同事从需求沟通、写代码、做测试到上线全包。他脑子再好使,同时记住十件事也会乱。单体Agent的问题不是模型不行,而是职责边界太模糊,所有上下文都堆在同一个上下文窗口里互相挤占。

我试过的典型例子:让一个Agent同时做"调研竞品+写代码+跑测试",结果它在调研阶段就把浏览器MCP返回的大段HTML塞进了上下文,等真正写代码时,模型已经开始胡言乱语,因为关键信息被淹没了。多智能体集群架构要解决的第一件事,就是把这团毛线拆开:谁负责规划、谁负责执行、谁负责验证。

1.2 四个词各管一段:从大脑到手脚的完整分工

这四样东西不是竞争关系,而是叠在一起的。各自的定位用一个表格就能说清楚:

组件管什么类比
DeepAgents智能体内部的任务拆解、执行、反思、回溯项目组里的管理者与执行者
MCP统一工具接入方式,标准化"Agent调外部工具"
设备的USB-C接口
A2A多个智能体实例之间的通信与协作协议微服务之间的REST API
Skills把可复用流程打包成语义化技能包新人入职领到的岗位SOP手册

理解这个分层是搭集群的第一步。DeepAgents负责把一个项目拆成多个子任务并分派给子代理,MCP让每个子代理能标准化调用外部工具,A2A让不同框架、不同主机上的Agent实例能互相发起任务,Skills则保证所有Agent在干同类活时遵守同一套流程。

打个比方:Skills是"怎么做",MCP是"用什么做",A2A是"怎么把活交给别人",DeepAgents是"谁来做、按什么顺序做"。四层各司其职,单拎任何一个出来都撑不起复杂的自动化场景,但组合起来就是一个从决策到执行再到协作都覆盖的闭环。

2. DeepAgents框架拆解:主代理、子代理与任务循环

2.1 DeepAgents和普通Agent的差异:到底强在哪,和Claude Code比差在哪

LangChain的DeepAgents核心思路是Planner-Executor结构:一个主代理只负责规划,把大目标拆成小步骤,然后动态创建子代理去执行,执行结果再回到主代理做判断,不行就回溯重来。这种思路的工程价值在于,每个子代理的上下文是独立的,不会互相污染。

那"DeepAgents现在的能力咋样,和Claude比差距在哪"?我的实测结论是:它们不在同一个赛道。Claude Code强在开箱即用的终端体验和对代码库的深度理解,你给它一个仓库,它自己就能读、改、测,链路短、体验顺。DeepAgents强在可编程、可定制,你可以自己定义规划策略、终止条件、子代理的分工和工具白名单,适合做需要嵌入业务逻辑的多智能体集群。

差距主要在两方面。一是DeepAgents的默认规划质量还不够稳定,复杂任务容易在子代理之间来回跳,需要你手动调终止条件;二是生态配套,Claude Code有自己的技能和钩子体系,开箱即用,而DeepAgents要自己搭配MCP和Skills才能达到同样的完整度。换句话说,DeepAgents给你的是骨架,你得自己填肉。

2.2 Subagents怎么设计才不翻车:分工粒度、工具白名单与返回协议

Subagents设计最核心的是粒度问题。我踩过最大的坑是把子代理分得太粗,比如一个"后端开发子代理"既管接口设计、又管数据库、又管部署,结果它还是会被工具输出淹没。正确的做法是按工具域或任务域拆到足够细:负责浏览器调研的就只管调研,负责写代码的就只给代码工具,负责测试的就只给测试工具。

给子代理配参数时,有几个关键点要注意:

  • 系统提示词要短而明确:明确说清楚这个子代理的职责边界、输入是什么、输出以什么格式返回。
  • 工具白名单要收敛:宁可少给,不要多给。给一个写代码的子代理配上网页搜索工具,等于请了个容易分心的员工。
  • 最大迭代次数要设死:比如3-5轮。不设上限,一个卡住的子代理会烧掉你大量token。
  • 返回结果要结构化:别让子代理返回一大段散文,要求它返回JSON或带固定章节的Markdown,主代理才能高效判断。

后续流程里,如果主代理要依赖子代理的结果做二次决策,那子代理的返回协议必须在提示词里写死,比如"必须返回{结论、依据、未完成事项}"三个字段,否则主代理每次都要从文本里自己提炼,既费token又不稳定。

2.3 一个3层多智能体的任务流转:从需求到验证的闭环伪代码

我实际跑通的流程大概是三层:主规划代理在最上层,中间是业务子代理,再底下是工具执行代理。下面这段是简化后的伪代码,展示的是结构思路,不是具体API,真机调试时以官方文档为准:

# 伪代码:示意DeepAgents的编排思路 planner = DeepAgent( role="主规划代理", model="strong-model", # 规划模型用更强、更聪明的 plan_prompt="拆解任务,分派给对应子代理,检查结果是否满足交付标准", termination_conditions=[ "plan_valid", # 规划合理且可执行 "no_tool_use", # 当前步骤不需要调用工具 "task_complete", # 所有子任务已完成且验证通过 ], ) frontend_dev = SubAgent( role="前端开发子代理", tools=[playwright_mcp, filesystem_mcp], skills=[component_dev_skill], max_steps=5, output_format="结构化报告", ) qa_agent = SubAgent( role="测试子代理", tools=[chrome_devtools_mcp, exec_command], skills=[test_case_skill], max_steps=4, ) planner.add_subagent(frontend_dev) planner.add_subagent(qa_agent)

这个流程走起来最舒服的地方在于:主代理不会被浏览器截图、DOM节点、代码报错堆满上下文,它只看到每个子代理返回的结构化结论,然后决定是继续、重试还是换方案。说实话,我自己第一次跑通这个闭环的时候,最大的感受不是"AI很聪明",而是"原来把流程限定清楚比让模型自由发挥重要得多"。

3. MCP:把工具变成标准插座的协议层

3.1 MCP到底是什么:软件协议还是硬件协议

很多人第一次接触MCP会问"它到底是软件协议还是硬件协议"。准确说,MCP是应用层的软件协议,它基于JSON-RPC 2.0定义了一套标准的交互方式,让大模型应用能以统一方式发现、调用外部工具和数据源。

类比一下就是USB-C接口标准:不管你的硬盘、显示器、手机是不是同一个品牌,只要都支持USB-C,插上就能用。MCP做的事,是让"模型应用"和"工具服务"两端都遵守同一个接口规范,于是模型换个工具就像换一个USB-C设备一样,即插即用。

MCP的核心交互只有几个阶段:先是initialize握手,客户端和服务端互相确认能力;然后是tools/list,客户端拉取当前服务端提供的能力清单;最后是tools/call,客户端要求服务端执行某个具体工具并返回结果。这套机制不复杂,但解决了大问题——在没有MCP之前,每个Agent接一个新工具都要单独写适配代码,维护成本极高。

3.2 主流MCP Server选型:Playwright、Chrome DevTools与配置示例

MCP生态里我高频用的几个Server,按场景分类大概是这样的:

  • 浏览器自动化:Playwright MCP,适合做页面操作和跨站流程,模型像个人一样控制浏览器。
  • 前端调试:Chrome DevTools MCP,配合谷歌浏览器扩展里的"MCP连接"开关使用,可以让Agent直接读取控制台日志、网络请求、DOM状态,前端开发调试验证非常好用。
  • 三维建模:Blender MCP,让Agent在Blender里执行建模和场景操作。
  • 代码与文件操作:Filesystem MCP、Git MCP,这个基本是自建集群的标配。
  • 接口调试与安全测试:Yakit、Burp Suite这类工具的MCP接入,在合规授权的前提下做接口调试很顺手。

经常有人问"Browser Use MCP和Playwright MCP有什么区别"。我的理解是:Playwright MCP更像一个"自动化测试工具",它通过选择器和浏览器协议精确操作页面元素;Browser Use MCP则更像"给Agent看的浏览器",它更强调让模型通过视觉和语义去理解页面,操作方式更接近人类。前者适合可控的测试流程,后者适合探索式调研。选型时,如果你的任务是需要精确定位某个按钮做操作,选Playwright;如果只是让Agent去"看看这个页面在做什么",Browser Use更自然。

配置MCP Server的通用格式一般是这样的,主流IDE和终端工具都认这套结构:

{ "mcpServers": { "playwright": { "command": "npx", "args": ["@playwright/mcp@latest"] }, "chrome-devtools": { "type": "http", "url": "http://localhost:9229/mcp" } } }

3.3 自建一个MCP Server有多简单:FastMCP入门

如果你的场景在现成MCP Server里找不到,自建一个也没想象中复杂。我用Python的FastMCP库写过好几个内部工具,比如一个用来检索本地代码库的Server,核心代码几十行就够。下面是一个最小示例:

from fastmcp import FastMCP mcp = FastMCP("internal-code-search") @mcp.tool() def search_symbol(keyword: str) -> str: """在本地代码库里搜索符号关键字,返回文件路径和行号列表。""" # 这里接你自己的搜索逻辑,比如rg命令或数据库查询 results = run_grep(keyword) return results[:20] if __name__ == "__main__": mcp.run()

自建MCP Server时有几个细节要特别留意。首先是工具描述要写得清楚,因为工具列表最终是给模型看的,描述越含糊,模型越不知道什么时候该调用它。其次是报错信息要友好,工具内部异常要返回人能读懂的提示,不要直接抛一个堆栈给模型。第三是长任务要做异步,如果一个工具要跑几分钟,一定要设计成先返回"任务已提交,稍后查询结果"的交互,否则模型会一直傻等。调试的话,用官方提供的MCP Inspector可以图形化地查看服务端返回的数据结构,排查问题效率高很多。

3.4 MCP接入的安全边界与配置避坑

MCP给Agent开了工具权限,就等于把一个能操作真实系统的接口交到了模型手里,安全红线必须划清楚。我见过有些教程为了省事,直接贴一个带token的MCP端点地址让人复用,这种习惯很危险。端点一旦泄露,别人就可以通过这个token调用你的服务,轻则白嫖算力,重则数据外泄。我自己现在的原则是:MCP服务一律走本地进程或可控的内网地址,token权限做到最小化,只开当前任务需要的那几个工具。

另外,模型不是人,它不会判断"这个操作风险高不高"。所以能用只读工具的绝不给写权限,能用白名单的绝不给通配符,生产环境的MCP服务最好再加一层审计日志,记录每个工具调用方的IP、内容和时间。多智能体集群里环节越多,安全链路越长,任何一个子代理的越权都可能成为事故的导火索。

4. A2A:让智能体之间说同一种语言

4.1 为什么需要A2A:MCP解决不了智能体之间互调的问题

MCP解决了"Agent调工具"的问题,但没解决"Agent调另一个Agent"的问题。当你只有一个Agent时,MCP足够用;但当你有一整个多智能体集群,里面每个实例可能是不同框架写的、跑在不同的主机上,那就需要一套公共的通信协议,让A2A跑在Agent与Agent之间,职责是把这个应用层的交互标准化。

A2A协议的核心思路是把每个Agent的能力作为一种可调用的服务暴露出来,类似于微服务架构里的"注册中心+服务发现"。每个Agent有一份描述自己的清单,其他Agent看了这份清单就知道能找它干什么、怎么调用。

4.2 A2A的核心机制:Agent Card、Capabilities与任务生命周期

A2A里头最重要的概念是Agent Card,相当于智能体的名片。一份Agent Card大致长这样,实际字段以官方规范为准:

{ "name": "frontend-dev-worker", "description": "负责前端组件的开发与调试,支持React和Vue项目。", "url": "http://localhost:8787/", "capabilities": { "streaming": true, "pushNotifications": false } }

调用方拿到Agent Card后,会通过协议发起一个任务,比如用tasks/send提交一个开发请求。随后这个任务会经历提交、执行、完成、失败等几个状态,调用方可以轮询任务状态,也可以通过流式通道实时接收执行进度。这套任务生命周期设计,本质上就是在Agent之间建立了一套"发活-干活-回话"的标准流程,和人与人之间的工作交接非常像。

4.3 A2A+DeepAgents组合的协同模式:能力端点的对外暴露

在我搭的集群里,A2A和DeepAgents是这样配合的:内部用DeepAgents完成一个集群内的任务拆解和执行,但每个集群会通过A2A暴露一个"能力端点",对外做服务注册。比如"代码审查集群"对外暴露一个审查入口,"前端开发集群"对外暴露一个开发入口。其他集群的Agent不用关心内部怎么实现的,只需要通过A2A协议发任务、接结果。

这个模式的好处是解耦非常彻底。任何一个集群要升级内部实现,只要保持A2A的Agent Card和任务协议不变,其他集群完全无感。而且A2A天然支持异构系统,你甚至可以一边跑LangChain的DeepAgents,另一边跑其他框架写的Agent服务,只要两边都遵守协议就能协作。A2A在这里的角色就是集群与集群之间的"通信总线"。

按我实践下来的结果,A2A真正的价值不在单机、单进程,而在于分布式场景:多个项目组各自维护自己的Agent集群,同时通过A2A暴露公共服务,避免重复造轮子。这种组织方式特别适合中大型团队,和一个"内部微服务化的Agent平台"差不多。

5. Skills:把经验固化成语义化技能包

5.1 从system prompt到SKILL.md:把SOP从提示词里解放出来

MCP解决工具调用,A2A解决Agent间通信,但还有一个问题悬而未决:同一个团队里,多个Agent干同一类活时,怎么保证大家遵守同一套流程?传统做法是把流程写进system prompt,但提示词越来越长之后,模型反而抓不住重点,而且不同Agent维护同一份提示词,必然出现漂移。

Skills解决的正是这个问题。它的核心是一个SKILL.md文件,用Markdown写成,文件头带结构化元信息,正文就是执行步骤和注意事项。Agent启动时,系统会根据当前任务自动匹配相关Skills,只把匹配到的内容注入上下文。这种机制叫渐进式披露:不在每次请求里把所有知识都塞给模型,而是按需加载,既省token又提升精度。除此之外,Skills还可以附带代码、模板、配置文件等参考文件,让"技能"不只是文字说明,而是可以直接被执行的工具包。

5.2 社区Skill库与实战开发:一份可复用的前端开发Skill

社区里已经有不少现成Skill库,比如TypeSafe AI在GitHub上开源的skills集合、Superpowers这类带管理系统的高阶Skills,质量参差但值得借鉴。除了社区方案,我更推荐自己沉淀团队内部的Skills库,把它当代码一样维护。

下面是我实际用过的"前端组件开发Skill"的简化结构,可以看出一个合格的SKILL.md长什么样:

--- name: frontend-component-dev description: 适用于React组件开发任务。当用户要求新建组件、修改组件样式或修复组件交互时使用。 --- # 前端组件开发流程 1. 先查看项目现有组件目录结构,确认是否有可直接复用的基础组件。 2. 新建组件时,遵循项目目录规范,样式文件与组件文件放在同一目录。 3. 组件props必须写TypeScript类型定义,禁止使用any。 4. 写完组件后,必须补充组件对应stories或demo页面。 5. 组件交互涉及状态变更时,优先使用受控组件模式。 ## 注意事项 - 不要直接修改公共组件,除非任务明确要求。 - 样式变量从全局theme文件读取,不要硬编码颜色值。

写好SKILL.md的关键是description的描述要匹配得好。模型是靠这行描述来判断"什么时候该加载这个技能"的,写得太宽泛会导致无关任务也触发它,造成上下文污染;写得太窄又容易漏触发。我的建议是:描述里写清楚适用场景、触发条件、不适用场景,比如上面那个例子就明确了适用范围、排除了"直接改公共组件"的情况。这样模型在判断时就有据可循,匹配失误率能降低一半以上。

5.3 Skills的使用边界:别把技能库变成垃圾堆

Skills越用越多之后,很容易出现一个新的乱象:技能库变成一座没人维护的垃圾山。几十个SKILL.md文件堆在那里,互相触发冲突,模型频繁加载无关技能,上下文又被塞满了。我管理Skills库的原则有三条:

第一,每个技能都必须有明确的边界,在description里写清楚"本技能不负责什么",防止模型误触发。第二,技能要像代码一样走评审,任何人新增或修改SKILL.md,都要提交PR,说明为什么需要这个技能、覆盖了什么场景、和现有技能有什么重复。第三,定期清理,每两三个月跑一次技能库审查,把使用率低的技能归档,避免知识垃圾越堆越多。

有一个比较隐蔽的坑:Skills和MCP的基础能力容易重叠。比如你已经用Playwright MCP在操作浏览器,同时又写了一个"网页操作Skill"教Agent怎么点按钮,那模型就会陷入两套指令打架的混乱。我的处理方式是:MCP管"能力",Skills管"流程"。凡是工具能直接做到的事情,不要写进Skills;Skills只负责封装那些需要决策判断和步骤编排的经验。

6. 多智能体集群全流程实战:从设计到部署

6.1 场景设定:一个带QA的AI开发集群

前面把四个组件逐个讲清楚了,接下来实操一把,看看怎么把它们拼成一个能用的多智能体集群。我用一个贴近日常的场景来演示:搭一个"需求分析-前端开发-后端开发-测试审查-文档生成"的AI开发集群,每个角色一个Agent实例,其中带一个独立的QA子代理做质量把关。

任务设定是:给一个内部后台系统新增一个用户管理页面,包含列表展示、搜索筛选、状态切换三个功能。最终交付物是完整的前后端代码、测试报告、接口文档。这个场景覆盖了多智能体协作的典型难点:跨角色任务交接、工具调用依赖、质量验证闭环。

6.2 集群架构分层表:一张图看懂怎么部署

我在实际部署时会把集群分成四层,每层对应一个组件:

层级对应组件部署内容职责
编排层DeepAgents主Planner实例拆解任务、分派、验证结果、回溯决策
执行层Subagents前端开发、后端开发、QA子代理各自完成领域内任务,返回结构化结果
工具层MCP ServersPlaywright、Chrome DevTools、Filesystem、Git等向子代理提供标准工具能力
知识层Skills前端组件开发、接口设计、测试用例等技能包给子代理提供领域SOP和最佳实践

通信层用A2A把整个集群暴露给外部调用方,同时支持把这个集群作为一个"AI开发服务"提供给其他团队。四层之间不互相侵入,替换任何一层都不影响其他层的运行。

6.3 全流程配置步骤:从主Planner到每个Subagent的参数

真正搭建时,我按下面几步走,一步都不会跳:

  1. 定义任务边界:开工前先把"用户管理页面"拆成可验证的交付物清单,包括前端页面文件、后端接口、测试用例、文档。主Planner的终止条件里加一条"所有交付物已生成且QA通过"。
  2. 配置编排层:新建主Planner实例,让规划模型选当前能力最强的,关闭全部工具权限,它只做拆解和决策,不直接操作工具,防止规划者被工具结果带偏。
  3. 配置工具层:启动需要的MCP Server,给前端开发子代理挂上Playwright和Chrome DevTools,后端开发子代理挂上Filesystem和Git,QA子代理挂上执行命令和浏览器检查。
  4. 配置知识层:给前端开发子代理加载组件开发Skill,后端开发子代理加载接口设计Skill,QA子代理加载测试用例Skill。
  5. 配置通信层:写集群的A2A Agent Card,把"AI开发服务"的能力注册出去,设置回调地址和任务超时时间。
  6. 预跑一个最小任务:不要一上来就跑全流程,先丢一个"给现有页面加一个按钮"的小任务,验证工具链路、Skill注入和返回格式是否正常。
  7. 跑全流程并盯日志:正式执行后,观察主Planner的每一步决策和子代理的返回,任何一个环节超时或失败都要查日志溯源。

6.4 参数选择与成本规划:如何让集群既稳定又不烧钱

多智能体集群跑起来以后,最现实的问题就是成本。我的经验是,规划模型和执行力模型分开选型能省不少钱。主Planner只需要做决策和判断,给最强模型;子代理干的活偏执行,可以用速度更快、更便宜的模型。但前提是子代理的SOP足够清晰,否则便宜模型容易在流程中跑偏,反而浪费更多token。

其他几个参数我调了多次,现在固化为这几个值:

  • 主Planner最大迭代次数:10-15轮。太少会打断复杂任务的拆解,太多会陷入无意义的反复调整。
  • 子代理最大步数:3-5步。子代理的任务足够细化,一般5步内能完成,超过这个数就说明任务拆分粒度不对。
  • 工具调用超时:30秒。超过30秒未返回结果的工具,直接判定失败并让子代理走降级分支。
  • A2A任务超时:10分钟。防止一个Agent服务端卡住导致整个集群任务堆积。

成本最大的消耗点往往不是模型本身,而是MCP工具返回的大量原始数据。浏览器MCP一次页面抓取可能返回几万token的HTML,如果直接进了上下文,一次任务跑下来费用直接翻倍。我的建议是:在MCP Server端做数据精简,让工具只返回摘要和结构化信息,不要返回原始页面全文。这个改造的省钱效果立竿见影。

7. 常见问题与排查技巧实录

7.1 典型问题速查表:症状、原因与解法

下面是这半年折腾过程中高频遇到的问题,我整理成了一张速查表,走到哪个坑直接对照找解法:

症状常见原因解决办法
子代理陷入死循环,反复调用同一个工具终止条件没设或太宽松在DeepAgents配置里设最大步数和"无工具可用即终止"条件
模型始终不调用某工具工具描述写太含糊重写MCP工具的description,写清适用场景和调用时机
多个子代理结果互相冲突任务边界重叠,返回格式未统一重新拆分职责,子代理提示词里写明返回字段
响应越来越慢上下文被工具返回的大段数据塞满在MCP Server端做数据精简,只返回摘要
模型频繁触发无关SkillSKILL.md的description写得过宽收敛description,写明适用范围和排除条件
带token的MCP端点被到处转发安全意识不足立即轮换token,按最小权限原则重新配置访问控制
A2A任务一直停在等待状态服务端Agent卡死,没有超时控制给A2A任务设置超时,并配置失败重试策略

7.2 我的排查方法论:先工具、再子代理、最后看编排

跑多智能体集群和调传统后端代码最大的不同是:你没有断点调试的机会,只能靠日志和结构化输出去定位问题。我排故障的固定顺序是这样的:

第一步,隔离工具层。任何MCP Server在接入集群前,先单独用MCP Inspector手工调用一遍,确认工具本身返回正常。工具层的故障最好排查,大多数情况下都是服务没启动、端口不匹配、参数格式不对这三个原因。

第二步,测试单个子代理。给子代理单独发一个它职责范围内的小任务,检查它的执行步数和返回格式。如果子代理在独跑时都完不成任务,那就和主Planner没关系,问题在子代理的工具配置或Skill加载上。

第三步,再跑完整流程。确认每个子代理都正常后,才允许主Planner串起全流程。全流程出错时,优先看主Planner的决策日志,看它是怎么拆解任务、怎么选择子代理的。很多时候全流程失败不是执行问题,而是规划本身就错了——比如把需要并行执行的子任务排成了串行,白白浪费时间。

日志是排查的生命线。我在每个子代理和A2A任务里都塞了一个trace id,从主Planner下发的每个子任务到最终的执行日志,全部串联起来。没有这套链路追踪,在多智能体集群里出了问题你根本不知道是哪一环在说谎。链路追踪这一块务必在搭集群的第一天就做好,不要等踩坑了再回头补。

最后再分享一个经验:多智能体集群出了问题,先别急着改模型提示词。先看是不是MCP工具返回了脏数据,再看是不是Skills把流程限制死了,最后才考虑调Planner的规划策略。顺序反了,你会在错误层面做一堆无用功,问题还会反复出现。这套排查方法论,是我自己在无数次"改了提示词还是不管用"之后,用真金白银的token换来的教训。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询