Deep Research 工作流:使用 Dify 打造专业级研究助手

964 阅读7分钟

无论是撰写学术论文、市场调研报告,还是解决复杂的技术问题,我们都会发现简单的搜索引擎查询往往不够用,一个问题可能需要数十次搜索才能得到满意的答案。Deep Research 正是为解决这一日常难题而生的功能。目前,Google Gemini、ChatGPT** 与 DeepSeek-R1 等主流大语言模型均已提供此类能力。

Deep Research 的核心在于其迭代性和自适应性。系统识别知识缺口,生成针对性查询,持续迭代探索,最终生成全面的研究报告。相比传统搜索,Deep Research 功能能更好地处理复杂问题,提供更有深度和广度的答案。

本文将介绍如何在 Dify 中利用工作流实现 Deep Research。通过应用循环变量、结构化输出和 Agent 节点这三个功能,我们可以构建一个自主探索、持续学习、深度挖掘的研究系统。

实现架构

为了使用 Dify 实现 Deep Research,我们设计了一个三阶段的工作流架构:

  1. 识别意图、获取背景信息: 这一阶段旨在接收研究主题,获取初始背景信息,并分析用户查询的表面意图、实际目标和潜在动机,以建立研究的基础方向。
  2. 反思和迭代: 这一阶段将通过循环变量节点管理整个研究的迭代过程,分析当前知识,识别缺口,执行搜索和获取内容,并不断积累和更新研究成果。
  3. 输出终稿: 这一阶段将综合所有收集的信息,生成结构化、连贯的最终研究报告,并提供完整的引用支持。

这一架构的核心理念是认知递归:系统不断评估自己对问题的理解深度,识别知识的盲点和缺口,然后有针对性地寻找新信息。它模拟了专业研究人员在面对复杂问题时的工作方式:“我已经了解了哪些方面?还有哪些关键信息缺失?下一步应该探索什么?”

阶段一:研究准备与基础设置

开始节点

首先,我们在开始节点中设计表单,定义用户的输入参数:

  • research topic: 研究的主题,用户需要查询的核心问题;
  • max loop: 针对本次研究的预算上限,决定可以迭代多少次。

Exa Answer 工具

我们通过 Exa Answer 工具获取初步的背景信息,确保在意图识别阶段能够让大模型理解提问中的专业名词。

用户意图

随后,我们使用一个 LLM 节点挖掘用户意图,以理解提问的表面含义、潜在动机和实际目标。

阶段二:循环深入研究

循环节点

循环是实现 Deep Research 的核心节点。在 Dify 工作流中,循环节点能够在循环的不同轮次间传递和累积信息,使每次迭代都能基于之前的发现继续深入。

循环节点文档:docs.dify.ai/zh-hans/gui…

在我们的 Deep Research 工作流中,设置了六个核心循环变量:

  • findings: 用于储存每一轮迭代新发现的知识;
  • executed_querys: 用于储存已经查询过的 query,避免重复查询;
  • current_loop: 用于记录当前循环的次数;
  • visited_urls: 用于记录已访问的链接,做来源的引用标注;
  • image_urls: 可以作为研究过程中图文混排的链接来源;
  • knowledge_gaps: 记录当前研究中识别出的知识缺口。

循环变量和一般变量的主要区别:

  • 正常引用: Node 1 → Node 2 → Node 3(每个节点只能引用前一个节点的输出)
  • 循环内跨轮次引用: 不仅可以引用同轮次内的前序节点,还可以引用上一轮次的任意节点输出,实现跨轮次的信息传递

这种机制使得研究过程能够累积知识,避免重复工作,并持续深化对主题的探索。

Reasoning 节点

在 Reasoning 这个 LLM 节点中,我们定义了一个明确的输出结构,以指导模型“提出好问题”。

这个输出结构包括三个关键部分:

QQ_1750342787998.png

如何才能让 LLM 生成精确的、具有特定格式的输出结构,以便后续节点能够准确处理呢?Dify 的结构化输出功能可以实现这一点。

结构化输出文档:docs.dify.ai/zh-hans/gui…

通过打开 LLM 节点中结构化输出的可视化编辑器开关,我们可以以严格定义的数据结构(如 JSON)接收 LLM 的回答,确保返回结果格式一致且可预测。这让我们能精确提取 reasoning、search_query 和 knowledge_gaps 等关键字段,为后续研究步骤提供明确方向。

Agent 节点

提出一个好问题只是研究过程的起点。要有效解决这些问题,系统需要具备推理能力和工具调用能力,这正是 Agent 节点的关键价值所在。

Agent 节点文档:docs.dify.ai/zh-hans/gui…

Agent 节点充当研究流程中的执行者,能够基于当前情境选择并调用最合适的工具来获取信息、分析数据并提炼答案。在 Deep Research 的实现中,我们通过特定工具赋予 Agent 探索网络世界的能力:

信息获取工具

  • exa_search 工具: 这个工具执行网络搜索任务,相当于研究者浏览搜索引擎结果页面的过程;
  • exa_content 工具: 这个工具用于深入访问特定链接,获取完整内容细节。

反思与整合工具

  • think 工具: 这个工具是整个系统的思考引擎,其灵感来源于 Anthropic 的 Claude Think Tool。在 Agent 的工具列表中添加这个特殊工具后,Agent 能够在行动之间进行反思和整合。它会回顾已收集的信息,评估当前知识状态,判断是否有足够信息解答问题或需要进一步探索。这个过程类似于研究者在笔记本上记录思考过程:回顾已知内容,识别模式和关联,确定下一步方向。

在 Agent 配置中,我们采用了一种优化策略:我们将前序 LLM 节点通过结构化输出生成的 search_query 字段作为 Agent 的查询输入,而不是传递整个上下文。这种精确的参数传递确保了 Agent 节点能够聚焦于最相关的信息,提高工具调用的准确性。

URL Extract 节点

我们同时还会利用结构化输出,将 Agent 返回的内容解析为标准格式,例如,工作流会自动提取发现的 URL 和图片链接,便于在循环变量中准确跟踪和管理这些资源。

在整条工作流中,Agent 节点在每次迭代中都会经历信息收集、内容理解和反思整合的完整周期。

变量赋值器

最终,通过变量赋值器节点,工作流可以实现研究状态的累加和更新。我们希望确保每次迭代都是在前一次基础上的递进,而非简单的重复。

阶段三:研究成果整合

在完成多轮迭代探索后,我们使用更新后的循环变量作为 Final Summary 节点的上下文。这些变量包含了整个研究过程中积累的 findings(研究发现)、visited_urls(已访问链接)和其他关键信息。

在 Final Summary 节点的配置中,我们特别指定让它保留 Markdown 的链接引用格式,并在报告结尾整理完整的引用链接列表,确保研究结果的可溯源性和可信度。此外,我们还在工作流中穿插了一系列 Answer 节点,让研究过程的不同阶段内容能够以流式方式呈现给用户,提供了即时反馈。

这样设计的工作流所生成的研究报告不仅包含全面的分析内容,还提供了完整的信息来源引用,使研究结果既有深度又有可信度。

结语

以上就是使用 Dify 的 Agentic Workflow 实现 Deep Research 的最佳实践。这种实现方式不仅模拟了人类专家的研究流程,还通过自动化和智能化大幅提高了研究效率。

我们希望这个最佳实践能为你带来启发,帮助你利用 Dify 的强大功能构建更智能、更高效的工作流!