用 Dify 搭建自动化竞品分析工作流:从网页抓取到结构化报告的实战踩坑记录

数据分析师Lucy 中级 2026/5/2 421 浏览 14 点赞 约 2 分钟

把 Firecrawl 接入 Dify 做竞品分析,最大的坑不在于 LLM 的总结能力,而在于网页抓取的“噪音”处理。如果直接把整个页面的 Markdown 丢给 Claude 3.5 Sonnet,Token 消耗极快且极其容易被页脚的版权信息、导航栏干扰,导致分析结果出现幻觉。

用 Dify 搭建自动化竞品分析工作流:从网页抓取到结构化报告的实战踩坑记录

我的这套工作流逻辑是:Firecrawl 抓取Python 脚本清洗LLM 结构化提取最终报告生成

最关键的清洗环节,我没有用 Dify 自带的简单文本处理,而是写了一个 Python 节点,用正则强行剔除掉所有 <nav><footer> 标签内的内容,只保留 main 区域。

import re

def main(arg1):
    text = arg1
    # 粗暴但有效的去除导航和页脚噪音
    text = re.sub(r'<nav.*?>.*?</nav>', '', text, flags=re.DOTALL)
    text = re.sub(r'<footer.*?>.*?</footer>', '', text, flags=re.DOTALL)
    # 过滤掉连续的空行,减少Token浪费
    text = re.sub(r'\n\s*\n', '\n', text)
    return {
        "cleaned_text": text
    }

提示词配置上,千万别写“请帮我分析这个网页”,这种指令太模糊。我采用的是字段定义法,强制要求 AI 按照 JSON 格式输出,这样方便后续将结果同步到 Notion 或飞书表格。

我的提取 Prompt 结构如下:

# Role: 资深产品分析师
# Task: 从提供的网页内容中提取以下维度信息:
- 核心功能点: [列出3-5个关键功能]
- 目标用户群: [基于文案推断其核心客群]
- 定价模式: [免费/订阅/买断,具体金额]
- 竞争优势: [挖掘其宣传的 Unique Selling Point]

# Constraint: 
1. 仅基于提供的内容提取,禁止脑补。
2. 若内容缺失,该项填 "未提及"。
3. 输出格式必须为 JSON。

效率提升最明显的地方在于 Dify 的“迭代(Iteration)”节点。我配置了一个 URL 列表作为输入,让工作流自动循环抓取 5 个竞品页面,然后将 5 份结构化 JSON 汇总到一个全局变量中,最后由一个长文本 LLM 节点进行横向对比。

踩过的一个大坑是:很多竞品页面是单页应用(SPA),Firecrawl 如果不配置 scrape 选项中的 wait_for 参数,抓回来的全是空白的 HTML 骨架。记得在 API 调用时加上等待加载的时间,否则你会发现工作流运行成功但报告全是“未提及”。

全部回复 (0)

还没有回复,来发第一条吧!

发表回复

支持 Markdown 格式