链载Ai

标题: Multi-Agent-Workflow [打印本页]

作者: 链载Ai    时间: 昨天 18:16
标题: Multi-Agent-Workflow

ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;display: table;padding: 0px 0.2em;color: rgb(255, 255, 255);background: rgb(15, 76, 129);">Multi-Agent-Workflow

ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 14px;display: flex;align-items: center;gap: 0.5em;color: rgb(87, 171, 90);">Tip

ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 14px;display: block;letter-spacing: 0.1em;color: rgb(63, 63, 63);">多代理工作流架构,不同的专业代理协作处理用户查询,并生成一份全面的研究报告

ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 14px;color: rgb(63, 63, 63);">ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 14px;margin: 0.1em auto 0.5em;border-radius: 4px;" title="null"/>

ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;padding-left: 8px;color: rgb(63, 63, 63);">Agent 职责和能力

ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 14px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">DeerFLow 的多智能体工作流程由五个专业智能体组成,以下是它们特定的角色以及责任

ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 14px;padding: 0.25em 0.5em;color: rgb(63, 63, 63);word-break: keep-all;">
Agent
ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 14px;padding: 0.25em 0.5em;color: rgb(63, 63, 63);word-break: keep-all;">
Role
ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 14px;padding: 0.25em 0.5em;color: rgb(63, 63, 63);word-break: keep-all;">
Primary Responsibilities
Coordinator
入口
处理问候和闲聊,对用户请求进行分类,将研究查询路由到Planner
Planner
研究规划
根据查询要求创建包含特定步骤的结构化研究计划
Researcher
信息收集
使用Web搜索和爬虫工具执行研究步骤
Coder
数据处理
Python代码进行数据分析
Reporter
内容分析
根据收集到的信息创建全面的报告

Coordinator Agent

将用户的请求分为三类

Planner Agent

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

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

Researcher Agent

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

  1. 1. 使用内置工具,如web_search_toolcrawl_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

StepType.PROCESSING

工具整合

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
用户正在查看的研究

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

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

API 通信

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

后端 Data Flow

请求处理

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

工作流事件生成

_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 可以是:

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"]
}
}
}
}






欢迎光临 链载Ai (https://www.lianzai.com/) Powered by Discuz! X3.5