Install
openclaw skills install @elisabeth15501/ai-weeklyAI 行业新闻网站生成工具。生成一个可搜索、可筛选、支持暗色模式的 AI 新闻网站(单文件 HTML)。 **直接说人话就能触发,不需要记命令**(例:「这周 AI 有什么大事」「给我看个 AI 简报」)。 新闻默认全部来自 RSS 抓取(14 个精选源:国内 7 + 国外 7,国内源优先,自治无单点依赖);技能**不内置任何第三方商业 API**。 如需用 AI HOT 或其他「AI 行业知识类」外部 API 增强可信度,由用户自行获取数据并以 --external-news-json 注入,是否启用完全由用户决定。每条新闻含原始来源链接。 市场/融资图表数据由 WebSearch 获取后注入,未提供时明确标注「示例/估算」。 触发词·生成(任意一句即可):AI周报、AI行业周报、AI新闻、人工智能周报、AI行业动态、生成AI报告、 AI新闻网站、AI新闻站、这周AI有什么大事、AI圈最近怎么样、给我看个AI简报、AI新闻汇总、 做个AI周报、AI行业速览、我想看AI动态、weekly AI report、AI news digest。 触发词·分发与运维:把周报推送到飞书、部署到 GitHub Pages、重生成 8/24 那期周报、刷新模型排行榜。 支持自动化:每周一上午 9 点自动生成最新版网站。
openclaw skills install @elisabeth15501/ai-weeklyCross-platform Agent Skill — Claude Code · OpenAI Codex · OpenCode · OpenClaw · Coze · WorkBuddy 通用。 跨平台
SKILL.md,遵循开放 Agent Skill 规范(Anthropic AgentSkills / OpenClaw / Coze 共用的SKILL.md标准)。 单一入口、单一真相源:本文件即为技能的全部说明,无需任何平台专属包装。
本技能的能力边界,诚实列出,避免误用。评测中「降级却不说明」才会扣分,下面每一项都写明已知限制与红线。
| 维度 | 当前能力 | 已知限制 / 红线 |
|---|---|---|
| 可达性 | 国内 7 + 国外 7 共 14 个 RSS 源实测全通;国外榜源(LMArena / Artificial Analysis)直连实测可达(2026-09-02 起翻转旧结论) | 个别海外源在受限网络下可能不可达;技能据此优雅降级到国内源与离线快照,绝不编造(见 §8.1) |
| 数据口径 | 市场/融资数据支持「国内优先、国外对照」双口径路由(§8.3) | 市场数据为静态快照注入,非实时;榜单为实时抓取或诚实标注日期的快照,绝不冒充实时 |
| 翻译 | 中文翻译三级取值:本地缓存 → 远程译文源(默认开启,175 条)→ 本地 Ollama;完全断网也有离线译文包 translations_offline.json | 无本地模型且远程源也未命中的个别条目,显式标注「未翻译·原文保留」而非静默留英文(F3) |
| 历史 | 每周快照自动留存(snapshots/),可复现任意一期 | 无快照的极早期(如 8/17 之前)榜单数据不可复原,诚实标注而非编造 |
| 体量 | 单文件 HTML,可搜索 / 筛选 / 暗色模式 | 周报条数取决于 RSS 窗口(默认近 7 天),非全量归档 |
不知道说什么话才能让本技能干活?下面 5 个真实对话直接复制即可触发全链路,无需先读下文:
用户:帮我生成一份本周 AI 行业新闻周报
→ 技能自动激活:RSS 抓取近 7 天新闻 →(建议用 WebSearch 注入市场/融资数据)
→ 撰写「本周看点」→ 生成单文件 HTML → 校验 → 展示。
用户:这周的 AI 新闻怎么样?给我看个简报就行
→ 技能激活,走「轻量模式」:直接在对话里输出 Markdown 分组列表,不生成网站。
用户:帮我把上周的周报推送到飞书
→ 技能激活,读取已生成的 report.json,调飞书 Webhook / 连接器推头条卡片
(部署托管可用 deploy.py --deploy-to 选腾讯云 COS / Vercel 等,不必依赖 GitHub Pages)。
用户:生成 8 月最后一周的 AI 周报,时间范围 2026-08-25 到 2026-08-31
→ 技能遵从你指定的时间窗,其余同完整模式。
用户:用我导出的 AI HOT 数据增强这期周报
→ 技能把你的 JSON 以 --external-news-json 注入(页脚自动署名),是否启用完全由你决定。
卡片文案 + 更多对话示例见 references/FAQ.md。飞书配置一步到位见 scripts/init_feishu_config.py。
🌐 线上 Demo(最新一期产出形态):
https://elisabeth15501.github.io/ai-weekly/AI_News_2026-09-07.html
— 直接看单文件 HTML 周报:可搜索 / 筛选 / 暗色模式 / 中英文对照。
(历史各期见 https://github.com/Elisabeth15501/ai-weekly/wiki 的「Optimization Plan」索引,或 AI_News_<日期>.html 同名文件。)
上面 5 条是「一句话触发」的语法层。下面是更接近真实使用的多轮对话—— 覆盖时间窗歧义怎么澄清、中途改主意怎么处理、抓取失败怎么排障、历史周报复现的真实边界。 这些场景里的每条命令都已在 3.4.2 实测可用。
① 时间窗歧义:先反问,不猜
用户:这周的 AI 周报呢?
Agent:今天 9/9(周三),本周一是 9/7,所以「这周」有两种理解——
· W37(8/31–9/7):news.json 里已有 115 条,可以直接生成
· W38(9/7–9/9):只有 2 天数据,条数会偏少
你要哪个?
用户:用 W37 那份
Agent:好 → generate_site.py --api-json news.json --date 2026-09-07 -o AI_News_2026-09-07.html
--date是周期截止日,显式传它才能保证「报告周期」与「文件名」一致。 不传会被写成「今天−7 ~ 今天」,历史周报会被逐步改写成当期内容。重生成历史周报时必须显式传。
② 中途改主意:没有的功能直说,别硬凑
用户:图表太占地方了,能去掉吗?
Agent:没有隐藏图表区块的开关,硬删会破坏报告完整性。三个真选项——
① 轻量模式:对话里直接给你 Markdown 分组列表,不出 HTML(最快)
② 保留网站但不注入市场数据:图表显示「示例/估算数据」标注
③ 改模板折叠该区块:要动 assets/news_site_template.html,我可以做
你要哪个?
用户:① 就行
Agent:→ 轻量模式,对话内直接输出分组列表
③ 抓取异常:先诊断,别交一份空报告
用户:跑一下这周周报
Agent:⚠️ RSS 只回来 3 条,14 个源里国内源全挂。先体检一下:
→ fetch_ai_news.py --check-feeds
结果:3 个源超时、其余被限流。三个方案——
① 10 分钟后重试(限流常见,多半自愈)
② 用现有 3 条生成(页脚会标注源健康度,不假装数据完整)
③ WebSearch 手动补齐后写成同结构 JSON,走 --api-json
我建议先 ①。
用户:那就重试一次
④ 历史周报复现:保留期是硬边界
用户:把 8/24 那期重新生成一份
Agent:先说清边界——RSS 源只保留约 1 周,现在回抓 8/24 那周只能拿个位数条目,
**无法忠实复现**。两个路径——
① 有当时的快照(如 news_w34.json)→ 直接用它 + --date 2026-08-24
② 没有快照 → 只能用最新周数据,但那样标题会与内容不符,我不建议
你本地有那周的备份吗?
用户:有,news_w34.json
Agent:→ generate_site.py --api-json news_w34.json --date 2026-08-24 -o AI_News_2026-08-24.html
⑤ 参数细化:榜单条数与翻译行为
用户:模型榜多给我看几条,另外英文标题别翻译了
Agent:→ generate_site.py --api-json news.json --ranking-top 20 --no-translate-title -o AI_News.html
(摘要仍会翻译,只保留英文标题原文)
生成一个可搜索、可筛选、响应式的 AI 行业新闻网站(单文件 HTML)。 每条新闻附带原始报道链接,支持按分类 / 关键词筛选,桌面端和移动端均可使用。
在 AI 协作工作流里,行业情报往往散落在十几个 RSS、公众号和付费简报里,且大量"AI 周报"内容是模型生成的空话摘要。
本技能的价值是把分散信号聚合成可溯源、有编辑判断、可交叉验证的单文件情报页,并让它在任意支持 SKILL.md 的 Agent 里都能跑——
不绑定任何商业 API、不依赖特定 Agent SDK,输出就是一份能被托管、被转发、被检索的静态 HTML。
scripts/fetch_ai_news.py,14 个精选源:国内 7 个优先 + 国外 7 个),不内置任何第三方商业 API;若用户希望用 AI HOT 等「AI 行业知识类」外部 API 增强可信度,由用户自行获取数据并以 --external-news-json 注入(含来源署名),是否启用完全由用户决定、风险自担SKILL.md 同时服务 Claude Code / Codex / OpenCode / OpenClaw / Coze / WorkBuddy;引擎接口另见 manifest.json(LangGraph / Dify / Coze 等框架的最小接口描述)。兼容性按 AgentSkills 规范声明;已实测 WorkBuddy,其余平台尚未逐一回归,如遇加载问题请反馈。| 约束 | 上限 | 违反后果 |
|---|---|---|
| 单次抓取新闻条数 | ≤100 条 | 超过截取前 100,保留高评分项 |
| HTML 体积建议 | ≤5 MB | 超过自动压缩 Chart.js 数据点 |
| 每榜排行榜模型数 | ≤50 条 | 超过截取 top 50 |
| 趋势线数据点 | ≤20 点 | 超出处以均值或分段 |
| 趋势线渲染前提 | ≥2 周快照数据 | 第 1 周数据趋势线为空(非 Bug) |
详细参见
scripts/aiweekly/const.py和scripts/validate_checks/constraints.py(validate_report.py --html会审计)。
[n天前]--market-data / --funding-data 注入;未提供时图表必须标注「示例/估算数据」,不得伪装成实时数据| 数据类型 | 获取方式 | 优先级 |
|---|---|---|
| 新闻列表 | scripts/fetch_ai_news.py(RSS:国内 量子位/36氪/雷峰网/智东西/极客公园/InfoQ 中国/钛媒体 + 国外 TechCrunch/MIT TR/HF Blog/TechMeme/MIT News/VentureBeat/Google AI;2026-09-10 实测 14/14 全通,国内源作地板,见 § 8.2) | 主 |
| 模型发布 | RSS(HF Blog / 关键词分类) | 主 |
| 产品发布 | RSS(关键词分类) | 主 |
| 行业动态 | RSS + WebSearch(政策/融资补充) | 主 |
| 学术论文 | RSS(arXiv/MIT News 类源)+ WebSearch | 主 |
| 市场数据(规模/采用率/份额) | 口径路由(见 § 8.3):--region cn 时国内源优先——中国信通院·中商产业研究院 / IDC 中国 / 艾瑞(可自行核对);国外源 Statista / Gartner / Grand View Research 为可选增强(海外机构静态快照,作对照)。结果通过 --market-data / --cn-market-data 注入 | 主(需搜索) |
| 融资并购金额 | 口径路由:--region cn 时国内源优先——IT桔子 / 烯牛数据 / 新浪创投Plus(可自行核对);国外源 Crunchbase / CB Insights 为可选增强。结果通过 --funding-data / --cn-funding-data 注入 | 主(需搜索) |
| 模型排行榜 | 网络环境自适应多源池(国外源 LMArena/Artificial Analysis/Hugging Face + 国内源 OpenCompass 司南/SuperCLUE/ModelScope);按运行环境(国内/国外)自动排序优先级,实时源全失败则回退国内快照或本地缓存,绝不空白 | 主 |
| 政策监管 | RSS + WebSearch | 主 |
| 外部 API 增强(可选) | 用户自备 AI 行业知识类 API(如 AI HOT)导出 JSON,以 --external-news-json 注入,页脚自动署名;是否启用由用户决定 | 可选增强 |
依赖说明:
scripts/fetch_ai_news.py需要feedparser、requests、beautifulsoup4(随技能提供requirements.txt)。 运行:一律用仓库根目录的bash run_report.sh scripts/xxx.py ...启动,启动器会自动探测并复用aiweekly受管 venv;若 venv 缺失,按提示python -m venv+pip install -r requirements.txt即可。 若这些包不可用,可手动用 WebSearch 搜集新闻后写成同样结构的 JSON,再走--api-json消费; 也可用你自己的外部 API(如 AI HOT)导出 JSON 后以--external-news-json注入——注意:使用任何第三方 API 须遵守其服务条款,并自行承担合规风险。
根据用户意图选择模式:
| 用户说的 | 模式 | 输出 |
|---|---|---|
| "快速看看" / "简单总结" / "不用图表" | 轻量 | Markdown 分组列表,直接在对话中展示 |
| 默认(无特别说明) | 完整 | 生成完整新闻网站 HTML |
| "生成报告" / "生成网站" / "周报" | 完整 | 生成完整新闻网站 HTML |
默认:过去 7 天。用户指定时遵从用户。
# 用统一启动器运行(自动探测并复用 aiweekly venv,无需手动选解释器)
bash run_report.sh scripts/fetch_ai_news.py --output news.json
返回 {"count": N, "items": [{title, summary, url, source, publishedAt, category, score}]},
分类已由脚本完成(ai-models / ai-products / industry / paper / tip)。
降级:若 RSS 抓取不可用(缺依赖/无网络),可手动用 WebSearch 搜集后写成同样结构的 JSON,
再走 --api-json 消费;也可用你自己的外部 API(如 AI HOT)导出 JSON 后以 --external-news-json 注入。
各做 1-2 次 WebSearch,拿到真实数值后用 --market-data / --funding-data 注入:
| 数据类型 | 搜索关键词示例 | 注入参数 |
|---|---|---|
| 融资并购 | AI funding Q2 2026, AI融资 2026年 | --funding-data 17.4,13.1,... --funding-labels 23Q1,23Q2,... --funding-source "Crunchbase 2026" |
| 市场数据 | AI market size 2026 statistics, AI市场规模 2026 | --market-data 51,71,103,... --market-labels 2020,2021,... --market-source "Statista 2026" |
若搜索无结果:不伪造,直接省略参数——图表会显示「示例/估算数据」标注,由读者知悉非实时。
读取 assets/news_site_template.html 理解结构,然后用 Write 生成完整网站。
新闻网站必须包含:
bash run_report.sh scripts/generate_site.py --api-json news.json \
--ranking-json ranking.json --profiles-json model_profiles.json \
--insights-json insights.json --lead "本周主线:……" \
-o AI_News_YYYY-MM-DD.html
推荐(强):尽量每次都传
--insights-json与--lead,这是头版核心、产品力所在。若漏传,generate_site.py会自动从本周新闻派生基线「本周看点」(标题+摘要+分类+原文链接),整段不再静默消失——但自动版只是摘要级,缺少人工「编辑洞察」深度,故仍建议撰写 curated 版本覆盖。
「本周看点」三块内容的必现保证(无需任何参数):
内容块 兜底机制 相关函数 看点卡片 无 --insights-json时从本周新闻按信号词打分派生 Top6_auto_insights()/_auto_lead()「给本周的你」三张受众卡 无 audience_summary时用内置三段文案_DEFAULT_AUDIENCE_SUMMARY关键词的彩色分类标签 缺 tag自动推断分类;完全无关键词时从新闻派生带标签关键词_normalize_keywords()/_auto_keywords()/_infer_tag()这三块均在生成阶段服务端预渲染进静态 HTML(
_render_audience_chips_html()/_render_keyword_chips_html()),JS 只负责后续交互切换。因此即使浏览器禁用 JS 或脚本报错,这些内容依然可见——不会再出现「区块静默消失」。⚠️ 排错提醒:若重新生成后仍看不到某块内容,先确认 ① 输出路径是否就是你打开的那个文件(不要输出到
-fixed/-static之类旁路文件名);② 浏览器是否硬刷新(Ctrl/Shift+R)。用grep -c 'class="kw-tag"'判断不可靠——CSS 里有同名类定义,恒返回 ≥1;应改查grep -o 'class="kw-tag"[^>]*>[^<]*'看实际渲染内容。
生成后运行验证:
bash run_report.sh scripts/validate_report.py --html AI_News_YYYY-MM-DD.html
校验器检查新闻卡片、排行榜章节、市场图表、洞察与关键词;并内置 XSS 守护(脚本上下文 JSON 无原始 </script>、全文无 javascript:/data: href)。
AI_News_YYYY-MM-DD.html(如 AI_News_2026-07-09.html)present_files 展示飞书/钉钉卡片里的「查看完整周报」按钮 view_url 需要一个可公开访问的地址。不一定要用 GitHub Pages——scripts/deploy.py 统一入口按 --deploy-to 选后端:
--deploy-to | 适合 | GitHub 依赖 |
|---|---|---|
github-pages(默认) | 已用 GitHub、熟悉 Pages | 需要(PAT + push + 切 Pages 源) |
tencent-cos | 国内访问最稳、无需境外托管 | 不需要(需 COS 桶 + 密钥) |
vercel / netlify / cloudflare-pages | 海外免备案、一条命令 | 不需要(需对应平台 token) |
local | 自托管 / 内网文件服务 | 不需要 |
非 github-pages 后端无需配置 GitHub,飞书卡片 view_url 由后端自动推导(可用 --view-base 覆盖)。配置示例见 delivery/deploy_config.example.json。
默认(GitHub Pages)路径:view_url 指向 https://<owner>.github.io/<repo>/AI_News_<date>.html——该地址由 gh-pages 分支提供(仓库 Pages 源 = Deploy from a branch: gh-pages / /root)。用 run_report.sh deploy 即可把当期周报推到该分支:
# 流水线封装:底层调用 scripts/deploy_ghpages.py
bash run_report.sh deploy --html AI_News_YYYY-MM-DD.html
# --no-push 仅本地提交不推送(离线可跑;待网络恢复后 git push origin gh-pages)
# --switch-pages 部署后通过 GitHub API 把 Pages 源切到 gh-pages / /root(需 GITHUB_TOKEN)
# --dry-run 只做 worktree+复制+index 预览,不提交不推送
deploy_ghpages.py 用 git worktree 操作 gh-pages(不污染 main、不进 SkillHub 包),并把所有 AI_News_*.html 累加进根目录 index.html 存档页(最新高亮)。脚本自动清理 worktree,本地 gh-pages 提交始终保留。
一步到位:publish.py 在推送飞书卡片的同时可顺带部署周报(需传 --html):
bash run_report.sh scripts/publish.py \
--news-json news.json --insights-json insights.json \
--audience-json audience_summary.json \
--html AI_News_YYYY-MM-DD.html --deploy
# --deploy 生成 report.json 后顺带部署(默认 github-pages)
# --deploy-to tencent-cos 改用腾讯云 COS(国内最稳,无需 GitHub)
# --deploy-to vercel 改用 Vercel(海外免备案,无需 GitHub)
# --no-push 部署时仅本地提交不推送
# --switch-pages 部署时一并把 Pages 源切到 gh-pages
首次启用(一次性):git push origin gh-pages → 仓库 Settings → Pages → Source 选 gh-pages / /root(或 run_report.sh deploy --switch-pages)。注意:GitHub Pages 只允许单一来源,原先的 .github/workflows/mirror.yml(Actions artifact 部署)因此已停用(if: false),以免两种来源互斥导致部署失败。
生成报告后,可把本周头条速览推到飞书(群机器人 / 连接器),让情报在"工作者已在用的地方"被消费。两种推送路径共用同一张卡片 schema(由 delivery/feishu_bot.build_headline_card 构造),区别只在"怎么发出去":
| 路径 | 发送方式 | 凭据 | 依赖 | 适合 |
|---|---|---|---|---|
| A. Webhook 自定义机器人 | feishu_bot.push() POST 到飞书 incoming webhook | webhook URL(token 内嵌在 URL) | requests | 任意环境,已建好自定义机器人 |
| B. 飞书连接器直推(推荐) | delivery/feishu_connector.py 经 lark-cli im +messages-send 发送 | 连接器托管,绝不落配置文件 | 标准库 + 已连接的飞书连接器(lark-cli + node) | WorkBuddy 用户,密钥不想写进仓库 |
文件职责:
delivery/feishu_bot.py是共用的卡片构造库(build_headline_card+ webhook 发送的push);delivery/feishu_connector.py是独立 CLI,import 前者的卡片构造、改用 lark-cli 发送。两者产出的卡片内容完全一致。
模式 A — Webhook(由 publish.py 一步完成)
# 组装 report.json 并直接推送到 webhook(三级回退:--webhook > $FEISHU_WEBHOOK > delivery/feishu_config.json)
bash run_report.sh scripts/publish.py \
--news-json news.json \
--insights-json insights.json \
--audience-json audience_summary.json \
--view-url "https://<你的托管地址>/AI_News_YYYY-MM-DD.html" \
--output report.json
# 仅构造卡片预览、不推送:
bash run_report.sh scripts/publish.py --news-json news.json --insights-json insights.json --audience-json audience_summary.json --dry-run
# 直接指定 webhook(也可写入 delivery/feishu_config.json,已被 .gitignore 忽略):
bash run_report.sh scripts/publish.py ... --webhook "https://open.feishu.cn/open-apis/bot/v2/hook/XXXX"
webhook 三级皆空 → 自动跳过推送(exit 0,不阻断报告生成);推送返回业务错误时 exit 1。
模式 B — 飞书连接器直推(密钥不落盘,推荐)
先让 publish.py 产出 report.json(可加 --dry-run 只组装不推),再用连接器 CLI 发送:
# 1) 组装 report.json(此步不推送)
bash run_report.sh scripts/publish.py \
--news-json news.json --insights-json insights.json \
--audience-json audience_summary.json --output report.json
# 2) 经飞书连接器推送到群(bot 身份,需先把「WorkBuddy-Feishu CLI」机器人加进群)
python delivery/feishu_connector.py --report report.json --chat-id oc_xxxx
# 推给自己(user 身份 → 私聊,首次冒烟测试最省事,无需加机器人)
python delivery/feishu_connector.py --report report.json --user-id ou_xxxx --as user
# 预览(不实际发送)
python delivery/feishu_connector.py --report report.json --chat-id oc_xxxx --dry-run
--chat-id/--user-id > 环境变量 FEISHU_CHAT_ID/FEISHU_USER_ID > delivery/feishu_target.json({"chat_id":"oc_xxx"} 或 {"user_id":"ou_xxx"})。--as bot(默认,应用机器人,需机器人已入群)/ --as user(以你本人身份,需你对该会话有发消息权限)。requests,卡片构建路径不会因缺 requests 而失败。卡片内容(两种模式一致):本周主线 + 🔥本周重点(按 score 取 Top5,带链接/来源)+ 💡本周看点(Top3)+ 👥分角色摘要(开发者/PM/自媒体)+ 🔖关键词 + 「查看完整周报」按钮(链接自动追加 ?src=feishu&uid=<uid> 度量参数)。
当用户要求"每周自动生成"时,创建 recurring automation:
| 参数 | 值 |
|---|---|
| name | AI新闻网站自动更新 |
| scheduleType | recurring |
| rrule | FREQ=WEEKLY;BYDAY=MO |
| status | ACTIVE |
| prompt | 见下方自动化 Prompt 模板 |
你是 AI 行业新闻编辑。请生成一个 AI 新闻网站(默认 RSS 自治,不内置任何第三方商业 API):
1. 运行 RSS 抓取获取近 7 天新闻:
bash run_report.sh scripts/fetch_ai_news.py --output news.json
(若依赖缺失/失败,改为 WebSearch 手动搜集,写成相同 JSON 结构再往下走)
2. 用 WebSearch 获取市场/融资真实数据(2-3 次搜索),记录数值与来源
3. 读取 assets/news_site_template.html 理解结构
4. 代入「有 AI 产品经理经验的专业科技媒体工作者」人设,基于 news.json 撰写「本周看点」:
- 顶部写 3-6 个 keywords({term, tag, note};tag 为分类彩色标签可省略——省略时生成器自动推断,note 可为字符串或按受众分述的对象 {开发者, PM, 自媒体}),渲染在「本周看点」开头、带网页搜索链接;
- 写 3-5 条 insight(每条覆盖:AI 产品/开发角度重点分析 + 本周 trends + 预计未来发展),务必去 AI 味、有观点锋芒;
- 写顶层 audience_summary({开发者, PM, 自媒体} 各一句),渲染为「给本周的你」三张受众卡;可省略(用内置 _DEFAULT_AUDIENCE_SUMMARY 兜底,区块永不隐藏)——注意键必须与 keywords[].note 的受众键一致;
- 拟一句头版导语 lead。
写入 insights.json(schema 见第七节),insight 字段承载「编辑洞察」栏。
5. 运行生成脚本(注入第 2 步真实图表数据 + 第 4 步洞察):
bash run_report.sh scripts/generate_site.py --api-json news.json \
--market-data <数值> --market-source "<来源>" --funding-data <数值> --funding-source "<来源>" \
--insights-json insights.json --lead "<本周主线一句话>" \
-o AI_News_[日期].html
6. 运行 validate_report.py 检查质量
7. 调用 present_files 展示结果
8. (可选)部署到 GitHub Pages,让飞书卡片的「查看完整周报」可点击访问:
bash run_report.sh deploy --html AI_News_[日期].html
若沙箱网络/凭据不可用导致推送失败,跳过此步也不影响报告生成(本地 gh-pages 提交已就绪)。
注意:默认流程不含任何外部商业 API。若用户明确要求用 AI HOT 等外部 API 增强可信度,
请提示用户自行从官方渠道导出 JSON,并以 --external-news-json 注入(含 --external-source-name/url 署名)。
这是本技能从「新闻聚合器」升级为「科技情报产品」的关键一步。必须由你(Agent)基于本周新闻亲自撰写,而非简单罗列。
人设(务必代入):你是一个有 AI 产品经理经验的专业科技媒体工作者。你既懂怎么把 AI 能力做成产品、踩过工程与商业化的坑,又能像专栏编辑一样把行业信号讲清楚。
撰写要求:
keywords(必做):3-6 个本周 AI 行业最值得追踪的关键词,每条 {term, tag, note}。
tag:分类标签,取值建议 模型 / 资本 / 产品 / 安全 / 基建 / 监管,渲染为词条上的彩色小标签。可省略——省略时生成器会用 _infer_tag() 按词义自动推断,但显式指定更准。note:可以是一句话字符串,也可以是按受众分述的对象 {"开发者": "...", "PM": "...", "自媒体": "..."}(推荐),点击「给本周的你」的受众卡时,所有词条的 note 会联动切换成该受众视角。--keyword-search-base 覆盖)。整段下方固定一句引导:"以上为本周 AI 行业最值得追踪的信号,建议你顺着这些词去做更多资料搜集与交叉验证。"——目的是鼓励读者深挖,而非替他们下结论。audience_summary(推荐):顶层字段,给三类读者各写一句本周结论 {"开发者": "...", "PM": "...", "自媒体": "..."},渲染为「给本周的你」三张受众卡。可省略——省略时用内置 _DEFAULT_AUDIENCE_SUMMARY 兜底,该区块永不隐藏。注意:这里的键必须与 keywords[].note 的受众键保持一致,否则切换受众时 note 取不到值。kicker(栏目标签)+ title(判断句,不是新闻标题复述)+ analysis(发生了什么、为什么重要,2-3 句的事实陈述,不用第一人称)+ insight(编辑洞察栏,见下)+ 可选 related(1-3 条指向原文的新闻链接)。insight 三段式(核心):以"有 AI 产品经理经验的专业科技媒体工作者"口吻写,必须覆盖:
lead(电梯演讲):一句话概括本周主线,作为头版导语。analysis 保持客观陈述事实,insight 才是编辑的主观判断——两者分工清晰,不要混成同一段。写入 JSON(schema 与下方一致)后,用 --insights-json 注入;--lead 传导语:
{
"audience_summary": {
"开发者": "旗舰模型单价下探,先把上季度调用账单重算一遍再决定要不要换栈。",
"PM": "能力过剩、成本骤降,产品差异化重心从「用哪个模型」挪到「场景与数据」。",
"自媒体": "「单位智能降价」是本周传播力最强的选题,配上账单对比图最好用。"
},
"keywords": [
{
"term": "单位智能降价",
"tag": "资本",
"note": {
"开发者": "价格锚松动,重算模型调用预算",
"PM": "定价模型要跟着推理成本重做",
"自媒体": "降价幅度对比是天然爆款素材"
}
},
{"term": "智能复利", "tag": "产品", "note": "曾鸣提出,Agent 进业务流程、算得清 ROI"}
],
"insights": [
{
"kicker": "模型格局",
"title": "旗舰模型密集上新,单位智能的定价开始松动",
"analysis": "本周 Claude Opus 5 正式发布……(客观事实陈述)",
"insight": "做 AI 产品的团队最纠结的……(重点分析)这一周的趋势是……(本周 trends)往后看半年,我判断……(预计未来发展)",
"related": [{"title": "原标题", "url": "https://..."}]
}
]
}
不同运行环境对国内外网站的连通性差异很大,本技能对此做了显式处理:
[Artificial Analysis(国外), LMArena(国外), OpenCompass 司南(国内), SuperCLUE(国内)];开源榜源池 [Hugging Face(国外), ModelScope 魔搭(国内)]。每个源带 region 标签。--region auto 同时探测一个国内哨兵与一个国外哨兵,判定 cn / global / unknown,并据此排序源优先级(国内环境优先国内源,反之亦然)。也可显式 --region cn / --region global。HTTPS_PROXY 环境变量与 --proxy 参数,便于在合规内网环境中运行。该参数仅用于合法的企业内网出站场景,本技能不提供、也不支持任何规避网络管理措施的能力。cn_leaderboard_snapshot.json(OpenCompass 司南 LLM 综合榜 + 开源榜快照,标注数据截止日,徽章显示「缓存快照」);国外/未知环境且实时源失败 → 回退本地 leaderboard_cache.json。排行榜来源优先级:--ranking-json > 多源池实时(按 region 排序)> 国内快照 / 本地缓存 > 显示「暂无实时数据」。
图表数据未注入时,图表注释自动标注「示例/估算数据」,不伪装为实时。
先说结论:LMArena 与 Artificial Analysis 没有官方国内镜像,国内受限网络下这两榜拿不到——这是硬边界,不假装能解决。
下面是 33 次真实运行统计出的各榜源成功率(leaderboard_health.jsonl):
| 源 | 标记 | 成功率 | 国内受限网络下 |
|---|---|---|---|
| Artificial Analysis | global | 97% ✅ | ❌ 受限网络下不可达 |
| DataLearner | global | 81.8% ✅ | ❌ 受限网络下不可达 |
| LMArena | global | 48.5% | ❌ 受限网络下不可达 |
| HuggingFace Open LLM | global | 42.4% | ⚠️ 原站不稳,另有国内可访问镜像源可回退 |
| LLM-Stats | global | 0% | ❌ 长期空,等同失效 |
| OpenCompass 司南 | cn | 0% ❌ | 页面为 SPA,抓不到结构化数据 |
| SuperCLUE | cn | 0% ❌ | 同上 |
| ModelScope 魔搭 | cn | 0% → 已修复 | ✅ 改用官方 openapi/v1/models 后可直连 |
⚠️ 表中三个标记为
cn的"国内源",实测成功率全是 0%——它们只是"服务器在国内", 页面却是 JS 渲染的 SPA,HTTP 直抓只能拿到骨架。所以"国内环境优先国内源"这条策略 过去实际是失效的(代码在跑,但从没拿到过数据)。
已补齐的国内可直连源(2026-09-09 新增/修复)
| 源 | 地址 | 状态 |
|---|---|---|
| ModelScope 魔搭 | www.modelscope.cn/openapi/v1/models | ✅ 官方 API,国内直连,含下载量/许可证 |
| HF 镜像热门模型 | hf-mirror.com/api/models | ✅ 国内直连,仅收录文本生成/对话类 |
同时清除了两个"假镜像"(重要):代码里曾登记 lmarena.org.cn(域名根本不存在)
与 aa-cn.mirror.xyz(返回的是 mirror.xyz 博客平台页面,与 AA 无关)。
后者尤其危险——HTTP 200 但内容无关,一旦解析出数据会直接污染榜单。
教训:镜像必须逐个验证「域名存在 + 返回预期内容」,只看 HTTP 200 不够。
海外源不可达时的三条路径(均为合法、不涉及任何网络访问规避手段)
--ranking-json 传入你自己的榜单 JSON,完全不走网络抓取。HTTPS_PROXY 环境变量与 --proxy 参数,可直接沿用该合规配置(详见下节)。部分企业内网要求所有出站流量经统一代理,这是标准的网络架构,并非本技能的特殊能力——技能只是遵循 HTTPS_PROXY / --proxy 这一通用约定,使自身能在该架构下正常工作。
合规边界:本参数面向合法的企业内网/自建网关出站场景。本技能不提供、不指导、也不支持任何规避网络管理措施的做法;当某个源因网络原因不可达时,技能的既定行为是降级到国内源与随技能附带的离线快照,而不是设法绕行。
HTTPS_PROXY=http://<proxy-host>:<port> bash run_report.sh scripts/generate_site.py --api-json news.json -o AI_News.html
bash run_report.sh scripts/generate_site.py --api-json news.json --proxy http://<proxy-host>:<port> -o AI_News.html
排行榜资料卡所需的「机构 / 许可证 / 成本 / 上下文 / 多模态 / 适用场景 / 信息源」等字段,来自一个联网核实的 canonical 档案,随技能一起维护、随每次运行累积更新:
model_profiles.json(技能目录内)按模型名索引,存放逐模型核实过的资料;无需每次手动传入,generate_site.py 每次生成自动加载并注入资料卡。model_profiles.pending.json 并告警。运行方(Agent)应据此闭环:
model_profiles.pending.json 中的模型名;{模型名: {org, license, commercial, intel_index, hf_avg, cost_in, cost_out, context, multimodal, use_case, source}} 的 JSON;--profiles-json 该JSON 重新生成——脚本会将其合并写回 model_profiles.json(canonical 实时更新),并自动清除 pending 清单。--profiles-json 合并 > canonical 档案 > 资料卡留空(绝不编造字段)。结论:新闻类(RSS)与排行榜类(网页抓取)的国内可达性完全不同——RSS 目前 14/14 全通。
逐源裸连实测(国内网络,无代理):
| 分组 | 实测 | 说明 |
|---|---|---|
| 国内源(7) | 7/7 ✅ | 量子位 / 36氪 / 雷峰网 / 智东西 / 极客公园 / InfoQ 中国 / 钛媒体 |
| 国外源(7) | 7/7 ✅ | TechCrunch / MIT TR / HF Blog / TechMeme / MIT News / VentureBeat / Google AI |
用 fetch_ai_news.py --check-feeds 可随时自测,输出按 cn / global 分区统计,并对失败源直接给「人话建议」。
本次体检修掉的三个真问题
| 问题 | 根因 | 修复 |
|---|---|---|
| 36氪 0 条 | URL 缺 www,被反爬拦截(200 + HTML,无条目) | 改用 www.36kr.com/feed(30 条) |
| 机器之心 0 条 | RSS 已下线,返回「机器之心·数据服务」落地页 | 替换为雷峰网 AI 科技评论(20 条,AI 垂直媒体) |
| VentureBeat 429 | 站点对自报爬虫 UA(compatible; AIWeeklyReport/4.0)限流 | 统一改用常规浏览器 UA(常量 FEED_UA),即时恢复 200 |
为什么新闻源没那么脆弱:RSS 是各站主动对外公开的订阅接口(本来就是给机器读的),不像排行榜网页那样靠 JS 渲染、依赖访问来源。所以「海外源拿不到就等于没有国外信息」在新闻这一侧并不成立;真正受限的是排行榜(见 § 8.1),而技能对此已有国内源与离线快照兜底。
仍然存在的边界(诚实说明):
--check-feeds 建议每周跑一次。先说边界:市场数据不是实时抓取的。 它是运行方用 WebSearch 核实后以 --market-data / --cn-market-data 等参数注入的静态快照(快照日期印在每张图下方)。所以"国内优先"不是说国外源抓不到,而是说两套数字该信哪个。
| 口径 | 国内源(可自行核对) | 国外源(可选增强) |
|---|---|---|
| 市场规模 | 中国信通院·中商产业研究院、IDC 中国、艾瑞 | Grand View Research、Statista、Gartner |
| 融资并购 | IT桔子、烯牛数据、新浪创投Plus | Crunchbase、CB Insights |
--region cn 时(或自动探测为国内网络)的处理:
为什么这么设计:GVR / Crunchbase 这类海外机构数据,国内用户通常无法一手核实(且多位于付费墙之后),把它们和"信通院白皮书面上的数字"标成同等可靠是误导。路由条的作用就是把"该信哪个、哪个只是对照"明写给用户。
英文报道的中文总结(cn_title / cn_summary)按三级优先级取值,前两级都不需要本地模型:
| 优先级 | 来源 | 前提 | 说明 |
|---|---|---|---|
| 1 | 本地译文缓存 .translate_cache.json | 曾在本机翻译过 | 零开销,src_hash 校验原文未变 |
| 2 | 远程译文源 --translations-url | 能访问 Pages | 没有本地 Ollama 的用户靠这一级(见下) |
| 3 | 本地 Ollama 实时翻译 qwen2.5:7b | 本机装了 Ollama 且在运行 | 约 19s/条(CPU 推理),best-effort |
三级都落空 → 保留英文原文,并在结束时的「💡 给你的提示」里说明原因(不会静默)。
⚠️ 运营方必读:历史上有期次(8/24、8/31)因为生成那一刻 Ollama 没运行而整期没有中文,且事后无法补救——RSS 只保留约 1 周,原始
news.json回抓不到。生成前请确认 Ollama 在线,或配置--translations-url。
每周生成周报时顺带把译文汇总发布到 Pages:
https://elisabeth15501.github.io/ai-weekly/translations.json
{"schema":"ai-weekly-translations/v1","count":N,"entries":{<原文URL>:{src_hash,cn_title,cn_summary}}}src_hash 校验原文是否变化(变了就视为未命中,避免张冠李戴)用法:
python scripts/generate_site.py --api-json news.json -o AI_News.html \
--translations-url https://elisabeth15501.github.io/ai-weekly/translations.json
已发布的 HTML 若缺译文,可用回填脚本直接改 HTML 内的 NEWS_DATA(不需要原始 news.json):
python scripts/backfill_translations.py --check AI_News_*.html # 只核查
python scripts/backfill_translations.py --no-ollama AI_News_*.html # 只复用缓存,离线可用
python scripts/backfill_translations.py --emit-source translations.json AI_News_*.html
本技能默认零第三方商业 API 依赖,可安全开源发布(GitHub / Gitee):
本技能不提供、不指导、也不支持任何规避网络管理措施的能力。 技能的全部网络行为仅为:读取各站点主动对外公开的 RSS 订阅接口与公开榜单页面。
数据源默认国内优先:14 个 RSS 源中国内 7 个、国外 7 个;--region auto 会优先选用国内源。海外源不可达时,技能的既定行为是降级到国内源与随技能附带的离线快照,并在报告中如实标注数据来源与快照日期——绝不编造、也绝不为取数而改变网络路径。
--proxy / HTTPS_PROXY 的定位:这是通用的标准 HTTP 客户端参数(pip / npm / git / curl 等均有),本技能仅为适配「企业内网要求所有出站流量经统一代理」这类常见网络架构而遵循该约定。它不是为访问任何特定站点而设,也不构成任何规避手段;公网直连环境无需配置。
不做的事:不内置任何代理服务、不提供代理节点、不指导任何形式的网络访问规避;不使用非公开接口、不破解任何访问控制、不伪造身份绕过鉴权。
新闻默认全部来自 14 个公开 RSS 源(国内 7 + 国外 7);市场/融资图表由运行方通过 WebSearch 注入;排行榜从公开网页(LMArena / Artificial Analysis / Hugging Face / OpenCompass / SuperCLUE / ModelScope 等)自适应抓取,国内兜底快照随技能附带。
不内置、不打包任何 AI HOT / 卡兹克的内容。页脚仅保留基础参考来源链接(LMArena / Artificial Analysis / Hugging Face / OpenCompass / Gartner / IDC / Statista / Crunchbase / Stanford HAI)。
外部 API 增强是用户 opt-in 的:技能不主动调用 AI HOT 等任何外部商业 API;只有当用户自备 JSON 并以 --external-news-json 注入时才会参与,且页脚自动署名该来源。是否启用、遵守其服务条款均由用户自行决定。
发布建议:① 附带 LICENSE 文件(如 MIT / Apache-2.0);② 如需大范围传播,建议提示用户使用外部 API 前先取得授权。
跨平台分发:本技能以单一 SKILL.md(开放 Agent Skill 规范)为唯一入口,直接放入支持该规范的任意 Agent 目录即可加载;框架级调用(LangGraph / Dify / Coze)参考 manifest.json 的引擎接口描述。无需任何平台专属包装(无 plugin.json、无 per-agent 副本)。
目录职责边界(改东西前先看这里,避免跨目录混放):
scripts/= 生成管线(抓取 / 翻译 / 渲染 / 部署),纯 Python,所有业务逻辑只在这里改;assets/= HTML 模板与静态资源(Chart.js、截图占位),勿在其中写业务逻辑,改样式只动这里;references/= 独立文档(FAQ / 数据源 / 结构说明),与代码解耦,改说明只动这里;- 根目录
translations_offline.json= 离线译文包(随技能附带,断网可用),由scripts/backfill_translations.py --emit-source重新生成。
| 文件 | 用途 |
|---|---|
SKILL.md | 本文件(单一跨平台入口) |
manifest.json | 通用引擎接口描述(框架级调用参考) |
assets/news_site_template.html | v3.0 新闻网站 HTML 模板 |
assets/report_template.html | v2.0 周报模板(保留兼容) |
assets/sample_chart_data.json | Chart.js 示例数据 |
scripts/generate_site.py | v3.0 一键从 API 生成新闻站 |
scripts/validate_report.py | v3.0 质量检查(含 XSS 守护,自动识别 v2/v3 格式) |
scripts/fetch_ai_news.py | 离线 RSS 抓取(备用) |
scripts/deploy_report.py | 部署摘要提取(框架无关通知文本) |
scripts/deploy_ghpages.py | 部署到 GitHub Pages:git worktree 操作 gh-pages 分支,累加根 index.html 存档页并推送(底层被 deploy.py 调用) |
scripts/deploy.py | 统一部署入口(P0-1):按 --deploy-to 选后端(github-pages/tencent-cos/vercel/netlify/cloudflare-pages/local),非 GitHub 后端无需配置 GitHub |
scripts/validate_models.py | 模型档案守护(P0-2):--check 扫描 model_profiles.json 有无未核实条目;--fix 将无来源推测条目移入 model_profiles_unverified.json |
scripts/leaderboard_diagnose.py | 排行榜源诊断(P0-3):逐个源探测可达性 + 统计国内镜像回退命中 |
scripts/install_scheduler.py | R4 系统级调度兜底:注册每日 09:00 刷新任务(Windows 任务计划 / Linux cron),会话不在线也能刷新 |
scripts/publish.py | 组装本周头条 report.json 并推送飞书卡片(支持 webhook 与连接器两种路径;--deploy/--deploy-to 顺带部署) |
delivery/feishu_bot.py | 飞书卡片构造(build_headline_card)+ Webhook 发送(push),两路径共用的卡片 schema |
delivery/feishu_connector.py | 飞书连接器直推 CLI(lark-cli,密钥不落盘),复用前者的卡片构造 |
scripts/init_feishu_config.py | 飞书配置向导(P1-3):交互式生成 feishu_config.json(Webhook)或 feishu_target.json(连接器),免去手动建文件 |
tools/accumulate_data.py | 历史数据累积(独立辅助工具,不在主流程) |
model_profiles.json | canonical 模型资料档案(按模型名索引,逐条 verified=true + 真实来源),每次生成自动加载、新模型研究后合并写回 |
model_profiles.pending.json | 新上榜但档案缺失的模型清单(检测为空自动删除;运行方据此联网补档) |
model_profiles_unverified.json | 隔离存放(P0-2):被 validate_models.py 移出的无来源推测条目,不参与排行榜,待联网核实后回填 |
cn_leaderboard_snapshot.json | 国内排行榜快照(实时不可达时回退) |
delivery/deploy_config.example.json | 部署配置示例(COS/Vercel 等后端参数) |
delivery/feishu_config.example.json | 飞书 Webhook 配置示例(feishu_config.json 模板) |
references/data_sources.md | 备用数据源参考 |
references/report_structure.md | v2.0 报告结构参考 |
references/FAQ.md | 常见问题集中解答(P1-2):安装配置 / 首次使用 / 飞书推送 / GitHub Pages / 网络 / 模型数据 |
data/history.csv | 历史指标数据 |
SKILL.md)