linliu0210

source-tracker

0
0
# Install this skill:
npx skills add linliu0210/source_tracker --skill "source-tracker"

Install specific skill from multi-skill repository

# Description

信息溯源与信源信誉追踪。追溯信息源头(谁先报的、谁说的最准、原作者是谁),长期积累信源画像。Triggers on: 谁先报的, 谁最先说的, 消息来源, 信息溯源, 最早发布, 首发, 源头, 这个消息可信吗, 这是真的吗, reliable source, 谁做的这个, 原作者, original author, 信源排名, 信源画像, source reputation, 搜索渠道状态, 检查渠道, /trace, /source, /reputation, /source-doctor

# SKILL.md


name: source-tracker
description: "信息溯源与信源信誉追踪。追溯信息源头(谁先报的、谁说的最准、原作者是谁),长期积累信源画像。Triggers on: 谁先报的, 谁最先说的, 消息来源, 信息溯源, 最早发布, 首发, 源头, 这个消息可信吗, 这是真的吗, reliable source, 谁做的这个, 原作者, original author, 信源排名, 信源画像, source reputation, 搜索渠道状态, 检查渠道, /trace, /source, /reputation, /source-doctor"


Source Tracker — 信息溯源与信源信誉系统

追踪"谁说得最早"和"谁说得最准",长期积累信源画像。

Source Tracker 通过 SCOUT → GATE → HUNT → JUDGE → LEARN 五段式 Pipeline,将用户输入的一条信息自动溯源到最早/最可靠的发布源,并将结果沉淀为信源信誉数据。


触发条件

当用户的输入包含以下关键词或意图时,激活本 Skill:

溯源类

  • "谁先报的"、"谁最先说的"、"消息来源"、"信息溯源"
  • "最早发布"、"首发"、"源头"

可信度验证类

  • "这个消息可信吗"、"这是真的吗"、"reliable source"

技术归因类

  • "谁做的这个"、"原作者"、"original author"

信源查询类

  • "信源排名"、"信源画像"、"source reputation"

系统管理类

  • "搜索渠道状态"、"检查渠道"

Slash 命令

  • /trace — 执行完整溯源 Pipeline
  • /source — 查询信源画像
  • /reputation — 查询信源信誉排行榜
  • /source-doctor — 检查搜索渠道可用状态

信息分类体系

本系统将信息分为三大类:

类别 代号 溯源目标 核心问题
趋势/热点 TREND 时效性优先:找最早报道者 "谁最先嗅到了这个风向?"
事实/声明 CLAIM 可信度优先:找权威一手信源 "这是真的吗?来源可靠吗?"
技术/开发 TECH 归因优先:找原始作者/仓库 "这个技术/工具是谁做的?"

编排流程(9 步)

Step 0: 解析用户意图

接收用户提供的信息文本。如果用户使用 slash 命令(/source/reputation/source-doctor),直接跳转到对应的快捷操作(见下方"快捷操作"节)。

溯源目标解析:从用户输入中识别显式溯源目标:

用户关键词 tracing_goal 说明
"最早""首发""时间线""谁先" earliest 优先按时间排序
"可信""权威""真假""验证" most_reliable 优先按权威度排序
"谁做的""原作者""仓库""代码" original_author 优先按原创性排序
无明确指定 auto 由 GATE 按 info_type 自动对应

Step 1: SCOUT — 泛搜索

执行一次快速通用搜索,获取真实数据供 GATE 分类时参考。

操作

  1. 使用 Tavily 或 Jina Web 进行通用搜索(取决于可用性)
  2. 从搜索结果中提取元特征:
  3. observed_languages: 语言分布(如 {"zh": 7, "en": 3}
  4. observed_platforms: 出现的平台(如 ["36kr", "zhihu", "reddit"]
  5. observed_themes: 主题线索(如 ["open-source", "trending"]
  6. 将结果封装为 ScoutResult 传递给 GATE

搜索工具选择
- 优先使用 mcp_tavily_tavily_search(query=...) — 速度快、覆盖面广
- 备选使用 mcp_jina_search_web(query=...) — 适合中文内容

延迟预算:1-3 秒(SCOUT 应快速完成,不需要精确)

Step 2: GATE — 门控分类

使用 GATE System Prompt 对用户输入进行分类,基于 SCOUT 的实际数据做出判断。

操作

  1. 调用 check_channel_status() 获取当前可用渠道列表
  2. 将用户原始文本 + 可用渠道列表 + SCOUT 结果 + tracing_goal_hint 组装为 GATE prompt
  3. 发送给 LLM,获取分类结果(JSON 格式)

GATE 输出结构(V2):

{
  "info_type": "TREND | CLAIM | TECH | MIXED",
  "tracing_goal": "earliest | most_reliable | original_author | auto",
  "dominant_language": "zh | en | mixed",
  "sub_queries": [
    {
      "query": "优化后的搜索查询",
      "type": "TREND | CLAIM | TECH",
      "search_channels": ["grok_search", "twitter", "tavily"]
    }
  ],
  "reasoning": "基于 SCOUT 证据的分类理由"
}

渠道选择参考

信息类型 中文优先 英文优先 通用
TREND jina_web, weibo, tavily grok_search, twitter, tavily grok_search, twitter, weibo, jina_web, tavily
CLAIM jina_web, wechat, tavily grok_search, tavily, jina_read grok_search, tavily, wechat, jina_web, jina_read
TECH (无语言差异) (无语言差异) github, exa_search, jina_web, arxiv, tavily

MIXED 处理:如果分类结果为 MIXED,GATE 会自动拆分为多个子查询。对每个子查询独立执行 Step 3-7。

Step 3: 渠道可用性过滤

基于 Step 2 返回的 check_channel_status() 结果,过滤 GATE 选出的渠道:

  • ready → 正常使用
  • ⚙️ needs_config跳过,并在最终输出中提示用户配置
  • 📦 not_installed跳过,并在最终输出中提示用户安装
  • unavailable静默跳过

重要:如果所有渠道都不可用,回退到该类型的默认渠道中任何 ready 状态的渠道。如果仍无可用渠道,通知用户并中止。

Step 4: HUNT — 多源搜索

按过滤后的渠道列表逐个执行搜索。

渠道自动调参 (V1.2):当 use_tuned=True 时,渠道排序会使用衰减加权后的有效亲和度
(effective affinity),而非静态默认值。数据不足 5 次时自动回退为默认值。
使用 /tune-channels 查看当前调参结果。

搜索工具映射(按 channel_id → 工具调用):

渠道 ID 调用方式
grok_search mcp_grok-search_web_search(query=...)
tavily mcp_tavily_tavily_search(query=...)
jina_web mcp_jina_search_web(query=...)
jina_read mcp_jina_read_url(url=...)
exa_search MCP via mcporter: exa_search(query=...)
arxiv mcp_arxiv-mcp-server_search_papers(query=...)
google_scholar mcp_google-scholar_search_google_scholar_key_words(query=...)
twitter CLI: xreach search "query" --json
weibo Python: agent-reach weibo search
wechat Python: agent-reach wechat search
xiaohongshu MCP: xiaohongshu_search
douyin MCP: douyin_search
reddit Python: agent-reach reddit search
youtube CLI: yt-dlp --dump-json URL
bilibili CLI: yt-dlp --dump-json URL
github mcp_github-mcp-server_search_repositories(query=...) 或 CLI: gh search repos "query"
linkedin MCP: linkedin-mcp-server
rss Python: python -c "import feedparser" / feedparser.parse(url)
scrapling Skill: scrapling-fetch
github_trending Skill: github-trending-fetch
v2ex Python: agent-reach v2ex search
hackernews Skill: hackernews-fetch

收集结果:将每个渠道的搜索结果标准化为 Discovery 格式:

{
    "source_platform": "twitter",        # 渠道 ID
    "source_author": "@TechBro42",       # 作者/账号名
    "source_url": "https://...",         # 原始链接
    "published_at": "2026-03-11T14:00",  # ISO 8601 时间戳
    "time_confidence": 1.0,              # 时间可信度 0.0-1.0
    "content_snippet": "...",            # 内容摘要 (≤300 字)
    "relevance_score": 0.9               # 与查询的相关度 0.0-1.0
}

追踪渠道命中 (V1.2-preflight):在搜索过程中同时记录每个渠道的命中情况:

channels_used = []
for channel in selected_channels:
    results = search(channel, query)
    channels_used.append({
        "channel_id": channel.channel_id,
        "hit": len(results) > 0,          # 是否返回了相关结果
        "result_count": len(results)       # 返回结果数量
    })

此数据将在 LEARN 阶段传给 report_discovery,用于后续渠道性能分析。

时间可信度参考

  • 1.0 = API 返回精确时间
  • 0.7 = 页面显示 "3小时前"
  • 0.5 = 只有日期
  • 0.2 = 推断的(如 "近日")
  • 0.0 = 无时间信息

Step 5: JUDGE — 评判排序

将所有 Discovery 提交给 JUDGE System Prompt,由 LLM 执行。JUDGE 接收 tracing_goal 参数以切换评分策略:

  1. 事件聚类:判断哪些结果说的是同一件事,标记不相关的为 irrelevant
  2. 按 tracing_goal 评分
  3. earliest (或 TREND 默认): score = (1/rank_by_time) × time_confidence × relevance
  4. most_reliable (或 CLAIM 默认): score = authority_tier × relevance × time_recency_bonus
    • 权威等级:T1(1.0) > T2(0.8) > T3(0.6) > T4(0.4) > T5(0.2)
  5. original_author (或 TECH 默认): score = originality × relevance
  6. 选出 Winner + Runners-up,给出判断理由

平局打破规则

  • 同分同时发布 → 按 time_confidence 更高者胜出
  • TREND 同小时内 → 按权威度打破
  • CLAIM 同权威等级 → 按发布时间更早者胜出
  • TECH 同原创性 → 更详细的内容胜出

信息不足时:标记为 is_inconclusive = true,仍选出最佳候选但注明置信度不足。

Step 6: LEARN — 沉淀学习

调用 Source Tracker MCP Server 将结果写入数据库:

report_discovery(
    query = "用户原始查询",
    info_type = "TREND",
    winner = {
        "source_platform": "twitter",
        "source_author": "@TechBro42",
        "source_url": "https://...",
        "published_at": "2026-03-11T14:00",
        "content_snippet": "..."
    },
    runners_up = [...],
    reasoning = "JUDGE 的判断理由",
    tracing_goal = "earliest",
    dominant_language = "zh",
    channels_used = [                           # V1.2-preflight
        {"channel_id": "grok_search", "hit": true, "result_count": 3},
        {"channel_id": "tavily", "hit": true, "result_count": 5},
        {"channel_id": "twitter", "hit": false, "result_count": 0}
    ]
)

系统会自动:

  • 创建/更新信源画像 (SourceProfile)
  • 记录溯源发现 (Discovery)
  • 更新命中计数 (total_hits + 类型命中)
  • 重算指数衰减信誉分

Step 7: 展示结果

向用户展示格式化的溯源结果:

🏆 最佳信源:@TechBro42 (Twitter/X)
   首发时间:2026-03-11 14:00 (UTC+8)
   内容摘要:[snippet]
   信源类型:趋势首发型

ℹ️ 信源画像:该账号此前已有 3 次趋势首发记录,平均领先第二名 2.5 小时。

如果有渠道因不可用而被跳过,在结果末尾附加提示:

💡 提示:以下渠道未参与本次搜索:
   • twitter — 需要配置 Cookie → 运行 `agent-reach configure twitter-cookies`
   • exa_search — 需要安装 → `mcporter install exa`

快捷操作

/source — 查询信源画像

直接调用 get_source_profile(source_id)query_reputation(platform, author_name) 展示信源画像。

/reputation — 信源排行榜

调用 list_sources(top_n=10) 展示信源信誉排行榜。支持可选过滤参数:

  • info_type: 按信息类型过滤 (TREND/CLAIM/TECH)
  • platform: 按平台过滤
  • sort_by: 排序字段 (reputation_score, total_hits, ...)

/source-doctor — 搜索渠道诊断

调用 check_channel_status() 并展示格式化的渠道状态报告。

/trace — 完整溯源

等同于执行完整的 7 步编排流程。

/channel-performance — 渠道性能分析

调用 get_channel_performance() 展示各搜索渠道的历史命中率统计。支持可选参数:

  • info_type: 按信息类型过滤 (TREND/CLAIM/TECH)

/tune-channels — 渠道自动调参

调用 get_tuned_affinities() 展示各渠道的有效亲和度 vs 默认亲和度。使用 ↑↓= 箭头标示渠道被提升或降权。支持可选参数:

  • info_type: 按信息类型过滤 (TREND/CLAIM/TECH)

MCP Server 工具清单

本 Skill 通过以下 Source Tracker MCP 工具与数据库交互:

工具 用途 使用阶段
report_discovery 记录溯源结果 LEARN (Step 6)
query_reputation 查询信源信誉 快捷查询
list_sources 信源排行榜 快捷查询
get_source_profile 信源完整画像 快捷查询 / Step 7
correct_judgment 纠正错误判断 (new_info_type for wrong_type) 用户反馈
register_channel 注册新渠道 管理操作
get_channel_registry 查看渠道注册表 管理操作
check_channel_status 检测渠道状态 Step 2-3 / 诊断
get_channel_performance 渠道命中率统计 快捷查询 (V1.2-preflight)
get_tuned_affinities 渠道自动调参结果 快捷查询 (V1.2)
get_source_relations 信源共现关系 快捷查询 (V1.2-preflight)

MCP Resources

资源 URI 内容
source://leaderboard 信源信誉排行榜 (Top 20, Markdown)
source://daily-digest 最近 24h 溯源汇总 (按类型分组)

错误处理

  • 搜索渠道全部不可用:通知用户配置至少一个搜索渠道后重试
  • 搜索结果为空:告知用户未找到相关信息,建议扩大搜索范围或使用其他渠道
  • JUDGE 结果 inconclusive:展示最佳候选但明确标注置信度不足,建议用户补充更多信源
  • 用户纠正判断:指导用户使用 correct_judgment 工具修正错误的溯源结果

安装配置

1. 安装 Source Tracker MCP Server

pip install source-tracker   # 或 uvx source-tracker

2. 配置 MCP Client

将以下配置添加到 Agent 的 MCP 设置中:

{
  "source-tracker": {
    "command": "source-tracker",
    "args": ["serve"]
  }
}

3. 安装 Skill

ln -s /path/to/source-tracker/skill ~/.agent/skills/source-tracker

4. 检查渠道状态

首次使用时,告诉你的 Agent:

帮我检查 Source Tracker 的搜索渠道状态

Agent 会自动调用 check_channel_status() 并显示哪些渠道可用。

# Supported AI Coding Agents

This skill is compatible with the SKILL.md standard and works with all major AI coding agents:

Learn more about the SKILL.md standard and how to use these skills with your preferred AI coding agent.