用 Dify 搭建自动化竞品分析工作流:从网页抓取到结构化报告的实战踩坑记录
把 Firecrawl 接入 Dify 做竞品分析,最大的坑不在于 LLM 的总结能力,而在于网页抓取的“噪音”处理。如果直接把整个页面的 Markdown 丢给 Claude 3.5 Sonnet,Token 消耗极快且极其容易被页脚的版权信息、导航栏干扰,导致分析结果出现幻觉。
我的这套工作流逻辑是: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)
还没有回复,来发第一条吧!
