如果你每周都需要产出一份行业研报——收集数据、整理竞动态、分析趋势、排版输出——那你大概率知道这个过程的痛苦之处。百分之八十的时间花在信息收集、格式清洗和排版上,真正用来做分析和判断的时间不到百分之二十。
这个比例是可以反过来。
用 n8n 做流程编排,用 Dify 做大模型能力的标准化封装,再加一个向量数据库做知识检索,可以搭出一套"输入行业关键词,自动输出一份结构化研报初稿"的工作流。整个过程不需要写代码,全部用可视化的节点连接完成。
下面是一套从零搭建的完整方案,包括具体的节点配置和容易踩的坑。
整体架构分四层。
第一层是数据采集。用 n8n 的 HTTP Request 节点定时抓取预设的信息源——RSS 订阅、搜索引擎 API、或者特定网站的公开数据。这一层的核心原则是"宽进":尽可能多地抓取原始信息,不要在这个阶段做任何筛选和过滤,让后续节点来承担信息清洗的工作。
第二层是知识索引。把采集到的原始数据通过 Embedding API 转化为向量,存入向量数据库。这里推荐用 Qdrant 或 Chroma,两者都支持本地部署,而且 n8n 有现成的集成节点。这一步的关键是 Embedding 模型的选择——如果是中文行业研报,务必使用和中文语料对齐的 Embedding 模型,否则检索质量会大幅下降。
第三层是智能分析。这是整个工作流的核心。当需要生成研报时,n8n 将用户的行业关键词发送给 Dify 的 API,Dify 内部通过 RAG(检索增强生成)流程从向量数据库中检索相关信息,然后调用大模型生成结构化的分析内容。
第四层是输出排版。Dify 输出的分析结果通过 n8n 的 Webhook 回传,再由 n8n 调用 Markdown 转 HTML 或 PDF 的服务,最终生成一份格式完整的研报文档。
具体的搭建步骤从 n8n 开始。
第一步,安装并启动 n8n。推荐使用 Docker 部署:
docker run -it --rm -p 5678:5678 -v ~/.n8n:/home/node/.n8n n8nio/n8n
启动后访问 localhost:5678 进入工作流编辑界面。
第二步,在 n8n 中创建一个新的 Workflow,添加第一个节点 Schedule Trigger,设置触发频率。如果你每天需要更新一次研报数据,就设置为每天定时触发;如果是按需生成,就设置为 Manual,由人工手动触发。
第三步,添加 HTTP Request 节点。配置你要抓取的信息源 URL。这里有一个常见的坑:很多信息源返回的是 HTML 而非结构化数据。n8n 的 HTML Extract 节点可以从 HTML 中提取指定内容,但你需要先用浏览器开发者工具找到目标内容的 CSS 选择器路径。比如要提取某篇文章的正文,选择器可能是 .article-content p。
第四步,添加 Qdrant 节点(或 Chroma 节点),将提取到的文本转化为向量并存入数据库。这一步需要配置一个 Embedding API。如果你用的是 OpenAI 兼容的 API 接口(包括很多国产大模型的接口),在 n8n 中直接选择 OpenAI Embedding 节点,然后把 API 地址和 Key 填入即可。
接下来配置 Dify。
在 Dify 中创建一个"Chatflow"类型的应用。Chatflow 和普通的 Chat 模式的区别在于,它允许你自定义完整的推理流程,包括知识库检索、条件判断、多轮对话逻辑等。
在 Chatflow 中,添加以下节点:
开始节点接收用户输入的行业关键词。
知识库检索节点从你在上一步配置的向量数据库中检索与关键词最相关的文档片段。这里需要设置两个关键参数:Top K 建议设为 5 到 8,即每次检索最相关的 5 到 8 个文档片段;Score Threshold 建议设为 0.6,低于这个相关度阈值的片段会被过滤掉,避免噪声干扰。
LLM 节点是核心分析引擎。在这个节点的 System Prompt 中,你需要定义研报的结构化输出格式。以下是一个可以直接使用的模板:
你是一名行业分析师。请根据提供的参考资料,生成一份结构化的行业研报。报告需包含以下部分:一、行业概况与核心数据;二、主要竞品动态(3-5家);三、技术趋势与市场机会;四、风险提示。每个部分用二级标题分隔,使用 Markdown 格式。数据部分优先使用参考资料中的具体数字,避免模糊描述。
最后添加一个输出节点,将 LLM 生成的内容返回给 n8n。
回到 n8n 完成最后一环。
在 n8n 中添加一个 HTTP Request 节点,向 Dify 的 Chatflow API 发起请求。将行业关键词作为输入参数传入,等待 Dify 返回分析结果。
拿到分析结果后,你可以选择多种输出方式。最简单的是直接保存为 Markdown 文件——用 n8n 的 Write Binary File 节点,将 Dify 返回的文本写入指定路径。如果你需要生成 PDF,可以添加一个调用 Markdown-to-PDF API 的 HTTP Request 节点。
最后,你可以配置一个通知节点——比如通过飞书或企业微信的 Webhook 发送一条消息,告知研报已生成完毕并附上文件链接。
避坑清单。
Embedding 模型选错是最大的坑。很多教程默认使用 OpenAI 的 text-embedding-ada-002,但它在中文检索场景下的表现远不如专门优化过中文的模型。如果你的信息源以中文为主,建议使用阿里或字节的中文 Embedding 模型,或者开源的 bge-m3。
Dify 的 Chatflow 在调试阶段建议开启"单步执行"模式。这样可以逐节点查看输入输出,快速定位问题出在哪个环节。全链路调试虽然更真实,但在初期搭建阶段很难排查故障点。
n8n 的 Schedule Trigger 在 Docker 部署模式下,容器重启后会丢失定时任务状态。建议在配置定时任务后将 Workflow 导出为 JSON 备份,容器重建后重新导入即可恢复。
向量数据库的增量更新是一个容易被忽视的问题。每次数据采集时不要全量重建索引,而是用去重逻辑判断新数据是否已经存在于数据库中。Qdrant 支持 payload-based 去重,可以给每条数据设置一个唯一的 URL 或内容哈希作为过滤条件。
大模型的输出稳定性需要反复调整 System Prompt。同一个 Prompt 在不同模型上的输出格式可能差异很大。建议先在 Dify 中用不同的模型测试同一个 Prompt,选择输出格式最稳定的那个作为生产环境的模型。
关注公众号,回复【进化】加入 AI 商业前沿交流群。关注变量引力,一起进化。