今日宇宙 · Universe Today
一个实时聚合宇宙学/天文学最新动态的技能。每次调用都去抓当天/近期的真实内容,绝不编造。
> 🌐 国内用户使用说明(重要)
> 本技能的默认主路径是 WebSearch + WebFetch(走 WorkBuddy 内置代理),对国内网络环境零门槛——你不需要能直连 NASA 或 arXiv,也能拿到完整内容。内置脚本 aggregate.py 走的是 arXiv/NASA 原始 API(用于"无 WebSearch 权限时"的兜底),国内直连可能受限时才用。换句话说:
> - ✅ 国内用户 → 默认路径完全可用
> - ⚠️ 国内用户 → 只有在你关掉 WorkBuddy 代理时才需要兜底脚本
触发条件
- 用户显式调用本技能(如
@skill:universe-today)。 - 用户问"今天宇宙有什么新发现""最近天文学有什么进展""宇宙新闻""NASA 每日一图"等。
执行步骤(每次调用都按此执行)
1. 取当前日期
用 shell date +%Y-%m-%d(或用会话注入的当前时间)得到今日日期,记为 <TODAY>。
所有检索与输出都基于这个日期。
2. 并发执行检索(WebSearch,中文 + 英文混合,保证覆盖)
至少做以下检索(可并行):
- 宇宙学 最新发现 <年份> / cosmology latest discovery <年份>
- JWST James Webb latest galaxy discovery <年份>(早期宇宙星系、高红移)
- dark energy DESI DR2 latest <年份>(暗能量、加速度)
- gravitational wave astronomy latest <年份>(引力波、黑洞合并)
- exoplanet discovery latest <年份>(系外行星、宜居带)
- 航天 望远镜 发射 最新 <年份>(综合航天动态:火箭、望远镜、任务)
检索时注意 freshness 可用 m3/m6/y1 限定近期;若用户要"今天"则优先近 1–3 天结果。
3. 抓 NASA 每日一图(WebFetch 或可选脚本)
优先 WebFetch:https://apod.nasa.gov/apod/astropix.html
提取:图片标题、一句话讲解、图片直链。
- 实测经验(2026-09-04):scripts/apod.py 走 NASA DEMO_KEY 极易触发 HTTP 429 Too Many Requests(回溯 7 天也全失败)。遇到 429 直接改用上面的 WebFetch 路径,别在脚本上重试浪费时间;脚本只作为"没有 WebFetch 权限"时的兜底。
- WebFetch 抓 astropix.html 时页面显示的是美东日期,可能比本地日期晚一天(今天图未更新时页面底部会写 "Tomorrow's picture")。此时如实标注:"APOD 当前最新为 <页面日期>,今日图尚未更新"。
- 若该页面提取困难,改用可选脚本 scripts/apod.py(免费、无需 key,使用 NASA DEMO_KEY,带超时与重试,单日失败时自动回溯最近 7 天有图的一天并标注 requested/served 日期):
python scripts/apod.py 会输出当天 APOD 的 JSON(title / explanation / url / hdurl)。
- 若 APOD 当天无更新或抓取失败,如实说明,不要编造图。
4. 合成输出(中文,结构化)
按以下板块输出,每条发现带来源链接与日期,并明确区分"今天"与"近期":
🌌 今日宇宙 · <TODAY>
📡 最新科研发现
- <发现1:一句话,来源名 + 日期 + 链接>
- <发现2 ...>
(3–5 条,按重要性排序;无则实说"近期无重大突破")
🖼 NASA 每日一图
- <标题>:<一句话讲解>
- 图片:<url>
📰 综合航天动态
- <事件1:火箭/望远镜/任务进展,带来源>
🧠 今日冷知识(反直觉,独立科普)
- <一条:例如"宇宙才 138 亿岁,可观测直径却有约 920 亿光年——因为空间本身在膨胀,把光走过的时间拉伸了" / "暗能量让宇宙加速膨胀,事件视界外的光永远到不了地球,可探测宇宙在远端其实在缩小">
📎 来源:<列出本次使用的链接>
5. 真实性与语气红线
- 绝不编造发现、数据或图片。搜索无结果就写"暂无"。
- 区分"今日 new"与"近期进展",不为凑数把旧新闻说成今天。
- 保持中文、专业但通俗;硬核术语(如红移 z、事件视界)可顺带解释。
无 WebSearch 权限时的兜底:聚合缓存脚本
当运行环境无法使用 WebSearch(例如被权限策略禁用),改用内置脚本做结构化聚合,
结果按日期缓存,当天重复调用直接读缓存、不重复打网络:
python scripts/aggregate.py # 聚合今日(优先读当天缓存)
python scripts/aggregate.py --refresh # 强制刷新缓存
- 数据源(纯标准库
urllib,零外部依赖): - arXiv API:
astro-ph.CO/astro-ph.GA/gr-qc近期论文(按提交时间倒序)。 - NASA APOD:复用
scripts/apod.py的fetch()(带重试)。 - 缓存文件:
D:/xjq/buddy_workspace/universe-today/feed_<日期>.json。 - agent 读取脚本输出的结构化文本,再按上面第 4 步的中文板块润色即可。
> 注意:聚合脚本只覆盖"科研论文 + 每日一图",不含媒体综合新闻;媒体新闻仍需 WebSearch。
> 若两者都不可用,如实告知用户"本次无法获取实时动态"。
依赖
- 实时路径:运行时联网(WebSearch / WebFetch)。
- 兜底路径:
scripts/aggregate.py、scripts/apod.py仅用 Python 标准库(urllib/json/xml.etree),零外部依赖。APOD 走api.nasa.gov,DEMO_KEY 限流约 30 次/小时,个人足够;超限制可设环境变量NASA_API_KEY为自己的 key。
备注
- 数据源以权威优先:NASA / ESA / arXiv / 自然·新闻 / 中科院国家天文台 / 科技日报等。
- 本技能只产出"资讯聚合",不计算宇宙学真值;如需"宇宙有多大"的计算请由用户另行调用对应技能(不属于本技能职责)。
❓ 常见问题 & 避坑指南
Q1. 国内网络下脚本 aggregate.py 拉不到 arXiv/APOD 怎么办?
- 首选方案:直接走 WebSearch / WebFetch 路径(默认主路径),走 WorkBuddy 内置代理,国内零门槛。
- 真的需要脚本:设
HTTPS_PROXY指向可用代理;或暂时用手机热点/代理。脚本本身已加重试 + 7 天回溯,不要在脚本上加更激进的限速——容易被 NASA 识别为滥用。
Q2. 报 HTTP 429 Too Many Requests(DEMO_KEY 限流)
- NASA APOD 用
DEMO_KEY限速约 30 次/小时/IP。重试只会延长等待时间。 - 解决:
1. 改走 WebFetchhttps://apod.nasa.gov/apod/astropix.html(无 key、无限制、显示美东日期)。
2. 申请自己的 NASA API key(免费、立即生效):https://api.nasa.gov/→ "Generate API Key",再设环境变量NASA_API_KEY=<your_key>,脚本会自动用上。
Q3. APOD 显示日期与本地日期差一天
- 正常。NASA APOD 采用美东时区(UTC-5/-4),每日中午 12:00 ET 更新。
- 抓取时如实标注"APOD 美东日期 X,今日图尚未更新"即可,不要硬凑本地日期。
Q4. 缓存文件占空间 / 想清理
- 缓存目录默认
D:/xjq/buddy_workspace/universe-today/,可被环境变量UNIVERSE_TODAY_CACHE_DIR覆盖(优先级:环境变量 > 脚本默认值)。 - 清理:直接删除
feed_<日期>.json即可,下次调用会自动重建当天缓存。 - 历史缓存全删:
rm D:/xjq/buddy_workspace/universe-today/feed_*.json(Linux/Mac)或del D:\xjq\buddy_workspace\universe-today\feed_*.json(Windows)。
Q5. 想换缓存目录但不想改脚本
- Linux/Mac:
export UNIVERSE_TODAY_CACHE_DIR=/your/path - Windows PowerShell:
$env:UNIVERSE_TODAY_CACHE_DIR = "D:\your\path" - Windows Git Bash:
UNIVERSE_TODAY_CACHE_DIR=/d/your/path python aggregate.py - 设置后首次调用会在新目录自动建
feed_<日期>.json。
Q6. 报告"暂无新发现"是不是脚本坏了?
- 不一定。可能是:
1. 当天确无重大突破(学术新闻有低谷期,节假日尤其少)。
2. 数据源 API 临时不可用(NASA/arXiv 偶发 5xx)。
3. 网络问题(国内直连)。 - 三种情况都建议如实写"今日无显著新进展",不要凑数。
Q7. 输出太"硬"了,能不能轻松点?
- 冷知识板块的设计就是"反差 + 浪漫":一句反直觉事实 + 一句情绪共鸣。
- 觉得偏专业时,可以微调冷知识口吻(保持事实硬核、表述更口语),但绝不为追求"轻松"牺牲准确性。
Q8. 完全无网络时(飞机/离线)能用吗?
- 当日缓存可以读:
python aggregate.py不会重新抓网络,直接读feed_<日期>.json。 - 没有任何缓存就完全离线 → 无解,本技能本质是实时聚合,离线不在能力范围内。
Q9. 跨年/跨时区时间错位
- 论文用 arXiv 提交日(UTC);APOD 用美东日(ET);媒体新闻用发布时间(来源时区)。
- 输出时统一用
<日期>(UTC/ET)标注即可,避免混淆。
Q10. 想给反馈/纠错
- 数据真实性是硬要求。若发现某条"发现"无来源链接或来源已 404,不要在结果里保留,直接写"未找到可靠来源,本条不引用"。