🔍 Sentiment Monitor — 多平台舆情监控与分析
📁 SKILL DIRECTORY PATH
{skillDir}
🚨 MANDATORY FILES (READ FIRST)
references/platforms.md— 平台搜索策略(必读)references/report_schema.md— 数据结构规范(必读)
触发条件
当用户需要:
- 监控某关键词/品牌/公司/话题的舆情
- 收集多平台新闻或社交媒体提及
- 生成舆情分析报告
- 了解某话题的公众评价和情感倾向
- 设置定时/周期性舆情监控与推送通知(如"每天早上 7 点汇报 xxx 舆情")
工作流程
Step 1: 确认监控参数
向用户确认:
- 关键词组合模式(默认单关键词):
- 单关键词:1 个核心词(如「比亚迪」)
- AND 组合:多词必须共现(如「比亚迪 起火」→ 只看同时包含两词的内容)
- OR 组合(竞品对标):多词任一出现即可(如「比亚迪 OR 特斯拉 OR 小米汽车」→ 覆盖三家任一家的舆情)
- 品牌 + 高管:关键词 + 人名组合(如「瑞幸 陆正耀」)
- 品牌 + 行业事件:关键词 + 事件词(如「比亚迪 起火 OR 自燃」)
- 时间范围:必须由用户明确指定(如"最近 3 天"、"2024-01-01 至 2024-01-07"、"本周");若用户未指定则默认最近 7 天并告知用户
- 平台范围:默认全平台(见 platforms.md)
- 关注维度:正负面情感、风险点、传播趋势
> ⚠️ 时间范围是硬性约束:
> - 搜索引擎的 after:/before: 参数不可靠,禁止使用——这类过滤在实际搜索工具中常常不生效,只会返回重复结果白白浪费轮次
> - 时间过滤必须在拿到搜索结果后人工判断:检查每条结果摘要或标题中的日期,超出范围的直接跳过不收录
> - 报告中每条数据必须标注发布日期,确认在范围内
> - 若某平台在该时间段确实无内容,如实标注"该平台此期间无相关内容",严禁用过期内容填充
Step 2: 多平台并行搜索(10-12 轮,4 个并行)
核心原则:精准覆盖、控制轮次、结果后过滤时间
> ⚠️ 搜索语句不加 after:/before: 参数(搜索引擎不支持,加了反而返回重复结果)
> 时间控制方式:搜索词中加入年月(如 2026年4月、最新),拿到结果后逐条核查日期
使用 web_search,每批 4 个并行,共 3 批,总计 12 轮:
第一批(主流平台,4 个并行):
- {关键词} site:weibo.com {年月} — 微博
- {关键词} site:zhihu.com {年月} — 知乎
- {关键词} site:bilibili.com {年月} — B站
- {关键词} site:toutiao.com OR site:163.com {年月} — 头条+网易
第二批(新闻媒体 + 科技财经,4 个并行):
- {关键词} site:news.qq.com OR site:thepaper.cn {年月} — 腾讯新闻+澎湃
- {关键词} site:sina.com.cn OR site:sohu.com {年月} — 新浪+搜狐
- {关键词} site:36kr.com OR site:huxiu.com OR site:ithome.com {年月} — 科技媒体
- {关键词} site:people.com.cn OR site:xinhuanet.com OR site:caixin.com {年月} — 央媒+财新
第三批(社交内容 + 主题角度,4 个并行):
- {关键词} site:xiaohongshu.com OR site:xhslink.com {年月} — 小红书
- {关键词} site:weixin.qq.com OR site:baijiahao.baidu.com {年月} — 公众号+百家号
- {关键词} 争议 负面 投诉 质疑 {年月} — 负面舆情专项
- {关键词} 好评 推荐 KOL 测评 热搜 {年月} — 正面+热点专项
结果筛选(每批搜完立即处理):
- 检查每条结果的日期(摘要中通常有"X天前"、"X月X日"等标注)
- 在时间范围内 → 收录;超出范围 → 跳过,记录为"已过滤"
- 目标:筛选后有效条目 50+ 条,覆盖 12+ 平台
平台覆盖说明(重要):
> ⚠️ 抖音 / 视频号的数据限制 —— 经实测验证,当前搜索引擎对这两个平台的 site:douyin.com 和 site:channels.weixin.qq.com 完全不生效,返回的都是腾讯新闻、微博、今日头条等兜底结果,不是抖音/视频号原始内容。
>
> 因此标准 12 轮搜索不覆盖抖音/视频号原始 UGC。若用户明确要求覆盖这两个平台,按需启动补充批次(+2 轮,2 个并行):
> - {关键词} 抖音 热搜 排行 爆款 {年月} — 通过 36氪/虎嗅/新榜等第三方报道反推
> - {关键词} 视频号 爆款 10万+ 刷屏 {年月} — 通过公众号复盘文章间接覆盖
>
> 必须在报告中明示:当启用补充批次时,标注「⚠️ 抖音/视频号数据基于第三方报道二次分析,非平台原生 UGC 抓取,覆盖深度受限」。
搜索失败降级 SOP:
> 搜索工具可能因反爬、临时不可用、关键词太冷等原因返回 0 条结果,不要硬扛,按以下顺序降级。
- 零结果平台 → 近义词重搜
- 例:比亚迪 起火0 条 → 改比亚迪 自燃 OR 电池 OR 热管理
- 例:小米 SU70 条 → 改小米汽车 OR 小米 SU
- 优先保留原意,扩大覆盖面 - 某批次整体 0 条 → 启动兜底搜索
- 例:第三批 4 个搜索全 0 条 → 补{关键词} 热点 最新一轮全网兜底
- 兜底结果仍 0 条 → 在报告中标注"该关键词本期全网无相关内容" - 同义词替换优先级:专有名词不变 → 行业词替换 → 抽象词兜底
Step 3: 详情抓取(重点内容)
对搜索结果中的高价值链接,使用 web_fetch 抓取正文详情:
- 优先抓取:权威媒体报道、深度分析文章、官方声明
- 抓取前先确认文章发布日期在时间范围内,超出则跳过
- 每个主要平台至少深入抓取 1 篇
- 总计抓取 10-15 篇详情(不必贪多,质量优先)
抓取失败降级 SOP:
> web_fetch 经常因反爬、登录墙、JS 渲染、404 等原因失败,按以下顺序降级:
- 首选
web_fetch抓正文 - 失败 → 换
baidu_cache:{URL}前缀再试一次 —— 百度缓存能拿到部分被反爬的页面快照 - 仍失败 → 用
web_search搜文章标题 + 关键句,从结果摘要里补回核心信息 - 彻底失败 → 在报告中标注「⚠️ 该链接抓取失败,仅基于搜索摘要分析」,但不删除条目(保留 URL 供用户手动查阅)
- 同一域名失败 ≥3 次 → 跳过该域名剩余链接,避免浪费时间在不可达源上
Step 4: 情感分析与结构化整理
对所有搜集到的信息进行分析:
情感分类标准:
- 🟢 正面:赞扬、支持、推荐、数据亮眼
- 🔴 负面:批评、质疑、投诉、差评
- 🟡 中性:客观报道、数据陈述、无明显倾向
- 🟣 混合:同一内容中正负面并存
风险评级标准(量化基线):
- ⚠️ 高风险:24h 内 ≥10 条负面条目 + 至少 1 个央媒/财经媒体跟进;或同一事件被官方/监管点名
- 🔶 中风险:3 天内负面占比 ≥30%;或核心平台(微博/知乎)出现热搜/热帖;或多平台同步争议
- ℹ️ 低风险:单点负面,无扩散,无主流媒体跟进
- ⚪ 无风险:仅正面/中性内容,无可识别风险信号
调档规则:
- 跨级条件叠加时自动上调一级(如"3天内负面≥30%"叠加"央媒跟进"→ 高风险)
- 单条内容若被财新/人民网/新华社/澎湃等权威媒体单独报道,单独计入高风险候选
- "无风险"出现前提:监控期 ≥24h 且总条目 ≥10 条,避免样本不足误判
数据源可信度(二级判定):
> 同一平台内既有 A 级内容(如财新原创)也有 C 级内容(如百家号营销文),不能按平台一刀切。先按平台粗分,再用 3 条规则调档。
平台粗分(同平台默认等级):
- A 级(权威):央媒(人民网/新华网/央视)、财新、澎湃、第一财经、界面新闻
- B 级(主流商业媒体):36氪、虎嗅、IT之家、腾讯新闻、新浪、搜狐、网易
- C 级(UGC + 自媒体):微博、小红书、知乎、B站、公众号、头条号、百家号
- D 级(聚合/营销):抖音第三方报道、视频号复盘文章、未署名聚合站
二级调档规则(在粗分基础上 ±1 档):
- +1 档:有明确作者署名 + 有事实核查 / 数据来源 / 多方信源交叉验证
- +1 档:多平台同源转载(如央媒首发,36氪/虎嗅跟进)
- -1 档:营销号模板句式("震惊!"、"不转不是中国人")/ 无署名 / 标题党 / 内容农场特征
- 封顶:C 级 +1 档最高到 B 级;D 级 +1 档最高到 C 级
Step 5: 生成 HTML 可视化报告
使用 scripts/generate_report.py 生成报告。
数据准备: 将分析结果写入 JSON 文件,格式参考 references/report_schema.md。
JSON 关键字段位置(v2 起兼容两种放置):
- sentiment_summary:优先放在 report_meta 内部(推荐);也可放在顶层 DATA.sentiment_summary,模板已兜底支持
- sentiment_articles: 顶部顶层字段,按 positive/negative/neutral/mixed 四个数组分桶(文章 tab 渲染依赖此结构)
- risk_analysis / risk_alerts: 顶层,详见风险评级口径(建议 ① 量化基线)
执行命令:
cd {skillDir} && python scripts/generate_report.py --input {数据JSON路径} --output {报告输出路径}
报告包含:
- 📊 舆情概览:总条数、正/负/中性占比、平台分布
- 📈 情感分布图表(饼图 + 柱状图)
- 🏷️ 平台热度排名
- 📋 详细舆情条目(含来源、时间、情感标签、摘要、原文链接)
- ⚠️ 风险预警清单
- 📝 综合分析结论与建议
注意事项
- 时间过滤方式:禁止在搜索语句中使用
after:/before:参数(不生效);改为搜索词加年月 + 拿到结果后逐条核查日期 - 搜索轮次控制:固定 3 批 × 4 个并行 = 12 轮,不随意增加,避免搜索工具响应堆积变慢
- 覆盖广度:12 轮搜索已能覆盖 15+ 个平台,通过 OR 组合查询提高效率
- 时间范围硬约束:超出范围的结果一律丢弃,不得填充报告
- 中文编码:JSON 数据用 Python dict + json.dump 方式生成,避免中文引号问题
- 去重:同一事件不同平台的报道保留最详细的 1-2 条
- 客观性:分析基于事实数据,避免主观臆断
定时舆情通知模式
触发识别
当用户消息包含时间频率 + 舆情相关表达时,进入定时通知模式。典型表达:
- "每天早上 7 点给我汇报 xxx 的舆情"
- "每天 9 点和 18 点监控 xxx"
- "每周一汇报 xxx 品牌口碑"
- "工作日下午 3 点推送 xxx 最新舆情"
- "每小时监控一次 xxx 的负面信息"
定时模式工作流程
Step A: 解析定时参数
从用户消息中提取:
- 关键词:监控的核心词(必须)
- 执行频率:自然语言时间表达(如"每天7点"、"工作日9点和18点")
- 关注重点:全面分析 / 仅负面预警 / 仅数据追踪(默认全面分析)
- 通知方式:企微推送(默认开启)
向用户确认以上参数,明确无误后执行下一步。
Step B: 构建定时任务 Prompt
根据参数拼装执行 Prompt,模板如下:
请使用 sentiment-monitor Skill 对关键词"{关键词}"执行舆情监控分析:
时间范围:{时间范围,如"过去24小时"/"过去7天",严格不越界}
1. 加载 Skill: use_skill("sentiment-monitor")
2. 按照 SKILL.md 中的 Step 2~5 完整执行:
- 多平台并行搜索(3批 × 4并行 = 12轮,搜索词加年月,结果后核查日期,覆盖 15+ 平台)
- 严格过滤:所有收录数据须在时间范围内,超出范围的一律跳过
- 详情抓取(10-15 篇,抓取前确认日期)
- 情感分析与结构化整理
- 生成 HTML 可视化报告
3. 完成后,生成一段 Markdown 格式的舆情摘要(不超过 4000 字节),包含:
- 📊 数据概览:总条数、正/负/中性分布
- 🔥 今日热点(前 3 条)
- ⚠️ 风险预警(如有高/中风险项)
- 📈 情感趋势判断
4. 通过企微推送 Markdown 摘要给用户
5. 同时将 HTML 完整报告作为文件推送
如用户指定"仅负面预警",调整 Prompt 为:
重点搜索 "{关键词} 争议 投诉 负面 质疑 差评 问题",仅分析和推送负面/风险信息。
如无负面舆情,推送一条"✅ {关键词} 当前无负面舆情"的通知即可。
Step C: 创建定时任务
使用 scheduled_task_create MCP 工具创建任务:
参数说明:
- name: "舆情监控-{关键词}"
- schedule: 将用户的时间表达转换为 cron 或直接传自然语言
- "每天7点" → "0 7 * * *" 或 "每天早上7点"
- "每天9点和18点" → 需创建 2 个任务,分别 "0 9 * * *" 和 "0 18 * * *"
- "工作日下午3点" → "0 15 * * 1-5"
- "每小时" → "0 * * * *"
- "每周一9点" → "0 9 * * 1"
- prompt: Step B 中构建的完整 Prompt
- notifyWecom: true
- enabled: true
多时间点处理:如用户说"每天 7 点和 19 点",需拆分为 2 个独立定时任务:
- "舆情监控-{关键词}-早报" → 0 7 * * *
- "舆情监控-{关键词}-晚报" → 0 19 * * *
Step D: 确认并反馈
创建成功后,向用户反馈:
✅ 定时舆情监控已设置!
📌 监控关键词:{关键词}
⏰ 执行频率:{频率描述}
📢 通知方式:企微推送(Markdown 摘要 + HTML 完整报告)
🔄 状态:已启用
每次执行时,我会:
1. 全网 15+ 平台采集最新舆情
2. 自动分析情感倾向与风险等级
3. 生成可视化报告并推送给你
如需调整,你可以说:
- "暂停 xxx 的舆情监控"
- "把 xxx 的监控改为每周一次"
- "删除 xxx 的舆情监控任务"
定时任务管理
用户后续可能的管理操作及对应处理:
| 用户指令 | 操作 |
|---|---|
| "暂停/停止 xxx 监控" | 调用 scheduled_task_update 设置 enabled=false |
| "恢复 xxx 监控" | 调用 scheduled_task_update 设置 enabled=true |
| "删除 xxx 监控" | 调用 scheduled_task_delete |
| "改为每周一执行" | 调用 scheduled_task_update 修改 schedule |
| "加上 yyy 关键词一起监控" | 修改任务 prompt 中的关键词 |
| "查看我的监控任务" | 调用 scheduled_task_list |
| "立即执行一次" | 调用 scheduled_task_run |