ai-radar — AI 行业情报研报生成器
把分散在几十个英文源里的 AI 动态,聚合成一份结论先行、2 分钟读完的中文研报。你(宿主 agent)本身就是 LLM——所以摘要、分类、评分、深度解读全部由你直接完成,不需要任何 API key。
核心理念
- 抓取靠脚本,思考靠你:确定性的拉取/解析交给
scripts/fetch.py(自包含、零依赖),需要判断力的加工(中文摘要、重要度、视角解读)由你做。 - 结论先行:读者要的是「这事对我意味着什么 + 我该做什么」,不是事件的逐字复述。正文极简,深度全文沉底到附录。
- 双模式:能连到用户自己运行的「AI 情报站」就直接拉它已生成的报告(与其网站同源、最快);连不到就本地现抓现做。
第一步:判断运行模式
检查环境变量 AI_RADAR_API(如 https://songshishuang.github.io/ai-radar 的后端,或 http://localhost:8000):
- 设了 → 连接模式(优先):直接复用用户实例已生成的报告,省时且与其网站字节级同源。见下方「连接模式」。
- 没设 → 独立模式:用内置脚本现场抓取 + 你来加工生成。见下方「独立模式」。
用户也可显式指定:「用独立模式」「不要连后端」→ 直接走独立模式。
参数
从用户话语里解析(都有合理默认,不必追问):
| 参数 | 取值 | 默认 | 说明 |
|---|---|---|---|
range |
daily / weekly / monthly | daily | 对应时间窗 36h / 7d / 30d |
lens |
pm / engineer / investor / researcher | pm | 研报视角,详见 references/lenses.md |
categories |
vendor,paradigm,community,media,social 子集 | 全部 | 来源大类过滤 |
「AI 周报」→ range=weekly;「从工程师视角」→ lens=engineer;「只看大厂和开源」→ categories=vendor,community。
连接模式(AI_RADAR_API 已设)
- 算出目标 period:daily→今天
YYYY-MM-DD、weekly→YYYY-Www(ISO 周)、monthly→YYYY-MM。 GET {AI_RADAR_API}/api/reports/{type}/{period}:- 命中:拿到已生成报告的
markdown字段,直接呈现给用户(它已是金字塔结构)。若拿不到精确 period,改用GET {AI_RADAR_API}/api/reports?type={type}&limit=1取最新一份。 - lens ≠ pm:实例报告是 PM 视角。改为
GET {AI_RADAR_API}/api/items?min_score=6&limit=60取已加工条目,按references/lenses.md的目标视角重新综合成研报(数据同源、视角不同)。
- 命中:拿到已生成报告的
- 连接失败(超时 / 4xx / 5xx)→ 自动降级到独立模式,并在报告开头注明「实例未连通,已现场抓取」。
独立模式(现抓现做)
1. 抓取(脚本)
python ai-radar/scripts/fetch.py --since 36h # daily
python ai-radar/scripts/fetch.py --since 7d # weekly
python ai-radar/scripts/fetch.py --since 30d # monthly
# 可选:--categories vendor,community --sources 自定义 sources.json
脚本裸 Python 3.8+ 即可跑(标准库优先;装了 feedparser/httpx 会自动用更鲁棒的路径)。它输出一段 JSON:
{
"items": [{"title","url","source","category","published_at","summary_raw","extra"}],
"dynamic_sources": [{"name","query"}],
"failed_sources": ["name: reason"],
"stats": {"fetched","sources_ok","sources_failed","window_hours"}
}
输出可能很大(一天 100+ 条、近百 KB)。直接读 stdout 容易被截断,建议先落盘再解析:
python ai-radar/scripts/fetch.py --since 36h > /tmp/radar.json,再读/tmp/radar.json。
2. 补抓动态源(你的工具)
对 dynamic_sources 里的每一项(X 核心人物组、MCP Marketplace 等无 RSS 的源),用 WebSearch 按其 query 搜最近动态,挑出真有信息量的 1-3 条,补进条目池。这是日报的固定输入、不是可选项 ⚠️——X 上核心人物(如 Anthropic 的 Cat Wu @_catwu / Dario Amodei、OpenAI 的 Sam Altman 等)的产品观点与行业表态,是 ai-radar 区别于纯 RSS 聚合的独特信号,最容易因「嫌麻烦」被跳过,务必每期都补。某人/某组本期无重要动态就如实跳过、并在尾注标「本期 X 无重要动态」——绝不编造、也不假装搜过。
补抓方法(提升覆盖):X 人物分人单搜——每位用「
<人名> <@handle> site:x.com近一周动态/观点」单独搜一次,不要一次按整组搜(实测组搜覆盖率低、12 人只命中 3);优先盯最活跃的 Altman / Dario Amodei / Karpathy / Hassabis。WebSearch 对 X 原文覆盖有限是已知局限(X 封锁了免费抓取生态,官方 API $200+/月、nitter 实例多已挂),搜到就报、搜不到如实标,不强求 12 人全覆盖。
信源置信度护栏:WebSearch 回来的常混杂权威源(官方、知名作者)与二手聚合站(不知名 AI 资讯站、加密媒体转载)。仅见于二手聚合站、无法回溯到一手来源的内容,至多进「值得关注」并标注「来源存疑」,不得进必读、不得作为深度分析依据。重要度宁可压低也不要被未经证实的传闻拔高——一条假必读比漏一条真新闻伤害更大。
3. 加工(你来做,逐条)
对每条 items,生成:
summary_zh:80-150 字中文摘要,只讲发生了什么 + 为何重要,不堆砌。category:8 类之一 ——model-release(模型发布) /dev-tooling(产研工具) /agent-infra(Agent基建) /research(前沿研究) /opensource(开源生态) /product-launch(产品动态) /business(商业资本) /policy-safety(政策安全)。按内容实质判断,别套用来源大类。entities:涉及的公司/产品/模型规范名(如OpenAI、Claude、DeepSeek-R1),最多 5 个。importance1-10:行业级大事 8-10;从业者该关注 5-7;常规 1-4。按 lens 调权重(见references/lenses.md)。
去重:同一事件多源报道合并为一条,保留全部来源链接。
4. 生成研报(金字塔结构)
严格按 references/report-format.md 的模板产出,并套用 references/lenses.md 里选定视角的解读重点。核心结构:
☕ 阅读预算一行
## ⚡ 今日速览 —— 3 句话讲完今天
## 🔥 今日必读 —— ≥8 分 Top3-5,每条 3 行(标题 / ⚡so-what 结论 / 👉首要行动)
## 📌 值得关注 —— 6-7 分,每条 1 行
---
尾注:收录 N 条 · 其余见来源
## 📚 附录·深度解读 —— 必读条目的六段全文,沉底,想深入再看
5. 合规审核(输出前必做)
日报要上公网站 + 推送内部 IM、给同事看——呈现 / 落盘 / 分发之前必须过一轮合规审核(清单见 references/compliance.md)。重点核:① 政治 / 地缘表述中立(中美竞争 / 出口管制 / 监管 / 制裁类只客观陈述事实、不带立场、不渲染对立——AI 情报里最高频)② 不传未证实信息 ③ 导向正面、不渲染威胁论 / 失业恐慌 ④ 企业负面用「事实 + 来源」非主观贬低 ⑤ 人物动态只用公开信息。命中条目改写中立化或降级 / 移除——合规优先于完整,宁可少一条不留风险。通过后可在尾注标「· 已过合规审核」。
6. 输出
- 在对话里完整呈现研报。
- 默认落盘:
./ai-radar-reports/{range}-{period}.md(便于用户归档/喂给其它工具)。 落盘统一用 shell 写文件(cat > 文件 <<'EOF' … EOF或等价方式),不要依赖Write工具——在子代理/受限场景下Write可能被拦截,shell 写文件则到处都能用。 - 分发到京ME(可选):用户要把日报推到京ME 时,按
references/jdme-card.md的卡片格式(标题 / 红色主题 / 正文每条挂超链接 / 「看完整日报」按钮 / 精简扫读版)压成params.json,调jdme-pushskill 发送(它管凭证 / 内网 / 预览确认 / 回报终态)。收件人由用户当场指定,绝不脑补;其它 IM(企微 / 飞书 / 钉钉)同理类推。
降级与诚实
- 单源抓取失败由脚本隔离(
failed_sources),不影响整体;在研报尾注如实标注失败/降级源数量。 - 信息不足(如周末资讯少)就如实说「本期信息较少」,不要为凑数拔高重要度。
- 时间敏感:published_at 缺失的条目保留但不假设其新鲜度。
- 全源失败兜底:若
fetch.py返回空 items 且动态源也抓不到,如实告知「本期未抓到新条目(数据源可能临时不可用)」,不要用旧知识编造"今天的"新闻。
边界与安全
本 skill 只读聚合公开信息,行为边界明确,便于你放心在任意项目里调用:
scripts/fetch.py只读抓取:仅对源清单发 HTTP GET,不写任何文件、不执行任意命令、不外发用户数据。- 落盘只在
./ai-radar-reports/:写报告前若同名文件已存在,先告知用户、确认再覆盖。 - 不做分发:skill 只产出研报,绝不声称已发邮件/已推送(那是自托管完整版后端的事)。
- 不盲信用户喂的未证实信息:用户口头断言的"新闻"须经 fetch/WebSearch 抓源核实,抓不到权威来源则按信源置信度护栏降级处理。
资源索引
scripts/fetch.py— 自包含抓取器(RSS/Atom + HN/HF/Reddit/GitHub Trending/GitHub Search)scripts/sources.json— 37 源清单,可增删(enabled:false禁用,method:dynamic交给你补抓);含github_stars源(GitHub AI 项目雷达:日报=近 7 天新项目,周报=近 30 天动量项目,月报=高星且近 180 天活跃的基础设施项目;GitHub API 不提供真实 star 增量,周报用「短期创建 + 当前高星」做代理)+ 3 组 X 核心人物动态源(共 12 人)+ 厂商 blog(OpenAI/Anthropic/Google×3/AWS/MS/HF/Mistral/NVIDIA 等)。国内厂商(智谱/DeepSeek/Qwen/Moonshot 等)无有效活跃官方英文 RSS,靠 HF blog(其 org 发文)+ HN + 媒体间接覆盖(GLM/DeepSeek/Qwen 动态实测均能抓到);ai-radar 定位国外源优先references/report-format.md— 金字塔研报模板与写作要点(生成前必读)references/lenses.md— 4 视角的评分权重与解读重点references/deploy.md— 连接模式接口契约 + 自托管完整版(邮件/RSS/网站)指引references/compliance.md— 内容合规审核清单(输出前必做:政治地缘中立 / 不传谣 / 导向正面 / 来源合规等)references/jdme-card.md— 日报 → 京ME 卡片推送格式(配合jdme-pushskill;其它 IM 类推)assets/sample-report.md— 一份样例输出samples/daily-sample.md— 真实产出样本(59 条 + 5 深度头条,看一眼产物长什么样)tests/test_fetch.py— 抓取器离线测试(覆盖 RSS/Atom、动态源路由、HF Spaces、GitHub 周期策略等);tests/eval-prompts.md— 工作流 eval(4 题四件套:正常日报/视角切换/对抗诱饵/合规审核)