ARTICLE DETAIL

资讯详情

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

灵境伴侣多智能体改造复盘:DeepAgents、MCP、A2A与Skills实践

灵境伴侣多智能体改造复盘:DeepAgents、MCP、A2A与Skills实践 最近在整理“灵境伴侣”这个产品时我翻到一年前的代码库当时的架构简单得有点“原始”一个对话接口、一个向量数据库、一套硬编码的角色提示词所有逻辑挤在一个单体服务里。早期的确跑得挺顺但随着角色增多、用户长期记忆变厚、交互方式从纯文本扩展到语音和图片这套单体的毛病开始集中爆发。用户聊到第十天一个请求塞进去的上下文能占掉大半token配额角色人格忽冷忽热想加一个日程提醒功能都要动主流程代码。我意识到问题不在某个模型不够强而在组织架构错了。后来我把整个系统推倒重来改成了基于 DeepAgents 编排、MCP 统一接工具、A2A 做智能体互联、Skills 沉淀专业能力的多智能体架构。这篇文章就是这次改造的完整复盘把“为什么拆”“怎么拆”“拆完遇到哪些坑”都讲清楚。如果你手里也有一个从对话机器人往多智能体方向演进的系统或者正在被上下文失控、角色不稳定、功能难扩展的问题折磨这篇内容应该能给你一些可以直接上手的思路。1. 为什么灵境伴侣必须从单体走向多智能体很多团队对多智能体的第一反应是“炫技”。我做技术选型之前也这么想直到单体架构的痛点真实发生在自己项目里我才意识到多智能体不是目的而是复杂对话系统在某个阶段绕不开的工程方案。灵境伴侣的定位是 AI 虚拟陪伴用户会创建一个虚拟角色和它连续聊几个星期甚至几个月。这个场景天然需要长期记忆、稳定人格、多模态交互和个性化反应单靠一个模型实例运行全部逻辑是撑不住的。1.1 单体实现的三个死穴第一是上下文失控。用户在第一天创建角色时说的“我叫小林喜欢猫”系统记下来了到第十五天用户已经和角色聊了几百轮所有历史消息如果都塞进上下文模型能处理的上限很快被击穿。即便用滑动窗口截断也会丢掉早期的重要设定用户会明显感觉到“角色忘了我是谁”。我在单体阶段用过摘要压缩把每日对话总结成几条要点塞进系统提示但还是存在信息损失而且摘要本身也要算token。第二是角色人格不稳定。单体模式下角色设定、性格参数、说话风格、当前情绪、长期记忆全部堆在一个系统提示里几千字的提示词会让模型注意力分散。实测下来非常明显同样是温柔型角色上午回复还会用“嗯嗯、好的”下午就变得公事公办用户询问角色喜好角色可能给出和之前矛盾的回答。这不是模型不够聪明而是把所有互相干扰的信息塞进同一个上下文窗口模型根本不知道该优先遵循哪一条。第三是功能扩展困难。灵境伴侣想加记忆检索、天气查询、图片生成、日程提醒这些能力单体架构只能往对话主流程里不断塞分支。每加一个功能主服务的复杂度就上一个台阶回归测试的工作量翻倍而且任何一项工具调用失败都会拖垮整个对话响应。到后期我甚至不敢随手改一个角色卡字段因为不知道链路里哪段逻辑会因此崩溃。一个小功能要评审半天。1.2 多智能体架构带来的回报拆成多智能体之后我最大的直观感受是“失控被控制住了”。原来所有事都由一个Agent干现在是不同Agent各管一段角色人格Agent只回答“这个角色应该怎么说话”记忆Agent只负责“把这件事存下来/把这件事想起来”情感Agent只做“用户这句话背后的情绪是什么”工具Agent只执行“调用天气接口并返回结构化结果”。每个Agent的上下文都精简到只包含自己需要的字段模型每步都能聚焦不会背景信息过载。刚才举的三个死穴都有了对症解法。上下文方面长记忆被收敛到记忆服务里每次对话按需检索而不是全量灌入token开销直接砍掉一半以上人格稳定方面角色卡字段作为独立模块由人格Agent在每次回复前读取并固化为风格约束不会再被其他信息稀释扩展能力方面新功能以“工具”或“Skill”的方式挂到总线上不需要改主流程代码加一个MCP服务、注册一条A2A路由就能上线。我还发现一个额外好处每个Agent独立部署、独立更新之后出问题了可以通过日志和链路追踪精确定位。原来单体阶段出现一次异常回复根本不知道是哪段提示词或哪个函数出了问题现在只要看任务链路就能判断是记忆Agent检索失败还是人格Agent读取角色卡超时。这个可观测性在单体阶段是不可能有的。我和原来的架构做过一组对比放在这里很直观。对比维度单体架构多智能体架构上下文管理全量或粗暴截断易丢失关键记忆按需检索专Agent专用上下文片段人格稳定性依赖系统提示词注意力漂移严重角色卡独立加载人格约束稳定功能扩展方式改主流程牵一发动全身注册MCP工具或Skill低侵入问题定位链路模糊难定位异常来源任务ID贯穿全链路可精确溯源单功能故障影响拖垮整个对话降级或重试不影响主流程资产复用全部耦合在项目中Skills、Agent能力可跨产品复用2. DeepAgents、MCP、A2A、Skills 四件套到底解决什么问题多智能体不是把一堆Agent塞进系统就行它需要一套组织逻辑。我在灵境伴侣里用到的四个东西各管一块DeepAgents负责整体编排推理MCP负责统一接工具A2A负责Agent之间协作通信Skills负责复用专业能力。它们不是平行关系而是叠在一起形成完整工程闭环。下面逐个拆开说每个都用灵境伴侣的实际场景来对应。2.1 DeepAgents把“一次生成”变成“多阶段推理”DeepAgents在我理解里核心不是“多个Agent排队跑”而是一种深度编排方式先由规划层把用户请求拆成有依赖关系的子任务再由执行层按图推进最后统一汇总验证结果。我把这类比成拍电影单个模型像是全能演员什么都会演一点但一场复杂戏不可能靠一个演员从头演到尾需要导演分镜头、场记记录、道具组配合、化妆师按场景调整形象最后剪辑合成。灵境伴侣里有个典型场景用户对角色说“我下周要去面试你陪我练练吧”。单体架构下这句话会被当成普通聊天内容直接生成回复但多智能体编排下DeepAgents会先规划出几个子任务读取用户日历看看下周哪一天确实有面试安排需要MCP工具、把角色切换成面试官人格需要人格Agent、确认面试岗位后从知识库检索该岗位常见问题需要Skills、再让角色以面试官口吻进行模拟问答需要生成Agent。每个子任务有独立的输入输出契约规划层只负责调度不亲自干活。这样编排有什么好处第一是每个子任务都小巧聚焦模型不必在同一个上下文里既看日历又调人格还生成回答错误率显著下降。第二是链路可观测用户说了一句话之后系统做了什么、每一步耗了多少时间、哪一个环节失败都能拆出来单独看。第三是支持插入人工干预节点比如安全Agent可以在生成前对模拟面试内容做合规检查这在单体架构里很难做到位。实现DeepAgents时我推荐把任务依赖画成有向无环图而不是简单的流水线。流水线是1→2→3顺序执行但真实场景很多子任务可以并行比如“读取日历”和“检索面试题库”互不依赖应该并行做。我的做法是给每个子任务标注依赖列表调度器只在依赖全部完成时才触发执行这个模型往后的扩展性会好很多。2.2 MCP统一外部工具接入协议MCPModel Context Protocol解决的是大模型如何标准、统一地访问外部数据与工具的问题。在没有MCP之前我每接一个工具都要写一套自定义调用代码接数据库写一套查询封装接图片生成写一套HTTP请求接搜索再写一套。模型要使用这些工具只能通过提示词把工具描述塞进去工具返回的数据格式也五花八门主模型需要费力理解。MCP的逻辑可以类比成USB-C过去每个设备有自己的充电接口现在是统一接口插上就能用。MCP把工具和外部数据包装成标准化“资源”和“工具”通过统一的协议暴露给大模型。架构上分三层MCP Host承载模型的应用程序比如灵境伴侣的主服务、MCP Client负责与Server建立连接的客户端组件、MCP Server实际提供工具或资源的服务端。模型在Host里通过Client发现Server提供的工具列表按需调用返回统一格式的结果。灵境伴侣里接入的第一个MCP服务是记忆服务。原来我的记忆读写逻辑散落在代码各处有的地方直接查向量库有的地方走内部REST接口主模型拿到数据后格式不统一。接入MCP之后记忆检索和记忆写入变成两个标准工具定义好工具描述、入参、出参协调者Agent就能统一调用。后面再接天气、日历、图片生成、音乐播放都是同一套流程不用再为每个工具单独写适配层。另一个实用价值是工具返回结果的规范化。我给记忆服务规定了返回结构的最大体积、字段顺序、摘要优先级MCP Server在返回前就做好裁剪主模型拿到的永远是“top3相关记忆一句话摘要”而不是一大段原生检索结果。这一点对控制token、保持主模型注意力都特别关键。2.3 A2A让智能体之间真正协作起来A2AAgent-to-Agent是智能体之间协作的通信协议。如果说MCP解决的是“智能体怎样用工具”A2A解决的就是“智能体怎样给其他智能体派活、索要结果”。没有A2A之前我在单体里想让两个Agent配合只能把其中一个Agent的输出拼到另一个Agent的输入提示词里。这种做法在Agent少的时候勉强能跑一旦超过三四个调用关系就变成意大利面根本无法维护。A2A原本解决的是Agent之间发现能力、发送任务、同步状态与交换结果的问题核心概念包括Agent Card描述一个Agent能力清单也就是“我是谁、我能干什么”、Task一次具体的协作请求带任务ID、Message承载体、Artifact任务产出的数据结果。我理解它就像企业内部不同部门之间的工单系统A部门不直接指挥B部门的人怎么干活而是发一个工单写明“我需要什么、期望什么时候拿到”B部门处理完再回传结果中间状态可通过工单号跟踪。在灵境伴侣里最频繁的A2A协作发生在角色Agent和记忆Agent之间。用户和角色聊到“你还记得我们第一次见面那天吗”时角色Agent自己不知道答案它需要向记忆Agent发起一个查询任务把用户ID、角色ID、要检索的主题作为Payload发过去记忆Agent检索完成后返回一组结构化的记忆片段。整个过程对用户无感但系统层面是标准的A2A通信而不是拿一个Agent的完整回复拼模板。A2A还有一个关键设计任务状态。子任务进行中、已完成、失败、被取消这些状态都带在消息协议里。主Agent可以通过轮询或回调感知结果。我做灵境伴侣时把A2A消息加上超时控制避免某个Agent挂起导致全链路阻塞这个细节后面在踩坑部分再展开。2.4 Skills把专业能力沉淀为可复用资产Skills在智能体体系里充当的是“专业手册SOP”的角色。它把某类任务需要的提示词模板、工具调用规则、参考案例、输出格式要求打包成一个可加载的单元智能体在特定场景下才动态地把这个Skill加载进运行环境而不是把所有知识和规则永久堆在系统提示词里。为什么需要Skills两个原因。第一是token有限不可能把所有专业能力都塞进上下文。灵境伴侣既要做面试陪练、又要做心理咨询、还要会讲睡前故事把这些话术全部写进提示词还没开始聊天就已经超出预算了。按需加载Skill后模型平时只保留基础指令识别到用户需求时再加载对应专业单元。第二是知识隔离不同Skill之间规则可能互相冲突如果把冲突的指令同时放在上下文里模型行为会变得不可预测触发条件加上规则隔离能避免这个问题。一个Skill文件通常包括三个部分元数据头Skill的ID、名称、触发条件、依赖工具、优先级、主体规则角色设定、步骤SOP、说话风格示例、资源引用比如需要调用的MCP工具清单、参考文档路径。运行时协调者根据用户请求判断命中哪些Skill再按优先级注入当前Agent的执行上下文。我在灵境伴侣里给面试陪练场景定义过一个Skill触发条件是用户提到“面试”“入职”“offer”等关键词加载后会切换角色人格激活“面试官语气”同时调用日历工具确认面试时间再根据岗位类型从知识库检索常见面试题。没有这个Skill之前这些逻辑散落在聊天分支里维护成本极高有了Skill之后它是一个独立文件可以直接测试、修改、复用甚至迁移到另一个产品中。3. 灵境伴侣的改造实录从角色模块到工具链理论讲完说点实操。我给灵境伴侣做的多智能体改造不是一次性推倒重来的而是先拆边界、再定协议、后补资产的三步走。如果你也要做类似改造可以参照我当时的执行路径先把整体角色分清楚再逐个实现MCP工具、Skill文件和A2A协作消息。3.1 角色分工与一次请求的完整旅程先看我现在系统里的Agent分工这张表在开发阶段一直贴在白板上每个Agent干什么、输出格式是什么都很明确。Agent名称核心职责主要输出物依赖的Skill协调者Agent意图识别、任务分解、结果聚合、兜底回复结构化子任务清单、最终回复无负责调度角色人格Agent加载角色卡、生成符合人设的表达风格人格约束字段、语气指令角色扮演基础Skill记忆Agent长期记忆的写入、检索、冲突消解结构化记忆片段或更新确认记忆管理Skill情感Agent识别用户情绪状态输出情感标签与介入建议情绪标签、建议动作情感陪伴Skill工具Agent统一通过MCP调用外部工具并处理返回结果工具执行结果、结构化摘要工具适配Skill安全Agent内容合规检查、越界行为拦截放行/拦截标记内容安全Skill一次典型请求的完整旅程是这样的用户发来“我明天面试好紧张你能当面试官帮帮我吗”协调者Agent先做意图识别判断这是“求职陪练”场景而不是普通闲聊。接着进入DeepAgents规划层把请求拆成并行子任务角色人格Agent读取当前角色设定并切换到面试官模式工具Agent通过MCP调用日历服务确认用户明天的日程面试陪练Skill被加载提供面试流程话术。这些子任务通过A2A协议分派给对应Agent各自执行完成后把结果汇总给协调者协调者最后统一生成一段完整的模拟面试开场白并交给安全Agent做合规检查通过后返回给用户。请求链路里可以看到三个关键动作编排分工、工具调用、智能体协同。那Memory Agent在这个链路里出现在哪用户和虚拟角色处于“面试辅导”这个新情境系统会把这个新记忆写入长期记忆库等第二天用户真的面试完再来找角色复盘时记忆Agent就能检索到“我昨晚陪用户做过模拟面试”让角色说得像真记住了这件事。这就是长期记忆在角色陪伴里的黏性价值。3.2 通过 MCP 接入记忆服务MCP服务的实现方式有很多种我用的是Python生态的FastMCP框架因为它对工具注册的封装比较简洁几行代码就能把一个函数变成模型可发现的工具。下面是我当时写记忆服务的最核心版本删掉了业务细节保留结构和注释。# memory_server.py from fastmcp import FastMCP mcp FastMCP(memory-service) mcp.tool() def memory_search(user_id: str, role_id: str, query: str, top_k: int 3): 检索用户与虚拟角色之间的长期记忆片段返回最相关的top_k条。 Args: user_id: 用户唯一ID role_id: 虚拟角色唯一ID query: 用户当前引用的关键信息或问题 top_k: 返回的记忆条数建议默认3 Returns: 结构化记忆列表每条包含时间、摘要、情绪标签、原文片段。 vectors embed(query) hits vector_db.search(collectionfmemories_{user_id}_{role_id}, query_vectorvectors, top_ktop_k) results [ { time: hit.time, summary: hit.summary, emotion: hit.emotion_tag, snippet: hit.snippet, score: hit.score, } for hit in hits ] return results mcp.tool() def memory_write(user_id: str, role_id: str, content: str, emotion_tag: str): 将一段对话内容压缩摘要后写入长期记忆库并记录情绪标签。 summary summarize(content) vector_db.insert(collectionfmemories_{user_id}_{role_id}, textsummary, metadata{emotion: emotion_tag, time: now()}) return {status: ok, memory_id: gen_id()}这个MCP Server跑起来后在协调者Agent的配置里把endpoint指向它工具列表就会自动出现在模型可调用的列表里。我在工具描述里刻意写清楚入参含义和返回结构这是因为模型靠描述决定何时调用、传入什么参数描述写得越严谨实际调用成功率越高。接入MCP后的一个要点是返回裁剪。原始向量库检索可能返回几百字的长文本如果完整塞给模型既浪费token又干扰判断。我在Server端就把返回结果压缩成上面代码里的短结构每段记忆只保留摘要和关键字段。实测下来同样一次记忆检索接入前主模型要读800字原始文本接入后只读120字的精炼结果响应质量和速度都有提升。3.3 Skills 加载与 A2A 协作的关键实现Skill文件的格式没有统一强制标准我用的是YAML头Markdown正文。YAML头负责让系统识别这个Skill的元信息Markdown正文负责给模型提供可执行的规则。这里展示当时面试陪练Skill的简化版。--- id: interview_coach name: 面试陪练 description: 当用户提到面试、offer、简历、HR等关键词时切换到面试官角色进行模拟面试 trigger_keywords: [面试, offer, 入职, HR, 简历, 岗位] dependencies: mcp_tools: [calendar_check, web_search] agents: [role_persona_agent] priority: 5 --- # 面试陪练执行规则 ## 角色 你是一位经验丰富的HR面试官语气专业但有亲和力。 你当前是虚拟角色“林溪”请用该角色的语言风格进行模拟面试。 ## 流程 1. 先确认用户面试的岗位和目标公司 2. 检索该岗位的常见面试题优先使用web_search工具 3. 从简单问题开始逐题模拟每题结束后给一句正面鼓励 4. 如果用户表现出明显焦虑调用情感Agent获取安抚话术 ## 约束 - 每次只问一个问题不要连续追问 - 不要针对用户的私人生活性别、年龄、婚育提出任何问题 - 回答保持口语化不要输出“以上就是……”这类总结句式这个Skill文件具体怎么用运行时协调者会先把用户消息跑一遍关键词匹配命中“面试”“offer”等词后把Skill的正文内容注入角色Agent的上下文同时把依赖的MCP工具calendar_check、web_search临时注册到工具区。整个加载过程对用户无感但角色Agent的“知识结构”已经完全不同了。A2A协作的实现我给每个Agent注册了一个独立endpoint统一走同样的消息协议下面是面试场景里协调者发给记忆Agent的一条消息示例。{ protocol: A2A, version: 1.0, task_id: task_1024, from: coordinator, to: memory_agent, operation: query, payload: { namespace: story_beats, query: 用户和角色第一次见面那天的细节, user_id: u_2058, role_id: r_linxi, top_k: 3 }, timeout_ms: 5000, callback: coordinator://resolve/task_1024 }收到这条消息后记忆Agent会执行检索然后把结果格式化成Artifact回传。回传消息里同样带着task_id协调者根据task_id把结果对齐到对应子任务。这套设计保证了即使某个Agent内部换模型、换版本只要协议不变整个链路都能正常协作。我在实现A2A时遇到一个比较常见的选择题Agent之间是“直接互调”还是“统一走协调者转发”我的答案是初期统一走协调者转发不要放开任意两个Agent直接通信。原因很简单直接互调会形成网状依赖排错难、审计难、很容易出循环调用统一走协调者则所有通信都有日志、有据可查。等系统成熟稳定之后再考虑把高频、低风险的固定对话链路优化成直连。4. 工程落地中的坑与排查速查表多智能体改造不是搭完框架就完事了真正的琐碎问题都出现在运行期。这一节把我踩过的最典型的坑都列出来每条都给排查思路和解决方向最后附一张速查表方便你直接对照。4.1 token 爆炸与上下文污染第一版多智能体我犯了一个很蠢的错误每个Agent在收到任务时都把用户输入的原文本复制一份塞进自己的上下文以为这样“信息最完整”。结果是一个中长度的多智能体调用链总共消耗了相当于原来单体三倍以上的token响应延迟也翻了几番。这本质上不是模型的问题而是上下文设计出了问题。解决方向是引入“黑板模式”。协调者在任务开始时只保留必要的元信息和任务ID各Agent只在自己执行阶段读取需要的字段可以看作不同部门的员工共用一个公司公告栏需要哪条公告自己去查而不是人手一份全量文档。具体落地时我给协调者增加了一个全局上下文对象里面只有用户原始意图、当前任务依赖关系、需要共享的最终结果子Agent调用时通过A2A消息传入的payload只包含该子任务需要的最小字段绝不传全量对话历史。实测之后同样的面试陪练功能token消耗从多智能体版初版的12万降到4.5万而且回复质量反而更好。核心原因很简单模型每次只需要看一小块信息注意力更集中生成的文本就更贴合目标。4.2 子任务死锁与编排超时多智能体系统有一个很反直觉的现象单个Agent都很正常连起来却有概率卡死。我遇到的一次典型问题是角色Agent在一次请求里需要同时向记忆Agent和工具Agent求助我在实现A2A时用了同步阻塞回调结果记忆Agent超时未响应角色Agent一直等待而协调者又在等角色Agent整个链路挂起直到网关超时。这个问题的根子在于“协作链路上没有超时预算”。解决方案是给每个A2A消息加两层控制第一层是单次请求超时时间比如5000毫秒第二层是任务跳数限制每转发一次跳数加一超过5层时强制回退给协调者处理。同时把阻塞式调用改成异步回调模式父Agent发出子任务后不干等先去处理其他分支子任务完成后再通过回调把结果带回来。我在系统里加了一个“兜底心跳”协调者每隔固定时间检查未完成任务清单发现超时任务就标记为失败并从备用Agent或规则引擎里生成降级回复。经此改造后类似卡死的情况再没出现过最坏情况只是某次回复质量差一点但整个请求不会挂死。4.3 MCP 工具返回噪音与工具降级MCP工具上线初期工具返回什么样的数据直接决定了主模型能不能正确使用。我遇到过搜索工具返回10条完整网页摘要每条200字模型一下要处理2000字噪音信息结果生成的回复变得冗长且偏离重点。后来我在工具描述和Server端同时做约束返回最多3条结果每条只保留标题、核心结论和信源链接其余全部截断。另一个容易忽略的问题是工具故障。MCP Server是独立服务它不可能永远在线一旦记忆服务挂了整个系统如果原样把异常抛给模型模型会困惑甚至胡言乱语。我的做法是给每个关键工具配置降级策略记忆服务不可用时角色Agent自动切换到“从当前对话中提取临时印象”模式虽然无法引用长期记忆但至少让对话冷启动不中断日历工具不可用时协调者直接跳过日程确认步骤改为在回复中询问用户。工具调用失败后不要重试超过两次。重试会增加延迟且大概率同样失败不如直接降级。我把这个规则写进了工具Agent的Skill里第一次失败检查错误类型第二次失败立刻降级绝不无限重试。4.4 常见问题排查速查表我把实际运行中最常遇到的问题整理成表格表里的排查思路都是我亲手验证过的可以直接当作战场手册用。现象可能的根因排查方向解决办法角色语气突然改变人格Agent未读取角色卡检查角色卡的读取链路是否有缓存未更新人格Agent每次执行前强制重新加载角色卡用户问“你还记得吗”但角色毫无反应记忆Agent未匹配到相关记录查看A2A消息中的namespace是否对不上统一记忆检索的命名空间增加同义关键词扩招一次请求token消耗异常大子Agent上下文复制了全量历史追踪A2A消息中payload字段体积改为黑板模式只传最小必要字段工具返回了格式很乱的JSONMCP Server输出未做规范化检查Server端是否有后处理步骤在Server端统一结构仅返回必要字段两个Skill同时触发且指令矛盾Skill冲突检测缺失查看命中Skill的优先级和关键词重合度增加优先级仲裁运行时只激活最高优先级Skill子Agent卡死导致整个请求超时缺少单次超时和任务跳数限制查看A2A消息中的timeout与hops字段加超时预算、异步回调、兜底Agent降级模型反复调用同一个工具工具描述触发条件写得太宽泛检查工具Description是否够精确细化触发条件增加不适用场景说明Agent之间出现循环调用允许了不受约束的直连接通信查看A2A路由日志是否有重复task_id初期全部走协调者转发禁止网状直连有些坑看起来很小但写在这里我是有过真实教训的。比如“人格Agent未读取角色卡”这种问题看起来像是模型随机出错实际是角色卡在做缓存时没有带版本号导致更新后的设定无法生效。排查这类问题别只看模型输出先看数据链路有没有正确贯通。多智能体改造走到这一步我的体会是这套东西真正的价值不在“Agent数量多”而在组织逻辑清晰、边界明确、每一条消息和工具调用都可追溯。灵境伴侣从单体切到多智能体之后新功能上线速度明显变快记忆相关的问题少了大半角色人格也不再“精神分裂”。如果让我再从头做一次我会更早把边界拆清楚而不是先写一堆聊天逻辑再回头重构。最后分享一个测试技巧每接入一个MCP工具或新增一个Skill先用一条最小化的A2A消息单独验证该Agent的执行链路确认没问题再连进全流程。别嫌这一步麻烦它能帮你省下后面排查复杂问题的一大把时间。
返回列表