参考招商基金用 AI 对新媒体做"事件+情感+风险"标注的思路,把它从舆情风控迁移到同业营销监控。全流程零持久化 —— 一次扫描的数据只在内存里处理, 卡片直接输出到群, 汇报在本次扫描的内存记录上聚合, 结束后不留任何痕迹。
references/prompt_template.md):完整的结构化标注模板,包含 17 个字段定义和示例scripts/init.py):交互式生成 watchlist.json,新手友好--check):检查 RSS 源可用性,提前发现问题--preview):终端预览抓取内容,无需推送--report):生成美观的可视化报告--incremental):基于 envelope_hash 实现去重,仅返回新增内容--cache):支持文件级缓存,跨会话保持增量状态--subscriptions):支持按关键词、作者、事件类型、策略进行精准过滤assets/subscriptions.json):灵活配置多个订阅规则和全局过滤条件# 1️⃣ 安装依赖
pip install feedparser
# 2️⃣ 初始化配置(交互式)
python scripts/init.py
# 3️⃣ 健康检查
python scripts/fetch.py --watchlist assets/watchlist.json --check
# 4️⃣ 运行扫描
python scripts/fetch.py --watchlist assets/watchlist.json --since-days 1
# 5️⃣ 本地预览效果
python scripts/fetch.py --watchlist assets/watchlist.json --since-days 1 --preview
# 6️⃣ 生成 HTML 报告
python scripts/fetch.py --watchlist assets/watchlist.json --since-days 7 --report
# 7️⃣ 🔄 增量扫描(仅返回新增内容)
python scripts/fetch.py --watchlist assets/watchlist.json --since-days 1 --incremental
# 8️⃣ 🔄 增量扫描(带持久化缓存)
python scripts/fetch.py --watchlist assets/watchlist.json --since-days 1 --incremental --cache .cache/hashes.json
# 9️⃣ 🔍 应用订阅过滤处理
python scripts/process.py --input record.json --channel markdown --subscriptions assets/subscriptions.json
# 🔟 🔍 指定特定订阅规则
python scripts/process.py --input record.json --channel markdown --subscriptions assets/subscriptions.json --subscription-id equity_focus
本 skill 只接受一种触发方式:用户在群里说出命令,agent 按 watchlist.json 批量扫同业。没有定时任务、没有单 URL 手抓、没有外部 webhook 推送。
触发词 → --since-days 参数映射:
| 触发词(任一匹配即可) | 默认 --since-days |
|---|---|
| --- | --- |
| "扫一下同业"、"扫同业"、"更新同业动态"、"对一下 watchlist"、"拉一下清单" | 1 |
| "本周同业"、"这周同业发了什么"、"看看这周同业" | 7 |
| "今天同业"、"今天同业有啥" | 1 |
| 只说"同业监控"、"监测竞品" 没有时间跨度 | 1(兜底) |
不在触发范围的请求(agent 应拒绝或说明):
用户说 "扫一下同业"
↓
scripts/fetch.py --watchlist ... --since-days 1 → envelope JSONL 流 (每行一条, 仅 stdout)
↓ LLM 对每条 envelope 按 references/reference.md §1-§2 做结构化抽取 (内存里)
17 字段 JSON 记录 (内存里)
↓ scripts/process.py (纯 pass-through, 不写文件)
validate → render card → stdout 给群
↓ 所有 card 产出后, agent 在内存里对本批 record 做聚合
本次扫描汇报 (机构活跃度、策略频次、合规关注、关键洞察) → 输出到群
只有 2 个脚本, 都不写任何文件:
# Step 1: 抓取 (产出 envelope JSONL 到 stdout, 无文件写入)
python3 scripts/fetch.py --watchlist <path> --since-days 1
# Step 2: 对每行 envelope, LLM 结构化抽取后调 scripts/process.py
# agent 的伪代码 loop:
# records = []
# for envelope in fetch_output:
# record = llm_extract(envelope) # 在内存
# card = scripts/process.py(record, --channel lark) # stdout 拿到, 推到群
# records.append(record) # 留在内存做汇报
#
# summary = aggregate(records) # 机构/策略/风险 聚合
# push_to_group(summary)
echo '<record-json>' | python3 scripts/process.py --channel lark
扫描结束后 agent 要做的最后一步:对刚才 records[] 做内存聚合,产出一份"本次扫描汇报"推到群里:
source.author 的 Counter)marketing_strategy 各 value 的 Counter)risk_level != "low" 的记录)competitive_insight)action_suggestion)不要持久化这些 records。扫描结束即丢弃。 下次用户再说"扫一下同业" 时, 一切从零开始。
references/reference.md §2)references/reference.md 的 §1 标签词表和 §2 字段定义event_type 单选,回答"内容是什么";marketing_strategy 多选,标"打法特征"related_products:只抽明确提到的产品,没提就留空数组sentiment:发布方的基调,不是你的主观评价risk_level:保守估计,大部分营销稿是 low;只在有明确合规瑕疵 / 业绩排名敏感表述 / 舆情爆发时才 medium/highpublished_at 缺失:用 crawled_at 顶替并在 notes 标注────────────────────────────────────────────────────────────────────────────
### 🎤 【经理观点】**招商基金**
📅 **发布时间**: 2026-05-13
> 招商基金王某某在招行App直播路演二季度策略, 3.2万人在线, 导流企微社群
🏷️ **标签**:
`🎤 经理观点` `🎓 专家型` `🌐 渠道渗透` `👥 私域社群`
┌─────────────────────────────────────────────────────┐
│ 📍 **来源**: 💬 招商基金 · 微信公众号
│ 😊 **情感**: 😊 正面(0.70)
│ 🚨 **紧急度**: 🟡 关注
│ ⚠️ **风险等级**: 🟢 低
└─────────────────────────────────────────────────────┘
📦 **关联产品**: 招商核心竞争力混合A、招商成长精选混合
👥 **涉及主体**:
👤 人物: 王某某
🏢 机构: 招商基金、招商银行
💡 **竞争洞察**:
延续'经理IP+银行渠道+私域导流'三段式, 路演转社群是高价值钩子
➤ **建议动作**:
市场部评估是否复制'招行App直播→企微社群'的承接链路
🔗 [查看原文 →]
────────────────────────────────────────────────────────────────────────────
卡片全部产出后, agent 把本批 records 在内存里做聚合, 再推一条汇总消息到群。示例:
======================================================================
📊 【同业营销情报扫描汇报】
⏰ 报告时间: 2026-05-13 10:30
┌─────────────────────────────────────────────────────────┐
│ 📄 扫描内容: 5 条 🏢 涉及机构: 5 家
│ 📦 关联产品: 8 只 📡 渠道类型: 3 种
│ ⚠️ 风险预警: 0 条 🔍 有效洞察: 5 条
└─────────────────────────────────────────────────────────┘
🏆 **机构活跃度排行**
─────────────────────────────────────────────────────────
🥇 华夏基金: ████████████████████ 3 条
🥈 招商基金: ██████████████ 2 条
🎯 易方达基金: █████████ 2 条
📈 **事件类型分布**
─────────────────────────────────────────────────────────
📈 业绩宣传: ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ 3
🤝 渠道合作: ▓▓▓▓▓▓▓▓▓▓ 2
✨ 品牌活动: ▓▓▓▓▓▓▓▓▓▓ 2
🔥 **营销策略热度**
─────────────────────────────────────────────────────────
🌐 渠道渗透: ●●●●●●●●●●●●●●● 5
📊 业绩驱动: ●●●●●●●●●●●● 4
💡 投教价值观: ●●●●●●●●●●●● 4
😊 **情感分布**
─────────────────────────────────────────────────────────
😊 正面: ▮▮▮▮▮▮▮▮▮▮▮▮▮▮▮ 3 (60%)
😐 中性: ▮▮▮▮▮▮▮▮ 2 (40%)
💡 **关键洞察汇总**
─────────────────────────────────────────────────────────
1. 华夏密集发布ETF流动性服务商公告, 配合新ETF上市做流动性铺垫
2. 上证4200点反弹带动权益基金业绩回升, 同业或将借势加大营销
3. 招商以'养老有招'品牌绑定养老赛道, APP+养老矩阵长期布局
🎯 **建议行动项**
─────────────────────────────────────────────────────────
1. 关注华夏粮食ETF上市后的规模和流动性表现
2. 市场部评估是否借反弹窗口加大权益产品推广
3. 品牌部评估我方养老品牌差异化定位
======================================================================
💬 如需查看详细内容,请说「扫一下同业」获取完整卡片
🎯 如需生成 HTML 报告,请使用 --report 参数
这份汇报也只在当前消息里输出, 不写文件。如果用户过一会儿问"上次扫描的结果?", 让他重新触发一次即可。这是设计约定 —— skill 本身不负责历史追溯。
event_type 单选不多选,选最主要那个entities.institutions,不要写 related_products.namesentiment 是营销方基调,不是市场反应risk_level 保守估计,营销监控目的是发现异常不是制造噪音marketing-intel-extractor/
├── SKILL.md # 📘 本文件
├── assets/
│ └── watchlist.json # 📋 监控清单示例 (6 家公募 + 3 家媒体)
├── references/
│ ├── reference.md # 📚 taxonomy / schema / 10 组示例 / watchlist 格式说明
│ └── prompt_template.md # 📝 LLM 结构化抽取 Prompt 模板(17 字段完整定义)
└── scripts/
├── init.py # 🚀 快速启动脚本(交互式生成配置)
├── fetch.py # 🔍 抓取 (支持 --check / --preview / --report)
└── process.py # 🎨 validate + render (带 emoji 增强)
遵循 AgentSkills 标准目录约定 (SKILL.md + assets/ + references/ + scripts/)。
python scripts/init.py
交互式引导生成 watchlist.json:
# 🎯 标准抓取
python scripts/fetch.py --watchlist assets/watchlist.json --since-days 1
# 🔍 健康检查(检查 RSS 源可用性)
python scripts/fetch.py --watchlist assets/watchlist.json --check
# 👁️ 本地预览(终端显示效果)
python scripts/fetch.py --watchlist assets/watchlist.json --since-days 1 --preview
# 📊 生成 HTML 报告
python scripts/fetch.py --watchlist assets/watchlist.json --since-days 7 --report
python scripts/fetch.py --watchlist assets/watchlist.json --since-days 7 --report --output my_report.html
# 🔄 从 stdin 读取并渲染
python scripts/process.py --channel markdown
# 📄 从文件读取
python scripts/process.py --input record.json --channel lark
# 👁️ 渲染示例(测试用)
python scripts/process.py --demo --channel markdown
# 📊 渲染汇总报告
python scripts/process.py --summary --input records.jsonl --channel markdown
| 类别 | Emoji | 含义 |
|---|---|---|
| ------ | ------- | ------ |
| 事件类型 | 🆕 | 新基金发行 |
| 👔 | 经理变更 | |
| 🎤 | 经理观点 | |
| 🎉 | 营销活动 | |
| 💰 | 产品优惠 | |
| 📈 | 业绩宣传 | |
| 🏆 | 荣誉获得 | |
| 🤝 | 渠道合作 | |
| 📚 | 投教内容 | |
| ✨ | 品牌活动 | |
| 📢 | 渠道推广 | |
| ⚠️ | 舆情事件 | |
| ⚖️ | 监管合规 | |
| 营销策略 | 🎓 | 专家型 |
| 📊 | 业绩驱动 | |
| 🌐 | 渠道渗透 | |
| 💡 | 投教价值观 | |
| 🎨 | 品牌叙事 | |
| 🎁 | 活动促销 | |
| 👥 | 私域社群 | |
| 🎭 | 跨界联名 | |
| 情感 | 😊 | 正面 |
| 😐 | 中性 | |
| 😟 | 负面 | |
| 风险等级 | 🟢 | 低 |
| 🟡 | 中 | |
| 🔴 | 高 | |
| 紧急度 | ⚪ | 归档(1) |
| 🟢 | 日常(2) | |
| 🔵 | 关注(3) | |
| 🟡 | 重点(4) | |
| 🔴 | 紧急(5) | |
| 🚨 | 告警(6) | |
| 渠道 | 💬 | 微信公众号 |
| 📹 | 视频号 | |
| 🎵 | 抖音 | |
| 📕 | 小红书 | |
| 📱 | 微博 | |
| 📰 | 财经媒体 | |
| 🌐 | 官网 | |
| 🔴 | 直播 |
🚀 开始你的同业监控之旅吧!
共 1 个版本