with one click
topic
// 中文多源舆情聚合调研。给定话题,跨 B 站 / 小红书等中文平台并发拉近 30 天热门内容,按 engagement + recency + relevance 计分排序,输出综合简报。
// 中文多源舆情聚合调研。给定话题,跨 B 站 / 小红书等中文平台并发拉近 30 天热门内容,按 engagement + recency + relevance 计分排序,输出综合简报。
[HINT] Download the complete skill directory including SKILL.md and all related files
| name | topic |
| description | 中文多源舆情聚合调研。给定话题,跨 B 站 / 小红书等中文平台并发拉近 30 天热门内容,按 engagement + recency + relevance 计分排序,输出综合简报。 |
| triggers | 调研, 全网调研, 近 30 天, 30天内, 多源聚合, 舆情调研 |
| license | MIT |
| allowed-tools | Bash |
按"事件 / 话题"做近 30 天的横向调研。每个平台独立 collector 拿 engagement 数据,跨源去重 + 计分 + 排序,输出 markdown 简报。
主入口在本 skill 目录的 scripts/research.py,子进程方式调用。
收到 /topic <query> 后,第一个动作必须是:调 exec 跑 python3 skills/topic/scripts/research.py "<query>" --emit md(Linux/服务器;Windows 本地若 python3 不存在再用 python)。
不存在以下决策路径——下面任何一种推理出现都违规,必须重写:
只要 user 输入 /topic <query>,无论 query 是:
严禁的逃逸动作:跳过 exec 直接基于训练知识答 / 用 web_fetch 自己搜 / 调 use_skill 切其他 skill。
跑完 exec 拿到 stdout 之后,才有资格按下面「输出契约」格式写 reply。
每次 /topic 调用是独立的——只看本次 user 消息里的 topic 词,完全忽略 chat history 里之前的调研:
/topic <X> /topic <Y> 时,第二次不要做 X vs Y 对比)research.py "<topic>" → 按下面格式输出本次结果调研完成。
## 综合 Top {N}
1. **[<标题原文>](<url>)** _(<源中文名>)_ — <≤50 字摘要>
2. **[<标题原文>](<url>)** _(<源中文名>)_ — <≤50 字摘要>
...({N} 是 stdout `## 综合 Top N` 段的实际条数,最多 10)
(摘要从 stdout「各源原始素材」段提取;缺失时降级为 `**[标题](url)** _(源)_`,不强加 "—")
## 各源讨论重点
- **<源中文名>**:<1-2 句基于本源 top 5 实际内容的事实归纳>
- **<源中文名>**:<同上>
### 数据缺失说明
- **<源中文名>**:⚠️ 缺 cookies / 本次未拉到内容 / ⚠️ 采集失败:<错误>
## 情绪分析
- 正面:<1-2 句基于实际笔记内容>
- 负面:<1-2 句>
- 中性 / 信息向:<1-2 句>
(如某维度本次完全没有,就**省略那条 bullet**;不脑补)
归档说明(reply 模板外,仅作背景信息):脚本会把完整数据(含 engagement 数字 + JSON)落盘到
.paimon/skills/topic/cache/<slug>/供 user 后续查看。reply 内容不要提及落盘路径,更不要file_ops read这些文件——stdout 已含 reply 需要的所有素材。
调脚本 → 用 stdout 写 reply,两步结束:
exec 跑 python3 skills/topic/scripts/research.py "<topic>" --emit md(Linux/Mac/服务器;Windows 本地若 python3 不在再换 python)## 综合 Top N / ## 各源讨论重点 / ## 各源采集情况 / 「各源原始素材」全部段落——这就是 reply 的唯一素材来源,按上面「标准输出结构」格式重组发出严禁:
file_ops read .paimon/skills/topic/cache/<slug>/report.md 或 .json——那只是落盘存档,stdout 已经够了,再读纯属浪费 tokenfile_ops list 找 cache 目录或 slug 名——stdout 末尾「已落盘」提示行就含 slugweb_fetch 补充信息——stdout 数据是唯一源,缺数据的源走「数据缺失说明」段,不要再去搜stdout 「各源采集情况」段会列全部 5 个源。reply 的「各源讨论重点」分上下两段:
上半段(主体):只列实际采集到 ≥1 条数据的源,每个源 1-2 句基于本源 top 5 实际内容的事实归纳。正负分化(≥2 正 + ≥2 负)的源用「主流认为 X,反方认为 Y」保留双方。
下半段「### 数据缺失说明」:列出所有没数据的源及原因,按 stdout 状态原样写:
⚠️ 缺 cookies:原样写 ⚠️ 缺 cookies,去 webui /feed「站点登录」tab 扫码本次未拉到内容:原样写 本次未拉到内容(不要自己揣测原因)⚠️ 采集失败:xxx:原样写 ⚠️ 采集失败:<错误信息>5 个源必须全部出现(上半段或下半段,不重复),不要省略。不要替用户揣测原因(比如把"未拉到"写成"cookies 失效"或"近期无讨论")——用户自己能判断。如果 5 源全都没数据,上半段空着不写,只有下半段「数据缺失说明」。
🔥 调研结果来啦~ / 旅行者,派蒙这就帮你跑## 核心发现 / ## 热点话题 / ## 整体风向 / ## 关键事件 / ## 舆情速览 / ## 关键人物## 综合 Top N N 是实际条数;ranked 不足 10 时按实际条数照搬,不要强凑 10 条)## 综合 Top {数字},不要写成 ## 热度 Top X / ## 综合榜 / ## TOP10 等## B 站(N 条) / ## 知乎(N 条) / ## 小红书(N 条) —— 这些只在落盘文件里播放 1.2M · 赞 50K · 评 3K · score 0.85 —— 全部去掉,只留 标题 + 链接 + 源标记 + 摘要这条很火 / 值得一看 等评价 —— 必须是事实摘要,限 50 字内封神 / 评价极高 / 热度可观 / 值得关注 / 值得期待 / 凶猛 / 亮眼 / 炸裂A vs B 对比 / 延续上次话题发送 reply 前,逐条核对:
## B 站(N 条) / ## 知乎(N 条) / ## 小红书(N 条) 段?## 核心发现 / ## 热点话题 / ## 整体风向 / ## 关键事件 / ## 舆情速览 等自创章节?## 综合 Top N 的 N 照搬,不强凑)?1. **[标题](url)** _(源)_ — 摘要:
[标题](url) 中括号 / 圆括号配对,url 不带空格** / 斜体 _..._ 配对(不要漏一边)— 是「空格 + em-dash + 空格」(U+2014),不是 -- 或 -...)**[标题](url)** _(源)_ 单行,没强加 "— "封神 / 评价极高 / 热度可观 / 值得关注 / 值得期待 / 凶猛 这类评价词?综合 Top {N} → 各源讨论重点 → 情绪分析(不调换、不删减)任何一条 ❌ → 立刻重写,不要发出去。
注:
exec工具已把 cwd 设为项目根(paimon/),直接用相对路径,不要cd,不要拼绝对路径。Python 命令:默认
python3(Linux/Mac/部署服务器都是这个)。仅当python3报 "command not found" 时再换python(Windows 本地常见情况)。首次直接用python3,不要无脑 fallback。
python3 skills/topic/scripts/research.py "Claude 4.7" --emit md
知乎 / 小红书需要 cookies;首次使用前去 webui
/feed面板的「站点登录」tab 扫码登录 (cookies 落到<paimon_home>/cookies/<site>.json,默认.paimon/cookies/,3-12 个月失效后回面板重扫) xhs 走 playwright headless,每次 collect 多 3-5s 启动开销
python3 skills/topic/scripts/research.py "小米 SU7 Ultra" --sources bili --emit md
python3 skills/topic/scripts/research.py "OpenAI" --days 14 --emit json
默认产物落到 ~/.paimon/skills/topic/cache/<slug>/,包含:
report.md —— 人类可读简报report.json —— 结构化数据(其他 skill 可复用)| 参数 | 默认 | 含义 |
|---|---|---|
topic | (必需) | 调研主题 |
--sources | bili,zhihu,xhs,tieba,weibo | 逗号分隔的源列表(支持 bili / zhihu / xhs / tieba / weibo;xhs/tieba/weibo 各启一次 chromium ~3-5s) |
--days | 30 | 时间窗(天) |
--emit | md | 标准输出格式:md / json / both |
--output-dir | <默认缓存> | 产物落盘目录 |
--discover-limit | 20 | 每源 web-search 候选数 |
--enrich-limit | 15 | 每源真正 enrich 的上限 |
--top-n | 10 | brief 版 stdout 输出的 Top N 条数 |
每个 collector 自管 discover + enrich,按统一 schema 输出 Item,再跨源聚合 → 计分 → 渲染:
topic → bili.collect() ─┐
→ github.collect() ├→ items_by_source → score → rank → render → report.md / .json
→ zhihu.collect() ─┤
→ ... 其他源 ─┘
各源现状:
/api/v4/search_v3),需要 cookies(playwright 登录后 storage_state);处理 question / answer / article 三种 hit 类型,拿点赞 / 评论 / 收藏 / 感谢scripts/lib/core/score.py)—— 各源专属 engagement 公式 + 同源 P90 归一化,最终 0.25·recency + 0.5·engagement + 0.25·relevance:
0.4·log10(view) + 0.3·log10(favorite) + 0.3·log10(danmaku)0.5·log10(voteup) + 0.3·log10(thanks) + 0.1·log10(comment) + 0.1·log10(favorite)log10(like)(搜索列表 only-like,favorite/comment 缺失走兜底)log10(reply) 主信号,view 有则加权 0.7/0.30.4·log10(repost) + 0.3·log10(comment) + 0.3·log10(like)skills/topic/
├── SKILL.md # 本文件
└── scripts/
├── research.py # CLI 入口
└── lib/
├── core/ # 公共组件(schema / http / log / dates / score / render / discover)
└── sources/ # 各 source collector
├── bili.py # ✅ 走官方 search API,免登录
├── zhihu.py # ✅ search v3 + cookies
├── xhs.py # ✅ playwright headless + cookies + DOM
├── tieba.py # ✅ playwright + 百度 BDUSS cookies + DOM
├── weibo.py # ✅ playwright + cookies + s.weibo.com DOM
└── ... # 后续 GitHub(公开 search API,技术话题补充)
每个 source collector 必须暴露统一签名:
def collect(topic: str, range_from: str, range_to: str, *, limit: int) -> list[Item]
binding_kind='deep_research' 的执行体(每周 1 次而非每日)research.py。脚本采集结果由数据说话,命中没结果时照实输出「数据缺失说明」段。严禁 LLM 在调脚本前判定「这不属于 topic 范畴」从而绕过脚本去用 web_fetch / 训练知识。实测下来除 B 站 / GitHub 外,主流中文 UGC 平台全部需要登录态(匿名直接 403 / 302 跳登录)。所以统一走 playwright cookies 路径——首次本地扫码登录,cookies 落 ~/.paimon/cookies/{site}.json,云端 rsync。
| Source | 状态 | 难度 | 路径 |
|---|---|---|---|
| B 站 | ✅ 已接入 | ★ 易 | 官方 search API,免登录 |
| 知乎 | ✅ 已接入 | ★★ 中 | search v3 API + cookies;首次去 webui /feed「站点登录」tab 扫码 |
| 小红书 | ✅ 已接入 | ★★★ 中难 | playwright headless + cookies + DOM 解析;MVP 不抓发布日期 |
| 贴吧 | ✅ 已接入 | ★★ 中 | playwright headless + 百度 BDUSS cookies + DOM 解析(匿名 403 跳百度安全验证) |
| 微博 | ✅ 已接入 | ★★★ 难 | playwright headless + cookies + 解析 s.weibo.com 搜索页 DOM;selector 待 user 实测调 |
| GitHub | TODO | ★ 易 | 公开 search API,免登录;技术话题补充 |
各站 cookies 失效后,回 webui /feed「站点登录」tab 扫码续期。
model_router(deepseek-pro)重排相关度BusinessArchon.call_skill('topic', topic=...) 调用代理(与世界式 v0.3 设计对齐)binding_kind='deep_research',每周自动跑(与现有 manual 日报订阅并存)