手把手教你用 Dify 搭建“一键生成调研报告”工作流

——输入一个主题,自动搜索、抓取、让 AI 写报告

不用写复杂代码,全是拖拽和填配置。跟着这篇做,你也能搭出来。


一、准备工作:先搞定三个服务的 API Key

Dify 工作流需要调用三个外部服务:大模型、搜索、网页抓取。提前注册好拿到 Key,后面才不会卡住。

1. 大模型 —— 我用的是 DeepSeek

DeepSeek 官网 注册,在「API Keys」里生成一个 Key,复制下来。
然后在 Dify 里:设置 → 模型供应商 → OpenAI-API-compatible,填上 Key,模型名写 deepseek-chat

如果后面测试总超时,可以把模型换成 Dify 内置的 gpt-4o-mini(需要绑一张信用卡,但非常稳,花钱极少)。

2. 搜索工具 —— Google Search(底层是 SerpAPI)

Dify 自带的 Google Search 工具实际上调用的是 SerpAPI 的服务。

  • SerpAPI 官网 注册,免费版每月 100 次搜索,够测试用。
  • 登录后拿到你的 API Key。
  • 在 Dify 里点「工具」→ 搜索 google → 选择 Google Search 工具 → 添加,然后填入 API Key。

3. 网页抓取工具 —— Firecrawl

Firecrawl 官网 注册,拿到 API Key。
在 Dify 工具里搜索 firecrawl 并添加,API URL 填 https://api.firecrawl.dev,再填上 Key。

Firecrawl 抓取网页时,记得把「等待时间」设成 5000 毫秒(5 秒),不然页面还没加载完,抓到的全是导航栏。


二、开始搭建工作流

新建一个 Workflow,按顺序往下拖节点。

节点1:开始节点(Start)

这个是默认就有的,不用拖。
我们定义一个输入变量,名字叫 target,类型选「文本」。
运行时会弹出一个输入框,用户填什么主题,后面就按这个主题去搜索和写报告。


节点2:搜索节点(Google Search)

从左侧「工具」里拖一个 Google Search 节点到画布。

  • 如果之前没授权,节点上会有「去授权」按钮,点一下把第一步拿到的 SerpAPI Key 填进去。
  • 在节点的「输入」框里,按 / 键唤起变量菜单,选择 target
  • 点击「运行测试」,输入一个主题比如「中美AI发展现状」,应该能看到返回的搜索结果(标题、链接、摘要片段)。

这一步成功,说明你的 Google 搜索 Key 没问题。


节点3:代码执行节点 —— 提取链接列表

搜索节点返回的数据结构比较深,有用的结果藏在 json[0]['organic_results'] 里。
我们需要用一段极简的 Python 代码把这层数据「提」出来。

拖一个「代码执行」节点(Code),语言选 Python3,写入:

def main(json: list) -> dict:
    return { "result": json[0]['organic_results'] }
  • 输入变量:json 选上一个 Google Search 节点的 json 输出。
  • 输出变量名写 result,类型一定要选 Array[Object]

点击测试,你会看到输出是一个数组,里面每个对象都有 linktitlesnippet
这一步就是把我们后续要用的链接单独拿出来了。


节点4:迭代节点 —— 循环处理每一个链接

现在我们有大约 10 个链接,要对每个链接单独做「抓取网页 → AI 提炼摘要」。
这就要用到 迭代节点(相当于编程里的 for 循环)。

拖一个「迭代」节点(Iteration),输入数组选上一步代码节点的 result
迭代节点下面会出现一个「循环体」区域,我们要在里面放两个节点。

4.1 在循环体里放「网页抓取」节点(Firecrawl)

拖一个 Firecrawl 节点到循环体内。

  • 要抓取的 URL:点击输入框,按 / 键,选择 item.linkitem 代表当前循环里的单个搜索结果)。
  • 「等待时间(毫秒)」填 5000(重要!否则抓不到正文)。
  • 输出变量里,我们主要用到 text(抓到的网页纯文本内容)。
4.2 再放大模型节点 —— 让 AI 提炼摘要

拖一个大模型节点到循环体内,跟在 Firecrawl 节点后面。

  • 模型选择:如果 DeepSeek 容易超时,就换成 Dify 内置的 gpt-4o-mini
  • 系统提示词
    只输出用户需要的内容,不要添加额外说明。
    
  • 用户提示词
    基于以下文本总结与 {{target}} 相关的核心内容,如果与 {{target}} 无关则输出空字符串。
    
    其中 {{target}} 选开始节点的 target,「文本」选 Firecrawl 输出的 text

测试迭代节点:可以先只跑一个链接,看看大模型能不能输出一段 100~200 字的摘要。


节点5:参数提取节点 —— 自动生成报告大纲

迭代完所有链接后,你手里有 10 段摘要(可能有的为空)。
接下来需要一个「报告大纲」,比如:引言、产业概述、专利对比、政策建议、结论等。

拖一个「参数提取」节点(Parameter Extractor)。

  • 模型任选一个(建议用 gpt-4o-mini)。
  • 在「提取参数」里添加一个字段:
    • 名称:subtitles
    • 类型:Array[string]
    • 描述:报告大纲的一级标题数组
  • 提示词
    根据上述资料,提取一份关于 {{target}} 的综述大纲的一级标题,放在 subtitles 数组中。
    
    输入变量暂时留空(后面再连)。

节点6:合并所有摘要(代码执行节点)

参数提取节点需要一个「所有摘要合并后的长文本」作为输入。
所以我们要先把迭代节点输出的 10 段摘要拼成一个字符串。

拖一个「代码执行」节点,写:

def main(arg1: list) -> dict:
    result = ""
    for i in arg1:
        result += i
    return { "result": result }
  • 输入变量 arg1第一个迭代节点 的输出(这个输出是一个列表,每个元素是一段摘要)。
  • 输出变量 result 就是合并后的长文本。

然后把 参数提取节点 的输入变量改成这个代码节点的 result
测试参数提取节点,你应该会得到一个数组,例如:
["引言","中美人工智能产业概述","专利与技术创新比较","政策环境与治理挑战","结论"]


节点7:第二个迭代节点 —— 按大纲章节写内容

有了大纲数组,我们就可以遍历每个章节标题,让 AI 写出该章节的具体内容。

拖第二个「迭代」节点,输入数组选参数提取节点的 subtitles
循环体里再放一个大模型节点。

  • 用户提示词
    根据参考资料 {{all_summaries}},完成章节 {{item}} 的内容撰写,要求详细、有数据支撑。
    
    其中:
    • {{all_summaries}} 选刚才合并摘要的代码节点的 result
    • {{item}} 是当前循环的章节标题

测试一下:让这个迭代节点先跑一个章节(比如「引言」),看看能不能写出几百字的段落。


节点8:合并所有章节内容(又一个代码执行节点)

第二个迭代跑完后,输出是一个数组,每个元素是一个章节的内容。
我们需要把它们拼成一份完整的报告。

拖一个「代码执行」节点,用和节点6完全一样的代码:

def main(arg1: list) -> dict:
    result = ""
    for i in arg1:
        result += i
    return { "result": result }

输入变量选第二个迭代节点的输出,输出变量 result 就是完整的报告文本。


节点9:结束节点(End)

拖一个「结束」节点,输出变量选上一个代码执行节点的 result
运行后,在 Dify 的右侧面板里就能看到生成的完整调研报告。你可以直接复制出来用。


三、常见踩坑点和解决办法

坑1:大模型一直超时

Dify 免费版服务器在国外,调用 DeepSeek 经常超时。
解决:在大模型节点里把模型换成 Dify 内置的 gpt-4o-mini。虽然要绑信用卡,但费用极低,一个工作流跑下来可能不到 1 毛钱。

坑2:Firecrawl 只抓到导航栏,没有正文

默认等待时间为 0 毫秒,页面还没加载完就抓了。
解决:在 Firecrawl 节点里把「等待时间」改成 5000 毫秒。

坑3:参数提取节点返回的数组是空的

检查两点

  1. 输入文本(合并后的摘要)不是空的。
  2. 提示词写清楚「放在 subtitles 数组中」,并且类型写对了 Array[string]

坑4:迭代节点报错「输入不是数组」

检查:上一个代码执行节点的输出变量类型是否选成了 Array[Object],并且返回的确实是 Python 列表。


四、最终效果

全部配置好后,你只需要:

  1. 在开始节点输入一个主题(比如「新能源汽车行业现状」)
  2. 点击运行
  3. 等 2~5 分钟

Dify 会自动完成:

  • Google 搜索 → 抓取 10 个网页 → AI 提炼每个网页摘要
  • 自动生成报告大纲 → 按大纲逐章写作 → 合并成完整报告
  • 在右侧面板显示出来,你可以直接复制或保存。

五、写在最后

作为 Python 小白,我第一次跑通这个工作流的时候,还是挺有成就感的。
可视化工作流的好处就是,你不用从头写几百行代码,只要理解「数据怎么从一个节点流到另一个节点」,就能搭建出很实用的自动化工具。

如果你照着这篇博客做,卡在了某一步,记得检查:

  • API Key 有没有填错
  • 等待时间有没有设够
  • 大模型节点里的提示词是不是抄对了

祝你一次运行成功。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐