当前位置: 首页 > news >正文

[dify]官方模板DeepResearch工作流学习笔记

一、功能

根据用户输入的主题进行多轮搜索并生成综合报告

1、流程分析

1.1 初始阶段

Start节点:接收用户输入的"depth"参数,决定搜索的深度/轮数
参数可以不填,不填的时候取默认值3
Create Array节点:根据depth参数生成一个数组(如depth=3则生成[0,1,2]),用于控制迭代次数

def main(depth: int) -> dict:depth = depth or 3array = list(range(depth))return {"array": array,"depth": depth}

输入是一个int类型的数值,如果没有输入取默认值3
返回一个dict类型,包含两个变量,array是一个number的数组,depth是一个int类型值

1.2 迭代搜索阶段(核心循环)

工作流的主体是一个迭代循环,每次迭代包含以下步骤:

1、搜索决策
LLM节点:使用deepseek-v3模型分析当前状态,决定:

是否需要继续搜索(shouldContinue)、下一个搜索主题(nextSearchTopic)
输出为JSON格式
提示词:

你是一个研究以下主题的研究助手。
你目前发现了什么?还有哪些问题尚未解答?接下来应该具体研究哪些方面?#输出要求
1、不要输出与已搜索主题完全相同的主题。
2、如果需要进一步搜索信息,请设置 nextSearchTopic。
3、如果已获得足够信息,请将 shouldContinue 设为 false。
4、请以 JSON 格式输出
{nextSearchTopic: str | None
shouldContinue: bool 
}

在工作流中用到4个会话变量,以及记忆功能
2、JSON解析
1、代码执行2节点:从LLM输出中提取JSON内容
2、模板转换4节点:格式化JSON数据
3、参数提取器节点:提取nextSearchTopic和shouldContinue字段
大模型节点的输入类似下面的文字
{
“text”: “json\n{\n \"nextSearchTopic\": \"Dify平台的功能和架构概述\",\n \"shouldContinue\": true\n}\n
}
通过代码执行节点,提取tex文本中json字符串
输入:
{
“arg1”: “json\n{\n \"nextSearchTopic\": \"Dify平台的功能和架构概述\",\n \"shouldContinue\": true\n}\n
}
代码:

import re
import json
def main(arg1: str) -> dict:json_pattern = r'```json\s*([\s\S]*?)\s*```'match = re.search(json_pattern, arg1.strip())if not match:raise ValueError("文本中未找到有效的JSON内容")json_str = match.group(1)#去除转义的json_str = re.sub(r'\\n', '', json_str)#.strip() 默认会移除字符串 开头和结尾 的 所有空白字符(包括 \n, \t, 等)json_str = json_str.strip()json_str=json_str.replace('\\"', '"').replace('\\n', '')# 解析为Python对象parsed_data = json.loads(json_str)return {"result":parsed_data}

输出:

{"result": {"nextSearchTopic": "Dify平台的功能和架构概述","shouldContinue": true}
}

代码执行结果是一个json对象,通过模板转换节点,转换为字符串,用参数提取器节点提取json里的变量

3、变量更新
变量赋值节点:更新以下变量:

将nextSearchTopic写入会话变量
将shouldContinue写入会话变量
将nextSearchTopic追加到已搜索topics列表
4、条件判断
IF/ELSE节点:检查shouldContinue值
如果为true:执行Tavily搜索
Tavily Search节点:使用nextSearchTopic进行网络搜索
Assign Variables节点:将搜索结果追加到findings列表
Intermediate Output Format节点:生成中间状态报告
如果为false:跳过搜索,进入空操作分支

1.3、结果聚合

变量聚合器节点:收集所有迭代的结果
最终报告生成
Reasoning Model节点:使用deepseek-r1模型综合分析所有findings
提示词:

根据调查结果,撰写一份关于该主题的全面分析报告。
提供重要见解、结论以及尚存的不确定性。必要时请引用来源。本分析应非常全面且详细,预期为长篇文本。

1.4 生成报告

生成详细的调查报告,包含重要发现、结论和未解决的问题
Answer节点:输出最终报告

二、工作流特点

多轮迭代搜索:根据depth参数和模型判断动态控制搜索轮数
自适应搜索主题:每轮搜索后,模型会决定下一步要探索的子主题
避免重复搜索:系统会记录已搜索的topics,避免重复
综合报告生成:最后将所有发现汇总分析,生成详细报告

三、数据流

用户输入 → 初始分析 → 多轮搜索 → 结果收集 → 综合分析 → 报告输出

相关文章:

  • JGL021垃圾渗滤液小试实验装置
  • cuda程序兼容性问题
  • 虚拟环境直接使用模块 笔记
  • 多边形生成立面点云
  • eFish-SBC-RK3576工控板音频接口测试操作指南
  • AI——认知建模工具:ACT-R
  • Python cv2边缘检测与轮廓查找:从理论到实战
  • 「动态规划」线性DP:股票问题合集 / LeetCode 121|122|123|188 (C++)
  • ubuntu中解决matplotlib无法显示中文问题
  • 使用非常便捷,可以批量操作的小软件
  • windows10系统:如何使用电脑控制手机上多个应用程序(app)?
  • Spring Boot 多数据源事务管理
  • 获取嵌入(Embeddings)的方法与实践
  • CSRF 攻击:深入解析“借刀杀人“的请求伪造与防御之道
  • penEuler操作系统结合豆包测试github仓库8086-Emulator项目
  • 数据结构、刷leetcode返航版--二分5/7
  • C++ 的未来趋势与挑战:探索新边界
  • 【hot100】bug指南记录1
  • 在 Ubuntu 中配置 Samba 实现「特定用户可写,其他用户只读」的共享目录
  • Spring AI(1)—— 基本使用
  • 马上评丨全民定制公交,打开城市出行想象空间
  • 巴基斯坦称回应挑衅,对印度发起军事行动
  • 19个剧团15台演出,上海民营院团尝试文旅融合新探索
  • 雇来的“妈妈”:为入狱雇主无偿带娃4年,没做好准备说再见
  • 印巴战火LIVE丨印巴互相发动无人机袭击,巴官员称两国已在国安层面接触
  • 人民日报整版调查:中小学春秋假,如何放得好推得开?