教程中心工作流
工作流

用 AI 智能体做竞品监控:定时抓取 + AI 摘要推送到微信

2026.07.19· 6 个步骤 · 18 分钟阅读· 📡 竞品监控

每天手动刷竞品官网、公众号、定价页——又累又容易漏掉关键更新。本教程教你搭一个「竞品监控 Agent」:定时抓取你盯的目标站点,用 LLM 浓缩成 3 条人话要点,再自动推送到微信 / 邮件 / 飞书。你只需要早上看一眼摘要,重要变化一个不落。这套流水线会复用本中心前两篇的 Firecrawl 抓取与结构化抽取能力。

📡 本教程适合:市场、运营、创始人等需要「持续盯竞品」但没时间天天刷的人。可用 OpenClaw / n8n / 一段 Python 定时任务实现,下面以 Python 定时任务为例,思路通用。

先搞懂:一条监控流水线长什么样

把它拆成 4 段,每段都能单独换工具:

环节干什么可用工具
采集定时抓目标页最新内容Firecrawl / RSS
比对和上次抓的比,找出变化文本 diff / 哈希
摘要把变化浓缩成要点LLM
推送发到微信/邮件/飞书Server 酱 / SMTP / 开放平台

没变化就别推送——每天弹一条「无更新」比不弹还烦。流水线必须在「比对」环节做拦截。

Step 1:定义监控清单

1 先列清楚「盯谁、盯什么」
targets = [
  {"name": "竞品A官网",   "url": "https://a.com/",        "watch": "产品/定价页"},
  {"name": "竞品B博客",   "url": "https://b.com/blog",     "watch": "新文章标题"},
  {"name": "竞品C定价",   "url": "https://c.com/pricing",  "watch": "价格数字"},
]
💡 监控粒度越细越好。「盯整站」会抓一堆噪声;「只盯定价页」变化才有意义。配合《文档结构化抽取》把价格直接抽成数字,比对最准。

Step 2:定时抓取 + 和上次的差异比对

2 只关心「变了什么」

用 Firecrawl 抓正文,存一份快照,下次抓来算差异:

import hashlib, json
from firecrawl import FirecrawlApp
app = FirecrawlApp(api_key="你的Key")

def fetch(url):
    return app.scrape_url(url, params={"formats":["markdown"]})["markdown"]

def changed(name, new_text):
    h = hashlib.md5(new_text.encode()).hexdigest()
    old = cache.get(name)              # 读上次快照
    cache[name] = h
    return old is not None and old != h

diffs = []
for t in targets:
    txt = fetch(t["url"])
    if changed(t["name"], txt):
        diffs.append({"name": t["name"], "text": txt})

用内容哈希判断「变没变」,比字符串 diff 稳——能过滤掉「页脚版权年变了」这类无关噪声,只关心正文实质变化。

Step 3:让 LLM 把变化浓缩成 3 条要点

3 人话摘要,不是全文转发
from openai import OpenAI
client = OpenAI()

def summarize(name, text):
    r = client.chat.completions.create(
      model="gpt-4o-mini",
      messages=[{
        "role":"user",
        "content": f"以下是「{name}」本次更新内容,请用不超过3条要点概括"
                   f"对我校市场最有价值的实质变化,每条一句话:\n{text}"
      }]
    )
    return r.choices[0].message.content

brief = "\n\n".join(f"【{d['name']}】\n{summarize(d['name'], d['text'])}" for d in diffs)
🔑 关键技巧:摘要提示词强调「对我校市场最有价值」,模型才会帮你做过滤,而不是复述更新日志。

Step 4:推送到微信(Server 酱方案,最省事)

4 手机上准时收到摘要

微信个人号没有官方推送接口,最省事的是 Server 酱(或企业微信应用消息):

import requests

def push_wechat(title, content):
    # 在 sct.ftqq.com 拿到 SendKey
    url = f"https://sctapi.ftqq.com/{SENDKEY}.send"
    requests.post(url, data={"title": title, "desp": content})

if brief.strip():
    push_wechat("竞品日报", brief)
# 无变化则不调用,静默

推送到飞书/钉钉可用各自开放平台的「群机器人 webhook」,把上面的 push 换成 POST 一个 JSON 即可,思路完全一致。见本中心《飞书/钉钉接入》思路。

Step 5:用定时任务让它每天自动跑

5 不用你点,它自己干
# 本地用 cron,每天早 8:30 跑
# crontab -e
30 8 * * * /usr/bin/python3 /path/monitor.py

# 或用 OpenClaw 的 Heartbeat Cron(无需自己管服务器)
# 在 heartbeat.md 写:每天 08:30 运行竞品监控脚本并推送
🚀 想 7×24 不掉线又不想养服务器,把脚本丢进 OpenClaw 的 Cron,或者用云函数(如 Cloudflare Workers / 阿里云函数计算)定时触发,成本几乎为零。

Step 6:避坑清单

6 上线前对照
现象解决
无变化也推送每天收到「无更新」比对环节拦截
抓整站噪声太多只盯具体页面
摘要太长懒得看限 3 条要点
Key 泄露被冒用环境变量 + 推送 Key 单独存

小结

竞品监控 Agent 是「把人从重复刷网页里解放出来」最典型的智能体应用:采集→比对→摘要→推送四段流水线,变化才通知、无变化则静默。它把本中心《Firecrawl 实战》的抓取、《文档结构化抽取》的字段化、《Agent 反馈闭环》的持续优化思路串成了一条可直接用的产品。想更省心,直接用 OpenClaw 的 Cron 托管整套脚本即可。