ARTICLE DETAIL

资讯详情

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

Dify 中级实验(13):多 Agent 协作——如何编排多个智能体分工干活?

Dify 中级实验(13):多 Agent 协作——如何编排多个智能体分工干活? Dify 中级实验13多 Agent 协作——如何编排多个智能体分工干活Dify 实验系列 · 中级 13/20 | 实验编号DIFY-102-14基于 Dify 1.16.1 实测2026-081. 业务场景先讲一个我们实际遇到的场景。一家咨询公司的合伙人每周要给客户交一份「企业全面分析报告」里面要有市场、财务、技术三个维度的专业判断。以前这事靠三个分析师各写一块再由合伙人汇总——成本高、周期长。他们想用 AI 替代让一个 Agent 把整份报告写出来。结果呢一个 Agent 干所有事写出来的报告「样样通、样样松」市场部分没有行业纵深财务部分没有专业框架技术部分浮于表面——一个模型很难同时具备三个专业领域的能力。我们第一次接这类需求时第一反应也是「让一个 Agent 把整份报告写完不就行了」。真正跑起来才发现——一个模型装不下三个专业领域市场、财务、技术各有一套知识体系塞给同一个 Agent每个维度都只能泛泛而谈报告「样样通、样样松」。这不是个例。任何「需要多个专业视角、每个维度都需要专业知识」的场景都是这个模式尽调报告要法律财务业务三路尽调、产品评审要设计研发运营三方意见、投资分析要宏观行业公司三层拆解——让一个 Agent 全包不如让多个专业 Agent 各管一段、再汇总裁决。2. 场景痛点这个流程的痛点在咨询公司的报告生产线上体现得最直接一个 Agent 专业深度不够市场、财务、技术三个维度各需要一套专业知识塞给同一个模型每个维度都只能泛泛而谈报告没有专业价值。串行执行太慢如果让一个 Agent 按顺序分析三个维度总耗时是三段推理时间之和客户等不起。输出格式不统一多个环节各自为政有的输出散文、有的输出 JSON汇总时解析失败报告没法组装。结论冲突没人裁决市场分析师说「建议扩张」财务分析师说「现金流紧张」两个结论打架报告里没人给出最终判断。本质上多 Agent 协作的问题不是「模型不够强」而是「分工、并行、汇总裁决这套架构怎么搭」。3. 方案为什么是 Workflow 编排多 AgentDify 里怎么把多个 Agent 串起来本实验给出两条可行路径方案 A用 HTTP 节点调用各 Agent 的/v1/chat-messagesAPI真实部署方案 B用代码节点模拟各 Agent 输出导入即跑通专注学编排逻辑。选它的理由并行执行省时间三个专业分析师并行跑总耗时 ≈ 最慢的那个节点而不是三段串行之和职责单一、各管一段每个分析师节点只吃自己的任务文本、只输出自己的专业结论互不干扰汇总裁决有结构首席分析师 LLM 拿到的三份结论带来源标注冲突可以明确指出、给出判断报告有专业味。这篇文章我们就用它搭一个「多 Agent 报告生成器」输入产品名 公司名 → 任务分发 → 市场/财务/技术三个专业分析师并行产出 → 首席分析师汇总成 Markdown 报告。4. 整体架构开始product_name / company_name任务分发Code生成 market_task / finance_task / tech_task市场分析师Code 模拟sleep 0.5s财务分析师Code 模拟sleep 0.5s技术分析师Code 模拟sleep 0.5s首席分析师汇总LLM三源引用 冲突裁决 Markdown结束final_report链路很清晰入口收产品/公司名 → 任务分发拆成三个专业任务 → 三个分析师并行产出 → 首席分析师汇总裁决。关键设计是并行分支的输出变量名必须各不相同否则汇合时互相覆盖汇总结果必然错乱。5. 模块设计5.1 任务分发Codedefmain(product_name:str,company_name:str)-dict:productproduct_nameor目标产品companycompany_nameor该公司return{market_task:请对 {} 的 {} 产品进行市场分析行业动态、竞品对比、市场趋势输出 JSON 格式结果.format(company,product),finance_task:请分析 {} 的财务数据模拟数据营收、成本、盈利、风险输出 JSON 格式结果.format(company),tech_task:请分析 {} 的 {} 产品的技术架构和成熟度技术栈、优势、不足输出 JSON 格式结果.format(company,product)}5.2 专业分析师Code 模拟三节点同构每个节点只吃自己的任务文本输出「报告文本 JSON 串」双份汇总与调试都有结构化数据可用defmain(market_task:str)-dict:importjson,time time.sleep(0.5)# 模拟 Agent 推理耗时便于观察并行conclusion{market_position:行业跟随者模拟结论,competitors:[竞品A,竞品B],trend:上升,key_findings:[目标市场年增速约15%,竞品A 主打性价比,本产品差异化空间在于服务],market_report:市场分析模拟任务「{}」→ 行业跟随者地位主要竞品竞品A/B趋势上升建议聚焦差异化服务切入。.format(market_task[:20])}return{market_report:conclusion[market_report],market_json:json.dumps(conclusion,ensure_asciiFalse)}财务、技术节点同理finance_report/finance_json、tech_report/tech_json。三个节点输出变量名必须不同否则并行分支汇合时互相覆盖。5.3 首席分析师汇总LLM你是一个首席分析师。请综合以下三位专家的分析结果生成一份完整的企业分析报告。 ━━━ 市场分析 ━━━ {{market_report}} ━━━ 财务分析 ━━━ {{finance_report}} ━━━ 技术分析 ━━━ {{tech_report}} 要求 1. 每个部分标注来源专家市场分析师/财务分析师/技术分析师 2. 如果专家之间有冲突观点明确指出并给出你的判断 3. 最后给出综合结论和行动建议 4. 格式Markdown 格式包含标题、小节、要点 5. 直接输出报告正文不要输出任何解释性文字5.4 方案 AHTTP 节点调 Agent API真实部署方法:POSTURL:https://your-dify/v1/chat-messagesHeaders:Authorization:Bearer{{#env.DIFY_AGENT_API_KEY#}} # API Key 放环境变量别硬编码Content-Type:application/jsonBody:inputs:{}query:{{#cd_dispatch.market_task#}}response_mode:streaming# agent-chat 应用只支持 streaminguser:workflow-system6. 运行验证输入预期实测product_name智能客服系统company_nameXX科技有限公司三个分析师并行产出总耗时 ≈ 最慢节点三节点并行约 0.5s 级完成汇总报告含三节市场/财务/技术各一小节并标注来源专家Markdown 三节齐全来源标注明确检查各分析师 JSONmarket_json / finance_json / tech_json 可 json.loads全部可解析换产品名再跑三路任务文本同步更新分发节点拼接正确结论随之变化7. 实战坑坑现象修复调 agent-chat 的 API 用 blocking调用失败/取不回结果response_mode 必须 streamingHTTP 节点需解析 SSE 流本地实验用方案 B 代码模拟实测并行分支输出变量同名汇合后结果互相覆盖汇总错乱三个分析师节点输出不同名变量market_/finance_/tech_ 前缀实验文档设计约束各 Agent 输出格式不统一汇总 LLM 拿到散文 JSON 混合解析失败每个专业 Agent 的提示词里强制定义输出 JSON Schema实验文档设计约束API Key 硬编码在 HTTP 节点泄露风险 换 Key 要改流程放环境变量节点里{{#env.xxx#}}引用实验文档设计约束模拟节点不 sleep看不出并行效果误以为串行加time.sleep(0.5)让并行可见实验文档设计约束8. 实验文档及源码获取实验文档完整操作步骤DIFY-14多Agent协作编排.md源码可直接导入dify102_14_多Agent报告生成器.yml文章聚焦核心配置与采坑点实验的完整分步操作节点搭建/参数表/调试指引见实验文档原文。下一篇Dify 中级实验14对话变量与状态管理——如何让工作流记住多轮对话的状态 你在这个实验的场景里踩过什么坑欢迎评论区分享你的实战经验。
返回列表