支持私有化部署
AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


Multi-Agent-Workflow && Data Flow

发布日期:2025-05-12 16:40:32 浏览次数: 1528 作者:影子的分享站
推荐语

探索多代理工作流如何革新信息处理!
核心内容:
1. 多智能体工作流架构概览及其专业代理角色
2. 各代理的主要职责和协作流程
3. 工作流配置参数和步骤类型详解

杨芳贤
53A创始人/腾讯云(TVP)最具价值专家

 

Multi-Agent-Workflow

Tip

多代理工作流架构,不同的专业代理协作处理用户查询,并生成一份全面的研究报告

Agent 职责和能力

DeerFLow 的多智能体工作流程由五个专业智能体组成,以下是它们特定的角色以及责任

Agent
Role
Primary Responsibilities
Coordinator
入口
处理问候和闲聊,对用户请求进行分类,将研究查询路由到Planner
Planner
研究规划
根据查询要求创建包含特定步骤的结构化研究计划
Researcher
信息收集
使用Web搜索和爬虫工具执行研究步骤
Coder
数据处理
Python代码进行数据分析
Reporter
内容分析
根据收集到的信息创建全面的报告

Coordinator Agent

将用户的请求分为三类

  • • 直接处理:问候和闲聊
  • • 礼貌拒绝:不当或有害的请求,系统会拒绝处理
  • • 交给 Planner:研究问题、事实查询,会被进一步处理

Planner Agent

将复杂查询分解为可管理的步骤,以便创建详细的研究计划

  1. 1. 评估是否有足够的上下文可以直接回答查询
  2. 2. 若上下文不足,则创建一个结构化的研究计划,包含具体步骤
  3. 3. 将步骤分类为“研究”(网络搜索)或处理(计算任务)
  4. 4. 限制计划的步骤数量,最大思考步数(默认为 3 次)

Researcher Agent

执行需要收集信息的研究步骤

  1. 1. 使用内置工具,如 web_search_tool 和 crawl_tool
  2. 2. 在可用时动态加载工具
  3. 3. 记录文档来源和属性信息,以确保引用
  4. 4. 结构化综合收集的信息

Coder Agent

执行涉及到 Python 代码的数据处理

  1. 1. 分析需求并规划解决方案
  2. 2. 使用 Python 脚本实现解决方案
  3. 3. 利用可用的库,如 pandas、numpy
  4. 4. 记录方法并可视化结果

Reporter Agent

负责所有收集的信息综合成完整的最终报告

  • • 以清晰的结构,逻辑地组织信息
  • • 突出关键发现和重要见解
  • • 包含研究过程中相关的图片
  • • 正确引用所有来源
  • • 保持用户偏好的语言

工作流执行过程

工作流配置

Parameter
Description
Default
debug
启动调试日志记录
False
max_plan_iterations
最大计划迭代数
1
max_step_num
计划中的最大步骤数
3
enable_background_investigation
在规划之前执行Web搜索
True
MCP_settings
配置动态工具加载
None

提示到 Agent 的映射

将代理的提示映射到定义其行为的实际代码文件

计划结构化和步骤执行

步骤类型和执行

步骤分为研究、处理两种类型

StepType.RESEARCH

  • • 需要进行网络搜索 need_web_search: true
  • • 重点在于收集信息,统计数据和数据点
  • • 由 Researcher Agenet 执行,使用网络搜索和爬取工具

StepType.PROCESSING

  • • 不需要进行网络搜索 need_web_search: false
  • • 涉及计算、数据分析和计算任务
  • • 由 Coder Agent 执行,使用 Python 进行数据处理

工具整合

DeerFlow 集成了代理可用于收集信息和处理数据的各种工具

内置工具

Tool
Description
Used By
web_search_tool
执行Web搜索以收集信息
Researcher
crawl_tool
从 URL 读取内容
Researcher

动态工具加载随着 MCP

支持通过 MCP 动态加载其他工具

这里给出 GitHub 趋势存储库的 MCP 示例

"mcp_settings": {
    "servers": {
        "mcp-github-trending": {
            "transport": "stdio",
            "command": "uvx",
            "args": ["mcp-github-trending"],
            "enabled_tools": ["get_github_trending_repositories"],
            "add_to_agents": ["researcher"]
        }
    }
}

Data Flow

Tip

本文的记录数据的流转,用户输入到最终研究报告的产出,前后端交互时的消息、事件、状态,以及每个组件内的内部数据转换

Data Flow 的预览

前端 Data Flow

用户输入作为 API Request

sendMessage 函数(web/src/core/store/store.ts 76-154)的处理流程如下:

  1. 1. 创建新的用户消息,生成唯一 ID,并将其添加到 Zustand 状态存储
  2. 2. 设置存储中检索聊天设置,使用 getChatStreamSettings()
  3. 3. 使用用户消息和配置参数发起 API 调用,调用 chatStream()
  4. 4. 在对话期间将前端状态设置为“responding”

chat 的 Stream 参数包括如下

参数
描述
thread_id
唯一的对话标识符
auto_accepted_plan
是否自动接受研究计划
max_plan_iterations
计划的最多循环次数
max_step_num
研究步骤的最多数量
enable_background_investigation
是否执行背景网络搜索
mcp_settings
MCP配置

事件处理与状态管理

前端使用 Zustand 来管理应用状态,关键状态组件包括

状态
描述
messageIds
按时间顺序排列的消息ID数组
messages
按ID索引的消息对象映射
researchIds
研究会话ID数组
researchPlanIds
研究ID到计划消息ID的映射
researchReportIds
研究ID到报告消息ID的映射
researchActivityIds
将研究ID到活动消息ID的映射
ongoingResearchId
当前活动的研究会话
openResearchId
用户正在查看的研究

当后端接收到事件时,它们会被处理并更新上述状态

  • • message_chunk:更新消息内容
  • • tool_calls:处理工具调用
  • • tool_call_result:更新工具调用结果
  • • interrupt:处理用户反馈

以下这些状态更新函数用于管理聊天、研究过程中的状态变化,确保前端能够正确显示对话和研究进度

  • • appendMessage:向存储中添加新消息
  • • updateMessage:使用新内容更新现有消息
  • • updateMessages:批量更新多个消息
  • • setOngoingResearch:跟踪当前研究会话
  • • openResearch:控制 UI 中显示的研究内容

API 通信

前后端通过 SSE 进行流式响应,支持两种模式

  • • 常规模式(Regular mode):发送实际请求到后端,获取实时响应
  • • 回放模式(Replay mode):使用预录的响应进行演示或测试

后端 Data Flow

请求处理

当后端接收到聊天请求时,通过 /api/chat/stream 断点进行处理

  • • 解析用户输入并生成 UUID
  • • 初始化流式事件
  • • 启动 StreamResponse,使用 _astream_workflow_generator() 处理请求并生成流式响应

工作流事件生成

_astream_workflow_generator() 职责如下

  1. 1. 设置 LangGraph 工作流的初始状态
  2. 2. 将代理交互和结果流式传输回客户端
  3. 3. 将 LangGraph 事件转换为 SSE(服务器发送事件)

LangGraph 状态流

管理 Agent 节点之间的状态转换,每个节点处理当前状态,并返回一个对象,该对象用于更新状态并引导工作流进入下一个节点

LangGraph 的状态对象包含

状态Key
描述
messages
对话消息的历史记录
plan_iterations
计划的迭代次数
current_plan
当前的研究计划
observations
研究步骤收集的结果
final_report
最终生成的报告
locale
对话的语言环境
auto_accepted_plan
是否自动接受计划
enable_background_investigation
是否执行背景搜索

数据结构

Message 结构

Message 是 DeerFlow 系统的主要数据结构,在前后端之间流动

字段
类型
描述
id
string
消息的唯一标识
threadId
string
对话线程ID
role
string
“user”或“assistant”
agent
string
代理的名称
content
string
消息的文本内容
contentChunks
string[]
流式传输的内容块
isStreaming
boolean
消息是否仍在生成中
toolCalls
object[]
消息调用的工具
interruptFeedback
string
来自用户反馈的终端信息

ChatEvent 结构

从后端流式传递到前端的事件具有如下结构

{
  "event": "<event_type>",
  "data": "<JSON 数据>"
}

其中 event_type 可以是:

  • • message_chunk:来自代理的文本内容
  • • tool_calls:代理请求使用工具
  • • tool_call_chunks:工具调用的部分内容
  • • tool_call_result:工具执行的结果
  • • interrupt:请求用户反馈

ChatRequest 结构

从前端传递到后端的请求结构如下

{
  "messages": [{ "role": "user", "content": "string" }],
  "thread_id": "string",
  "auto_accepted_plan": true,
  "max_plan_iterations": 3,
  "max_step_num": 5,
  "interrupt_feedback": "string",
  "enable_background_investigation": true,
  "mcp_settings": {
    "servers": {
      "server_name": {
        "transport": "string",
        "command": "string",
        "args": ["string"],
        "url": "string",
        "env": { "key": "value" },
        "enabled_tools": ["string"],
        "add_to_agents": ["string"]
      }
    }
  }
}

53AI,企业落地大模型首选服务商

产品:场景落地咨询+大模型应用平台+行业解决方案

承诺:免费场景POC验证,效果验证后签署服务协议。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

添加专属顾问

回到顶部

加载中...

扫码咨询