内容雷达 Content Radar
核心公式:好选题 = 信息差(供给侧) + 受众需求(需求侧)
- 供给侧:新信息 / 新实践 / 新玩法(用高互动内容作为证据)
- 需求侧:真实互动 / 提问 / 负面吐槽(数字越大需求越强)
依赖前置
本技能依赖已注册并 connected 的 mcp-autocli MCP 服务(≥ {{VERSION_FROM_POST_PILOT_ASSETS}},版本号从 post-pilot 的 assets/mcp_autocli-*.whl 文件名中提取)。
版本获取方式:通过 useSkill post-pilot 调用获取当前支持的 mcp-autocli 版本号(从 assets 文件名解析)。
- 未安装或版本不足时 → Step 0.0 会自动调用
useSkill post-pilot完成安装 (wheel + setup + Wukong 注册),全程无需用户介入。 - ⛔ 本技能不内嵌任何 pip install / setup 步骤 —— 装 MCP 是 post-pilot 的活, 混在一起会破坏职责边界。
触发与边界
强触发词(最高优先级,命中即用本技能,不要走 discovery)
"内容雷达"、"选题发现"、"帮我找选题"、"找选题"、"发现选题"、"找点选题"、 "扫一下最近的热点"、"最近有什么值得做的选题"、"有啥可写的"、"博主选题"、 "知识博主选题"、"自媒体选题"、"内容选题",支持指定话题(如"内容雷达 MCP"、 "帮我找 AI 工具方向的选题")。
与 discovery 技能的边界(必须遵守)
- 用户说"帮我找选题 / 选题发现 / 内容雷达 / 找点选题写"等面向内容创作的选题诉求 → 必须用本技能(content-radar),禁止走 discovery(资讯/舆情订阅)。
- discovery 处理的是"订阅 XX 行业资讯 / 监控 XX 品牌舆情 / 查最新新闻"。
- 本技能处理的是"我是博主 / 创作者,想找下一篇可以写什么"。
不触发场景
- 用户要求发布/编辑/排版已有博文 → 不触发
- 用户提供具体 URL 要求拆解/分析爆款 → 路由到
content-breakdown - 闲聊、通用百科问答 → 不触发
- 用户想"订阅资讯 / 监控舆情" → 路由到
discovery
流程硬约束(违反即评测失败)
- 必须先按 Step 0.0 用
mcp_runtime list_servers+ 版本号检测验证mcp-autocli已 connected 且 ≥ VERSION_FROM_POST_PILOT, 未满足时自动useSkill post-pilot完成安装,禁止自己跑 pip / setup。 - 必须按 Step 0.1 反问"你这次想找什么方向的选题?",禁止自行假设话题直接采集。
- 必须按 Step 0.2 询问网络环境(能否访问海外),禁止跳过——决定平台过滤范围。
- 必须按 Step 0.3 用 ask_human(form + multi_select)让用户多选采集平台,禁止跳过。 仅国内网络时只展示国内平台。
- 必须按 Step 0.4 调
launch_login打开 Edge 登录窗口 +ask_human让用户多选确认 已登录平台,禁止跳过;禁止自己调任何"登录探测"工具(已不存在)。 - 必须按 Step 1 用
mcp-autocli的search工具采集所有平台数据。 - 兜底:某平台 search 失败时允许
web_search兜底(标 🟡); RSS 用read_url抓 XML(标 🟡)。
前置条件
| 项目 | 要求 |
|---|---|
| MCP 服务 | mcp-autocli 已注册到 Wukong 且 status = connected |
| mcp-autocli 版本 | wheel ≥ VERSION_FROM_POST_PILOT(从 post-pilot 获取版本,含 15 工具 + publish click_draft_btn 等新特性) |
| 登录平台前置 | Edge 浏览器已装,登录态由用户在 launch_login 弹出的窗口手动完成 |
未满足任一项 → Step 0.0 会自动 useSkill post-pilot 完成安装,装完重检后继续。
执行流程
Step 0.0:MCP 安装预检(首步硬约束)
阶段 A:检查 MCP 服务是否注册
mcp_runtime(
action="list_servers",
snippet="检查 mcp-autocli 是否已注册"
)
判读返回结果中 mcp-autocli 这一项:
| 状态 | 处理 |
|---|---|
找到且 status = connected(或 isActive: true) |
→ 阶段 B:版本号检测 |
| 找到但断开 / 未连接 | 尝试一次重连:mcp_runtime(action="toggle_server", name="mcp-autocli", enabled=false) → 再 enabled=true,仍未连接 → 走安装流程 |
| 未找到 / 重连失败 | → 走安装流程 |
阶段 B:版本号检测
execute_shell(
command="python -c \"import mcp_autocli; print(mcp_autocli.__version__)\"",
snippet="检查 mcp-autocli 版本"
)
最低版本要求:从 post-pilot assets 文件名解析的版本号。比对:
| 状态 | 处理 |
|---|---|
installed >= {{VERSION_FROM_POST_PILOT_ASSETS}}(从 post-pilot assets 文件名解析) |
✅ 进入 Step 0.1 |
installed < {{VERSION_FROM_POST_PILOT_ASSETS}}(从 post-pilot assets 文件名解析) |
→ 走安装流程 |
| import 失败 | → 走安装流程 |
安装流程(自动,不询问用户)
当阶段 A 或阶段 B 判定需要安装时,不要终止本技能,直接触发 post-pilot 完成安装:
useSkill post-pilot
悟空会路由到 post-pilot skill,post-pilot 的 references/mcp-install.md 会执行完整安装:
wheel → setup → Wukong 注册 → 验证。
post-pilot 安装完成后回到 Step 0.0 重检,确认 mcp-autocli 已 connected 且版本 ≥ {{VERSION_FROM_POST_PILOT_ASSETS}}(从 post-pilot assets 文件名解析),再进入 Step 0.1。
⛔ 严禁在本技能里自己跑 pip install / mcp-autocli setup /
mcp_runtime add_server —— 那是 post-pilot 的活,混在一起会破坏职责边界。
仅当 post-pilot 自身安装也失败时,输出下方文案并终止:
🛑
mcp-autocliMCP 服务安装失败(post-pilot 安装流程出错), 请检查 Python 环境后重试。
Step 0.1:话题输入(每次必问)
你这次想找什么方向的选题?(如:AI 工具、独立开发、出海、前端、设计……)
用户回答后:
- 根据话题自动生成
topic、keywords、keywords_cn、scope、role、style - 覆盖写入配置文件(无论是否已存在,每次都重新生成)
- 直接进入 Step 0.2 网络环境询问
配置文件路径:{项目根目录}/.content-radar/my-radar.yaml。
(项目根目录 = SKILL.md 所在目录的上级,即 content-radar/ 本身。)
参照 examples/my-radar.yaml.example。
Step 0.2:网络环境询问(每次必问,决定平台过滤)
⛔ 此步骤是强制的:在话题确认后、平台选择前,必须主动询问用户当前的网络环境, 禁止跳过。网络环境直接决定 Step 0.3 平台列表展示哪些平台。
使用 ask_human 工具询问(单选:顶层 question_type: "single_select"、内层
input_type: "single_select",questions 数组正好 1 道题):
ask_human(
question_type="single_select",
task_title="网络环境确认",
questions=[{
"id": "network",
"input_type": "single_select",
"question": "你当前的网络环境能访问海外网站吗?(如 HackerNews / Twitter / Reddit / YouTube 等)",
"required": True,
"options": [
{ "label": "可以(有代理/VPN,能访问海外)", "value": "overseas_ok" },
{ "label": "不行(仅国内网络,访问不了海外)", "value": "domestic_only", "default": True }
]
}],
snippet="确认网络环境"
)
或在用户消息中已明确表态时直接识别("仅国内网络"、"能访问海外"、"有代理/VPN"), 无需再次询问。
返回值:single_select 模式工具结果直接是 value 字符串本身
("overseas_ok" 或 "domestic_only"),不是 form 模式的 JSON 包装。
overseas_ok→ Step 0.3 展示全部 14 个平台(含 HN/Lobsters/Dev.to/SO/ Arxiv/HF/Wikipedia/Twitter/YouTube/Instagram + 4 个国内平台)domestic_only→ Step 0.3 只展示 4 个国内平台(小红书/B站/抖音/微博), 禁止展示任何标注"需外网"的海外平台
Step 0.3:平台选择(form + multi_select 硬性要求)
⛔ 多选硬约束 · 必须 form + multi_select 双层组合:
- 顶层
question_type必须"form"。绝对禁止用"single_select"—— 会强制降级成单选卡片,用户只能勾一个。- 内层
input_type必须"multi_select",配options+min_selections: 1+max_selections≥ options 数。- option 的
value必须是 mcp-autocli 平台英文 key(如xiaohongshu),label给中文显示名。后续直接把answers.platforms数组传给 search 的platforms参数。
⛔ 平台展示按 Step 0.2 网络环境过滤:
network = overseas_ok→ 全部 14 个平台network = domestic_only→ 只展示 4 个国内平台;报告区块 0「本轮说明」 必须标注:"因仅国内网络,本轮跳过所有海外平台。"
overseas_ok 调用(14 个平台):
ask_human(
question_type="form",
task_title="选择采集平台",
questions=[{
"id": "platforms",
"input_type": "multi_select",
"question": "请勾选本轮要采集的平台(可多选)",
"required": True,
"min_selections": 1,
"max_selections": 14,
"options": [
{ "label": "HackerNews(需外网)", "value": "hackernews" },
{ "label": "Lobsters(需外网)", "value": "lobsters" },
{ "label": "Dev.to(需外网)", "value": "devto" },
{ "label": "StackOverflow(需外网)", "value": "stackoverflow" },
{ "label": "Arxiv(需外网,AI/论文相关)", "value": "arxiv" },
{ "label": "HuggingFace(需外网,AI/模型)", "value": "hf" },
{ "label": "Wikipedia(需外网)", "value": "wikipedia" },
{ "label": "小红书(需登录)", "value": "xiaohongshu" },
{ "label": "B站(需登录)", "value": "bilibili" },
{ "label": "抖音(需登录)", "value": "douyin" },
{ "label": "微博搜索(需登录)", "value": "weibo" },
{ "label": "Twitter/X(需登录 + 需外网)", "value": "twitter" },
{ "label": "YouTube(需登录 + 需外网)", "value": "youtube" },
{ "label": "Instagram(需登录 + 需外网)", "value": "instagram" }
]
}],
snippet="勾选采集平台"
)
domestic_only 调用(仅 4 个国内平台):
ask_human(
question_type="form",
task_title="选择采集平台(仅国内网络)",
questions=[{
"id": "platforms",
"input_type": "multi_select",
"question": "请勾选本轮要采集的平台(可多选)",
"required": True,
"min_selections": 1,
"max_selections": 4,
"options": [
{ "label": "小红书(需登录)", "value": "xiaohongshu" },
{ "label": "B站(需登录)", "value": "bilibili" },
{ "label": "抖音(需登录)", "value": "douyin" },
{ "label": "微博搜索(需登录)", "value": "weibo" }
]
}],
snippet="勾选采集平台"
)
返回值解析:先校验 user_action == "submit",再读 answers.platforms 数组。
未选的平台跳过;未 submit 按未答处理,不要假设 default。
Step 0.4:登录预检(launch_login 打开窗口 → ask_human 让用户多选确认)
⛔ 此步骤是强制的:用户在 Step 0.3 勾选了任何需登录平台(xiaohongshu / bilibili / douyin / weibo / twitter / youtube / instagram)时,必须完成下面两步。
⚠️ 为什么是用户确认而非自动探测:mcp-autocli 0.1.8 起已移除自动登录探测 工具 —— 早期版本对小红书 / 抖音 / B 站误判率过高(合法 JSON 中含
login子串 的 URL 会被错判为未登录)。登录确认彻底交给用户,更可靠。
步骤 1:打开 Edge 登录窗口
mcp_runtime(
action="call_tool",
server_id="mcp-autocli",
tool_name="launch_login",
arguments={
"platforms": ["<Step 0.3 勾选的所有需登平台>"]
},
snippet="打开 Edge 登录窗口"
)
返回结构关键字段:
{
"ok": true,
"edge_pid": 12345,
"opened_pages": [{"platform": "xiaohongshu", "url": "..."}],
"user_instruction": "已为你打开 ... 的登录页(AutoCLI 专用 Edge 窗口...)",
"error": null
}
把 user_instruction 原样转发给用户。
⚠️ launch_login 是异步:调用立刻返回,不会阻塞等用户登录。是否真的已登录
完全靠下面 ask_human 让用户自己说。
步骤 2:ask_human 让用户多选确认
⛔ 必须 form + multi_select 组合(同 Step 0.3 硬约束)。option 的
value必须用 mcp-autocli 平台英文 key(xiaohongshu / bilibili / ...),answers.logged_in_platforms数组直接转给 Step 1 的 searchplatforms参数。
ask_human(
question_type="form",
task_title="确认登录状态",
questions=[{
"id": "logged_in_platforms",
"input_type": "multi_select",
"question": "你已经在 Edge 窗口里登录哪几个平台?请勾选(未勾选的本轮跳过采集)",
"required": True,
"min_selections": 0,
"max_selections": <Step 0.3 勾选的需登平台数量>,
"options": [
// 对 Step 0.3 勾的每个需登平台生成一条 option,未勾的平台不要出现在这
{ "label": "小红书", "value": "xiaohongshu" },
{ "label": "B站", "value": "bilibili" },
{ "label": "抖音", "value": "douyin" },
{ "label": "微博", "value": "weibo" },
{ "label": "Twitter", "value": "twitter" },
{ "label": "YouTube", "value": "youtube" },
{ "label": "Instagram", "value": "instagram" }
]
}],
snippet="确认已登录平台"
)
处理返回
校验 user_action == "submit" 后读 answers.logged_in_platforms:
| 情况 | 处理 |
|---|---|
| 勾选的需登平台 | 加入 Step 1 search 的 platforms 参数采集 |
| 未勾选的需登平台 | 区块 0「本轮说明」标 "用户标记本轮未登录,{平台名} 跳过";不调 search |
| 公共平台(hackernews 等) | 不受影响,照常进入 Step 1 |
launch_login 返回 error 含 "Edge not installed" |
转发错误(一般要求装 Edge / 重跑 mcp-autocli setup)→ 本技能终止 |
launch_login 返回其它 error |
转发错误,但仍允许用户在已有 Edge 里手动登录后回答 ask_human |
⚠️ 采集阶段不再询问登录 —— 所有登录问题在 Step 0.4 一次性解决。
Step 1 如果 search 仍返回 login_required,标"登录态失效,本轮跳过",
不再二次 launch_login。
Step 1:全平台采集(一次 search 调用)
按用户在 Step 0.3 的勾选 + 当前配置的关键词,调用 mcp-autocli 的 search:
mcp_runtime(
action="call_tool",
server_id="mcp-autocli",
tool_name="search",
arguments={
"keyword": "<topic 或 keywords_cn[0]>",
"platforms": ["<本轮勾选的平台数组>"],
"limit_per_platform": 20
},
snippet="一次调用采集所有勾选平台"
)
返回结构:
{
"items": [
{ "platform": "hackernews", "title": "...", "url": "...", "score": 1024, "comments": 230, "author": "..." },
{ "platform": "xiaohongshu", "title": "...", "url": "...", "likes": "5.2万", "author": "..." }
],
"metadata": {
"platforms_searched": ["hackernews", "xiaohongshu"],
"platforms_skipped": [{ "platform": "twitter", "reason": "login_required" }],
"elapsed_seconds": 12.3
}
}
中英文关键词策略
| 平台分类 | 关键词来源 |
|---|---|
| 国内平台(xiaohongshu/bilibili/douyin/weibo) | 中文,取 keywords_cn[0](或回退到 topic) |
| 海外平台(hackernews/lobsters/devto/stackoverflow/arxiv/hf/wikipedia/twitter/youtube) | 英文,取 keywords[0](或回退到 topic 的英文译写) |
如果配置同时给了中英文且勾选了两类平台 → 分两次调 search:
- 第一次:
platforms = [所有国内平台],keyword = keywords_cn[0] - 第二次:
platforms = [所有海外平台],keyword = keywords[0]
最后把两次返回的 items 合并即可。如果用户只配了一种语言或只勾了一类平台,单次调用足矣。
热榜补充(仅当勾选了支持 hot 的平台时)
hot 工具拉的是平台"现在最火"的内容,不依赖关键词。适合在用户话题比较宽泛、
或希望加一个"当前流量风口"维度时跑一遍。
支持 hot 工具的平台:
| 平台 | 调用 |
|---|---|
| bilibili | hot(platform="bilibili", limit=20) 或 variant="ranking" |
hot(platform="weibo", limit=20) |
|
hot(platform="twitter", limit=20) |
mcp_runtime(
action="call_tool",
server_id="mcp-autocli",
tool_name="hot",
arguments={"platform": "<平台 key>", "limit": 20},
snippet="拉热榜补充候选"
)
Instagram 没有 hot 工具,用 platform_action 的 explore 替代:
mcp_runtime(
action="call_tool",
server_id="mcp-autocli",
tool_name="platform_action",
arguments={
"platform": "instagram",
"action": "explore",
"options": {"limit": 20}
},
snippet="拉 Instagram Explore 补充候选"
)
返回与 search 一致的 items 数组。把这些热榜/Explore 条目合并进 Step 1 的 items 池, 并在 Step 2a 排序时一视同仁参与互动数据排序。在区块 3「数据来源汇总」单独列一行 标"{{平台}} 热榜/Explore X 条",便于用户知道这部分来自热榜而非关键词搜索。
未勾选任何支持 hot/explore 的平台时,跳过本步。
硬约束
- 主采集必须用
mcp-autocli.search,platforms参数必须包含用户在 Step 0.3 勾选的全部平台。web_search仅作兜底:当某平台出现在metadata.platforms_skipped且重试失败时使用,报告中必须标 🟡 二手。- 采集失败 / 平台跳过 → 在区块 0/3 如实标注,禁止用模型自身知识凑数。
失败处理
| 现象 | 处理 |
|---|---|
整个 search 调用超时 / 报错 |
重试 1 次(同 keyword + 同 platforms)→ 仍失败则按"全部平台本轮无数据"记录,跳到 Step 2 用兜底(如果有的话) |
metadata.platforms_skipped 含某平台,reason = login_required |
Step 0.4 已经处理过;这里直接标"登录态失效,本轮跳过",不再重复 launch_login |
metadata.platforms_skipped 含某平台,reason = autocli_error |
重试一次仅传该平台 → 仍失败则降级用 web_search 兜底(标 🟡) |
items 数组为空但 metadata 显示已搜 |
标"{{平台}} 本轮无搜索结果",继续下一阶段 |
| 连续 3 个平台 skipped | 暂停,ask_human 询问用户是否继续 |
Step 2:排序、痛点、补充信号
2a. 按互动数据排序 + 平台权重
- 排序字段:参见
references/platform-mapping.md→ 「排序字段表」 - 数值解析:互动量字符串按解析规则转数值(K/千→×1k,M/万→×1w,B/亿→×1e8)
- 应用平台权重:
最终分数 = 原始排序分数 × 平台权重(默认 1.0,来自 my-radar.yaml) - 取 Top 10:各平台排序后取前 10 进入后续分析
2b. 需求强度推断(含评论挖掘)
先从 search 返回字段做粗筛:
| 维度 | 来源字段 |
|---|---|
| 受众数量 | views / plays / score |
| 互动密度 | likes / comments / reposts / reactions |
| 提问情绪 | 标题中是否含"怎么 / 求 / 怎么办 / how to / vs / 推荐" |
| 负面吐槽 | 标题中是否含"踩坑 / 翻车 / 不要买 / 失败 / 难用" |
然后,对 Top 10 中属于 post_detail 支持平台的条目调 post_detail
拉评论原文(不支持的平台直接跳过)。
支持 post_detail 的平台:xiaohongshu / youtube / twitter / zhihu / douban / arxiv。 其中 zhihu 返回问题 + 高赞回答,douban 返回条目元数据 + 短评,arxiv 返回论文元数据(无评论)。
mcp_runtime(
action="call_tool",
server_id="mcp-autocli",
tool_name="post_detail",
arguments={
"platform": "<xiaohongshu | youtube | twitter | zhihu | douban | arxiv>",
"url": "<Top 条目的 url>",
"comment_limit": 30
},
snippet="拉评论提炼痛点"
)
返回 detail.comments[],每条带 author / text / likes / publish_time。从评论文本
中提炼:
- 高频提问:含"怎么 / 求教 / how / why"
- 明显负面:含"踩雷 / 不推荐 / 翻车 / disappointed / waste"
- 未满足需求:用户说"希望有 / 要是能 / 求一个 X"
评论文本本身和提炼出的痛点写进区块 2 选题详情的「💡 推荐理由」段落(不需要每条 引用,1-2 句概括即可)。
⚠️ post_detail 是逐条调,N 条候选 = N 次 MCP 调用。请把调用上限定在 Top 10 候选 里前 5 条,避免 wall-clock 爆炸。 调用失败(
metadata.skip_reason非空)→ 该条退回"仅用 search 字段推断"路径, 不影响其它条目。
YouTube 视频深挖:对 Top 候选中的 YouTube 视频,可用 platform_action 获取更丰富
的元数据和文字稿,辅助判断选题价值:
# 获取视频元数据(比 search 返回更丰富:description、duration、channel 详情等)
mcp_runtime(
action="call_tool",
server_id="mcp-autocli",
tool_name="platform_action",
arguments={
"platform": "youtube",
"action": "video",
"args": ["<视频 URL>"]
},
snippet="拉 YouTube 视频元数据"
)
# 获取视频文字稿(纯文本读取,不下载视频)
mcp_runtime(
action="call_tool",
server_id="mcp-autocli",
tool_name="platform_action",
arguments={
"platform": "youtube",
"action": "transcript",
"args": ["<视频 URL>"]
},
snippet="拉 YouTube 视频文字稿"
)
文字稿可用于判断视频实际讲了什么、是否有信息差,写进「💡 推荐理由」。 调用上限同 post_detail:Top 10 里前 5 条。
「需求证据」直接引用 search / hot 命中的高互动条目本身(标 🟢 一手)。
某平台 search 失败时,允许用一次 web_search 兜底该话题,所得引用标 🟡 二手。
2c. RSS 采集(如配置了 rss_feeds,可选)
用 agent 内置 read_url 工具抓 XML 文本,模型自己解析 <item> / <entry> 节点:
read_url(
url="<rss_feeds[i]>",
snippet="抓取 RSS 源 XML"
)
解析每条 RSS item,提取 title / link / pubDate,取前 10 条。
RSS 条目标 🟡 二手,仅作补充参考,不参与主排序评分。
如 read_url 因登录墙 / 超时失败 → 跳过该 RSS 源并在区块 0「本轮说明」如实标注。
2d. follow_list(关注列表)
如果 my-radar.yaml 里配了 follow_list,按平台分别调对应工具。
两类:指定用户列表用 user_timeline,自己关注圈整体用 following_feed。
| 配置形态 | 适用工具 | 支持平台 |
|---|---|---|
follow_list.<platform>: [user_id, ...] |
user_timeline 逐 user_id 调一次 |
bilibili / xiaohongshu / douyin |
follow_list.<platform>: [username, ...] |
platform_action(instagram, user) 逐 username 调一次 |
|
follow_list.<platform>: "self"(特殊值) |
following_feed(无 user_id) |
bilibili / twitter |
user_timeline 调用(bilibili / xiaohongshu / douyin):
mcp_runtime(
action="call_tool",
server_id="mcp-autocli",
tool_name="user_timeline",
arguments={
"platform": "bilibili", # 或 xiaohongshu / douyin
"user_id": "<UID 或 profile_id 或 sec_uid>",
"limit": 10
},
snippet="拉指定 UP 主最新视频"
)
Instagram 关注用户调用(Instagram 无 user_timeline 工具,用 platform_action 替代):
mcp_runtime(
action="call_tool",
server_id="mcp-autocli",
tool_name="platform_action",
arguments={
"platform": "instagram",
"action": "user",
"args": ["<username>"],
"options": {"limit": 10}
},
snippet="拉指定 Instagram 用户最新帖子"
)
following_feed 调用(bilibili / twitter):
mcp_runtime(
action="call_tool",
server_id="mcp-autocli",
tool_name="following_feed",
arguments={
"platform": "bilibili", # 或 twitter
"limit": 20
},
snippet="拉自己关注圈时间线"
)
返回结构与 search 一致(items 列表 + metadata.skip_reason)。把这些条目合并进 Step 1 的 items 池,参与 Step 2a 排序时与 search 命中条目一视同仁。
未支持的平台(weibo / youtube 的指定用户场景,以及 xhs/douyin/instagram 的关注圈 场景)配了也跳过,区块 0 加一行:"follow_list.{平台} 暂不支持,已跳过。"
关注列表数据标 🟢 一手,作为补充信号进入主排序池。
2e. 账号自审与需求信号(可选,提升选题精准度)
当用户勾选了支持账号工具的平台时,可额外调取自己的账号数据作为选题参考信号。 这些数据不进入主排序池,而是作为 Step 3 评分时的辅助维度("我的受众关心什么")。
account_dashboard — 账号概览(支持平台:xiaohongshu / bilibili / twitter):
mcp_runtime(
action="call_tool",
server_id="mcp-autocli",
tool_name="account_dashboard",
arguments={"platform": "xiaohongshu"}, # 或 bilibili / twitter
snippet="拉账号概览(创作者数据 / 收藏 / 历史)"
)
返回内容因平台而异:
- xiaohongshu:creator-profile + 7 日数据统计 + 最近 5 篇笔记摘要
- bilibili:个人信息 + 收藏夹(20) + 浏览历史(20)
- twitter:profile + bookmarks(20)
用途:识别自己近期哪类内容表现好、收藏/书签了什么待写素材。
account_notifications — 通知收件箱(支持平台:xiaohongshu / douyin / twitter):
mcp_runtime(
action="call_tool",
server_id="mcp-autocli",
tool_name="account_notifications",
arguments={
"platform": "xiaohongshu", # 或 douyin / twitter
"limit": 20
},
snippet="拉通知(@提及 / 评论 / 新粉丝)"
)
用途:通知中的提问、@提及是高信号需求——有人主动找你要内容,说明需求真实存在。 将高频提问话题提取出来,作为 Step 3 评分的加分项。
Instagram 收藏/已保存内容(Instagram 无 account_dashboard,用 platform_action 替代):
mcp_runtime(
action="call_tool",
server_id="mcp-autocli",
tool_name="platform_action",
arguments={
"platform": "instagram",
"action": "saved",
"options": {"limit": 20}
},
snippet="拉 Instagram 已保存帖子"
)
用途:已保存的帖子通常是用户认为有价值但还没来得及消化的素材,可作为选题灵感。
⚠️ 账号工具调用上限:每个平台最多调 1 次 dashboard + 1 次 notifications。 调用失败(skip_reason 非空)→ 跳过,不影响主流程。
2f. KOL 画像(可选,辅助竞品分析)
对 Top 候选中出现的高频作者,可调 platform_action 获取其公开画像,辅助判断
"这个话题的头部玩家是谁、他们怎么做的"。
Twitter 创作者画像:
mcp_runtime(
action="call_tool",
server_id="mcp-autocli",
tool_name="platform_action",
arguments={
"platform": "twitter",
"action": "profile",
"args": ["<username>"]
},
snippet="拉 Twitter 用户画像"
)
Instagram 创作者画像:
mcp_runtime(
action="call_tool",
server_id="mcp-autocli",
tool_name="platform_action",
arguments={
"platform": "instagram",
"action": "profile",
"args": ["<username>"]
},
snippet="拉 Instagram 用户画像"
)
返回粉丝数、bio、近期帖子等公开信息。将这些写入区块 2 选题详情的「📚 参考材料」 段落,帮助用户了解同一话题下的头部创作者和他们的内容风格。
⚠️ 调用上限:Top 10 候选里前 3 位高频作者,每位最多查 1 个平台。 不支持的平台直接跳过。
Step 3:交叉比对、评分与输出报告
交叉比对
保留同时满足以下条件的候选:
- 供给侧 有新信息 / 新实践 / 新玩法
- 需求侧 有明确受众兴趣 / 互动 / 提问(优先用 Step 2a 排序后的高互动内容作为证据)
- 与
topic、scope、platforms匹配
评分
使用 my-radar.yaml 的 scoring 权重(按配置动态读取,不硬编码维度)。
计算细则见 references/scoring.md。
输出报告
报告结构、5 区块、表头、信源标签、入选硬约束、保存路径全部以
references/output-template.md 为准,禁止自由发挥。
报告要点:
- 区块 0「本轮说明」的"采集引擎"字段填
mcp-autocli MCP(v0.1.7+) - 区块 4「已知限制与建议」中"重新登录"的建议用
launch_loginMCP 流程话术
保存报告(直接落盘,无需用户确认):
将报告内容直接写入 output/radar_{{topic}}_{{日期}}.md,告知用户最终路径。
资源索引
| 路径 | 说明 | 读取时机 |
|---|---|---|
references/platform-mapping.md |
mcp-autocli 平台 key ↔ 中文显示名 + 排序字段对照 + 数值解析规则 | Step 0.3 / Step 1 / Step 2 必读 |
references/output-template.md |
报告 5 区块结构契约(表头 / 信源标签 / 入选硬约束 / 保存路径) | Step 3 必读 |
references/scoring.md |
评分维度权重定义 + 计算方式 + 平台权重应用 | Step 2c / Step 3 |
examples/my-radar.yaml.example |
配置模板(topic / keywords / platforms / scoring / rss_feeds) | 首次配置 |
全局规则
- 所有链接必须有效;无法确认有效性的不允许出现在报告中
- Twitter 链接格式:
https://x.com/{用户名}/status/{推文ID} - 需求证据和参考材料每条必须
[可点击标题](完整URL)格式 - 参考材料优先原始来源页,不要放聚合页
数据真实性硬约束:
- 禁止编造补位:mcp-autocli
search失败 → 严禁用模型自身知识生成候选。空返平台直接标记"该平台本轮无数据" - 信源标签强制:每个候选必须标 🟢 / 🟡,未标注的禁止写入最终报告
- 🟢 一手:来自
mcp-autocli.search命中的条目 - 🟡 二手:来自
web_search兜底 / RSS 订阅源
- 🟢 一手:来自
异常处理速查
| 现象 | 处理 |
|---|---|
Step 0.0 list_servers 返回中没有 mcp-autocli |
自动 useSkill post-pilot 完成安装,重检通过后继续;post-pilot 也失败则终止 |
list_servers 中 mcp-autocli 状态非 connected |
toggle_server off→on 重连一次;仍非 connected → useSkill post-pilot 安装 |
launch_login 返回 error 含 "Edge not installed" |
转发错误提示(要求装 Edge / 重跑 mcp-autocli setup),本技能终止 |
launch_login 返回 ok=false 其它原因 |
转发错误;告知用户也可在已开的 Edge 里手动打开登录页,然后照常回答 Step 0.4 的 ask_human |
| Step 0.4 ask_human 用户未勾任何平台 | 区块 0 标"用户本轮未确认任何登录平台";如还有公共平台则继续,否则本技能终止 |
search 返回 autocli_error |
单平台重试一次;仍失败 → web_search 兜底(🟡)+ 区块 0 标注 |
search metadata.platforms_skipped 含某平台,reason=login_required |
标"登录态失效,本轮跳过";不再 launch_login(已在 Step 0.4 处理过) |
| 整轮一个候选都没凑够(Step 3 入选规则要求 5-8 个) | 区块 0 标"本轮数据不足",区块 1 只列出实际入选的;不要硬凑 |
read_url 抓 RSS 失败 |
跳过该 RSS,区块 0 标注 " 抓取失败" |
状态
唯一持久文件是 .content-radar/my-radar.yaml(每次 Step 0.1 覆盖写入);
不维护其他会话级状态文件,已完成/待采集平台通过对话上下文跟踪。