Community程式設計與開發github.com

GuXing-code/agent-skills-mirror

AI HOT (aihot.virxact.com) 中文 AI 资讯查询 Skill。用于获取每日 AI 日报、行业动态、模型发布等,无需任何配置。

agent-skills-mirror 是什麼?

此 Skill 为 AI Agent 提供从 aihot.virxact.com 获取最新中文 AI 资讯的能力。当用户询问「今天 AI 圈有什么」、「AI 日报」、「AI 热点」、「OpenAI/Anthropic/Google 最近发布了什么」等涉及 AI 行业动态的问题时,Agent 应调用此 Skill 来获取最新数据,而非依赖可能过时的训练数据。它支持多个平台,包括 Claude Code、Codex CLI、Cursor 等。其工作方式是直接通过 curl 调用公开的 REST API(例如 `/api/public/items` 或 `/api/public/daily`),然后以结构化的 Markdown 简报形式呈现给用户。一个关键的注意事项是,调用 API 时必须携带一个浏览器类型的 User-Agent,否则请求会被服务器的反爬虫机制拒绝。Skill 内部定义了清晰的查询路由规则:宽泛问题默认使用「精选 + 时间窗」模式,只有当用户明确提到「日报」时才调用日报接口,只有当用户明确要「全部」或「所有」时才使用全量模式。返回的数据会按照类别(如模型发布、产品发布、行业动态、论文研究、技巧与观点)进行分组展示,并且所有时间都会自动转换为用户友好的北京时间格式。Skill 还支持关键词搜索和分页功能,以应对更复杂的查询需求。

相容平台✓Claude Code✓Codex CLI✓Cursor✓Gemini CLI✓OpenCode
npx skills add https://github.com/GuXing-code/agent-skills-mirror/tree/HEAD/aihot

Installed? Explore more 程式設計與開發 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

AI HOT Skill

讓 Agent 用最自然的中文查詢拿到 aihot.virxact.com 上每天的 AI HOT 日報和全部 AI 動態,不需要打開瀏覽器。SKILL.md 標準格式,跨 Claude Code / Codex CLI / Cursor / Gemini CLI / OpenCode / 任何相容平台可用。

線上:https://aihot.virxact.com(公開匿名可訪,無需 token)

先決條件:必須帶 User-Agent(僅 API 端點)

/api/public/* 走 nginx UA 黑名單擋商業爬蟲,預設 curl/X.Y UA 會被 403 Forbidden。調 API 時所有 curl 都必須帶瀏覽器 UA:

UA="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36"

# 之後所有調 API 的 curl 都加 -H "User-Agent: $UA",例如:
curl -sH "User-Agent: $UA" "https://aihot.virxact.com/api/public/daily"

後面「工作流」章節的 curl 例子為了簡潔預設你已經設了 $UA——實際呼叫必須加 -H "User-Agent: $UA",不要忘。漏掉這一步會讓你以為介面掛了,實際只是被 403 擋了。

範圍澄清:這條 UA 要求只針對 /api/public/* API 端點。/aihot-skill/{install.sh,SKILL.md,README.md} 安裝入口 nginx 上特意豁免 UA 黑名單(設計前提就是給 curl -fsSL ... | bash 一行裝用),用 default curl UA 直通 200。不要把「先決條件」誤推廣到所有 aihot.virxact.com 路徑。

什麼時候用

路由優先級(第一原則):預設走精選 items?mode=selected——它是 AI HOT 每天精挑細選的「主菜單」,覆蓋用戶關心的事且數據新鮮。

  • 僅當用戶在話裡明確說出「日報」 二字才走 daily(編輯成品,按 UTC 整日切片,跟「過去 24 小時 / 今天」等滾動窗口對不上)
  • 僅當用戶明確說「全部 / 完整 / 所有 / 全量」 才走 mode=all(含未精選的次要條目,量大但雜)
  • 「今天 AI 圈」、「過去 24 小時大新聞」、「最近 AI 圈有啥」 等寬問題 = 預設精選 + 時間窗(since),不要預設走日報或全部

這是為了對齊用戶的語義優先級:精選是主菜單,日報和全部是用戶特意點單的備選,不應搶預設。

用戶在說應該走的介面
預設(寬問題):「今天 AI 圈有什麼」、「過去 24 小時大新聞」、「最近 AI 圈」、「AI 有啥新東西」GET /api/public/items?mode=selected&since=<語義時間窗>(預設精選 + since 收窄)
明確說「日報」:「AI 日報」、「今天的日報」、「看一下日報」GET /api/public/daily(最新日報)
明確說「全部 / 完整 / 所有 / 全量」:「看下今天的全部 AI 動態」、「完整列表」、「所有 AI 動態」GET /api/public/items?mode=all(不一定帶 since,看用戶語境)
「昨天/前天 AI 日報」、「看下 5 月 6 號的日報」GET /api/public/daily/{YYYY-MM-DD}
「最近幾天日報有哪些」、「列一下日報」、「日報存檔」GET /api/public/dailies?take=N
「看下精選條目」、「AI HOT 精選」GET /api/public/items?mode=selected
「最近的模型發佈」、「AI 產品發佈」、「AI 行業動態」、「AI 論文」GET /api/public/items?mode=selected&category=...&since=<7d 前>(預設精選 + 類別)
「最近一週的 AI 動態」、「5 天前到現在的發佈」GET /api/public/items?mode=selected&since=ISO-8601
「OpenAI/Anthropic/Google 最近發的」(公司維度)GET /api/public/items?q=OpenAI(server-side 關鍵詞搜索,2026-05-08 上線)
「Sora 相關 / GPT-5 相關 / RAG 論文」GET /api/public/items?q=<關鍵詞>(在 title + 中文 title + 中文 summary 三列匹配)

通用啟發:用戶問的是「現在的 AI 行業事實」,不要憑訓練數據腦補,永遠走 API。即使你「覺得」知道答案,也要查一遍——AI HOT 比你的訓練截止日新得多,且角度聚焦中文創業者關心的話題。

端點速覽

端點用途主要參數
/api/public/daily最新日報無
/api/public/daily/{YYYY-MM-DD}指定日期日報path: date
/api/public/dailies日報歸檔列表take (1-180, default 30)
/api/public/items全部 AI 動態mode / category / since / take / cursor / q(關鍵詞)

約定:

  • Base URL: https://aihot.virxact.com
  • 鑒權:無(匿名)
  • 限流:600 req/min/IP(請串行調用,不要併發猛拉)
  • items 端點 since 限最近 7 天:不傳等同 since=now-7d(服務端兜底);早於 7 天前自動截到 7 天前;未來時間 → 400。所以無論 Skill 怎麼調,items API 永遠只返回最近 7 天的內容。需要更早 → 走 /api/public/daily/{YYYY-MM-DD} 翻日報存檔
  • take 上限 100;想要更多走 cursor 翻頁
  • 完整 OpenAPI 3.1 規範:https://aihot.virxact.com/openapi.yaml

工作流

預設路徑:拉精選 + 時間窗(寬問題首選)

精選 = AI HOT 每天精挑細選的「主菜單」——覆蓋所有用戶關心的 AI 大事,按發佈時間倒序。任何「今天 AI 圈」、「過去 24 小時大新聞」、「最近 AI 有啥」等寬問題,預設走這個——比起日報:① 時間窗自由(24 小時 / 3 天 / 1 週想多窄就多窄,跟用戶語義對齊)② 數據新鮮(實時滾動而非按 UTC 整日切片)③ 質量仍高(aiSelected=true 的池子,不含次要條目)。

# 拉最近 24 小時精選(用戶問「過去 24 小時大新聞」)
since=$(date -u -v-24H +%Y-%m-%dT%H:%M:%SZ 2>/dev/null || date -u -d '24 hours ago' +%Y-%m-%dT%H:%M:%SZ)
curl -sH "User-Agent: $UA" "https://aihot.virxact.com/api/public/items?mode=selected&since=$since&take=50"

# 拉最近 50 條精選(用戶問「看下精選」 / 不帶明確時間窗)
curl -sH "User-Agent: $UA" "https://aihot.virxact.com/api/public/items?mode=selected&take=50" \
  | jq '.items[] | {title, source, publishedAt, url}'

拉日報(用戶明確說「日報」時)

觸發關鍵詞:句子裡出現「日報」二字(「AI 日報」、「今天的日報」、「看下日報」、「5 月 6 號的日報」)。沒有「日報」二字不要走這個——日報是 UTC 0 點切片的固定一日成品,跟「過去 24 小時 / 今天」等滾動時間窗對不上。

日報是 AI HOT 的「標題層」——每天北京時間 08:00 自動生成,按主題分版塊(5 個固定版塊)。已有「主編點評」導語段落,是按主題打包後的成品。

# 拉今日(或最新可用的)日報
curl -sH "User-Agent: $UA" "https://aihot.virxact.com/api/public/daily" \
  | jq '{date, lead: .lead.title, sections: [.sections[] | {label, n: (.items | length)}]}'

拉指定日期日報

# YYYY-MM-DD,UTC 0 點為基準
curl -sH "User-Agent: $UA" "https://aihot.virxact.com/api/public/daily/2026-05-07"

列日報歸檔(discovery)

不知道有哪些日期可查時,先看歸檔:

# 最近 N 天日報索引(不含正文,只有日期 + 頭條標題)
curl -sH "User-Agent: $UA" "https://aihot.virxact.com/api/public/dailies?take=14" \
  | jq '.items[] | {date, leadTitle}'

拉全部(用戶明確說「全部 / 完整 / 所有 / 全量」時)

觸發關鍵詞:句子裡出現「全部」、「完整」、「所有」、「全量」、「包括老的」——用戶主動想看精選之外的次要條目(被精選篩掉但仍相關的內容)。沒有這些關鍵詞不要走 mode=all——精選已經覆蓋大部分用戶關心的事,全部池子量大但雜。

# 拉最近 24 小時全部 AI 動態(用戶問「看下今天全部的 AI 動態」)
since=$(date -u -v-24H +%Y-%m-%dT%H:%M:%SZ 2>/dev/null || date -u -d '24 hours ago' +%Y-%m-%dT%H:%M:%SZ)
curl -sH "User-Agent: $UA" "https://aihot.virxact.com/api/public/items?mode=all&since=$since&take=100"

按分類拉條目

5 個 category(items API 用英文 slug,daily API 看到的 section label 是中文):

items?category=daily.sections[].label
ai-models模型發佈/更新
ai-products產品發佈/更新
industry行業動態
paper論文研究
tip技巧與觀點

用戶問「公眾號最近發什麼」:items API 不含公眾號(mp_hot 信源單獨走前端 /mp 頁),Skill 暫時無法回答這類問題,可以提示用戶去 https://aihot.virxact.com/mp 看公眾號爆文頁。

# 例:拉最近 50 條 AI 論文(預設精選 + paper 類別)
curl -sH "User-Agent: $UA" "https://aihot.virxact.com/api/public/items?mode=selected&category=paper&take=50" \
  | jq '.items[] | {title, source, publishedAt, url}'

# 例:精選裡的模型發佈
curl -sH "User-Agent: $UA" "https://aihot.virxact.com/api/public/items?mode=selected&category=ai-models&take=20"

# 例外:用戶明確說「全部論文 / 所有模型發佈」才走 mode=all
curl -sH "User-Agent: $UA" "https://aihot.virxact.com/api/public/items?mode=all&category=paper&take=100"

按時間窗口拉條目(最近 N 天)

關鍵規則:用戶問「最近 X」(最近的模型發佈 / 最近 AI 論文 / 最近 OpenAI 等)時,需要帶 since 參數把窗口收窄到用戶實際意圖(說「最近 3 天」就 3d,「昨天」就 1d,「最近一週」就 7d)。

服務端兜底:items API 服務端預設 since=now-7d(硬上限,保護伺服器),所以即使 Skill 完全不帶 since 也只會返回最近 7 天的內容,不會拉到幾個月前的老條目。但仍建議顯式帶 since:① 用戶問「最近 3 天」時顯式 3d 比讓服務端預設 7d 更精確 ② 輸出元資訊可以寫人話級時間窗 ③ 跟用戶公開宣傳的「最長 7 天」對齊意圖清晰。

# 拉最近 7 天的精選模型發佈(用戶問「最近的模型發佈」)
since=$(date -u -v-7d +%Y-%m-%dT%H:%M:%SZ 2>/dev/null || date -u -d '7 days ago' +%Y-%m-%dT%H:%M:%SZ)
curl -sH "User-Agent: $UA" "https://aihot.virxact.com/api/public/items?mode=selected&category=ai-models&since=$since&take=100"

# 拉最近 3 天的精選動態(用戶明確說「最近 3 天」)
since=$(date -u -v-3d +%Y-%m-%dT%H:%M:%SZ 2>/dev/null || date -u -d '3 days ago' +%Y-%m-%dT%H:%M:%SZ)
curl -sH "User-Agent: $UA" "https://aihot.virxact.com/api/public/items?mode=selected&since=$since&take=100"

例外:用戶明確說「全量 / 所有 / 完整列表 / 包括老的」 → mode 切到 all,可以不帶 since;用戶問「看下精選」(看精選池而非時間窗)mode 保持 selected 也可以不帶 since。但只要句子裡有「最近 / 最新 / 這兩天 / 這週」,預設帶 since + mode=selected。

翻頁(cursor)

/api/public/items 響應裡有 nextCursor(opaque token),下次請求把它原樣塞進 cursor 參數即可。

# 第 1 頁
resp1=$(curl -sH "User-Agent: $UA" "https://aihot.virxact.com/api/public/items?mode=all&take=100")
echo "$resp1" | jq '.items | length'   # 100

# 第 2 頁
cursor=$(echo "$resp1" | jq -r '.nextCursor')
curl -sH "User-Agent: $UA" "https://aihot.virxact.com/api/public/items?mode=all&take=100&cursor=$cursor"

hasNext = false 或 nextCursor = null 時停止翻頁。cursor 是不透明 token,視作黑盒,不要嘗試解析、遞增、或跨端點複用。

關鍵詞搜索(「OpenAI 最近發的」 / 「Sora 相關」 / 「RAG 論文」)

API 直接支援 server-side 關鍵詞搜索 — q 參數在 title + 中文 title + 中文 summary 三列上 ILIKE 匹配,走 PostgreSQL pg_trgm GIN 索引(2-6ms)。不要再走「拉一批 + 用戶端 jq grep」模式 — 那只能看到前 100 條池子裡的命中,關鍵詞若在 100 條外完全找不到。

# 找 OpenAI 最近發的(覆蓋全池,不僅前 100)
curl -sH "User-Agent: $UA" "https://aihot.virxact.com/api/public/items?q=OpenAI&take=30"

# 找 Sora 相關的所有 AI 動態(任何包含 Sora 的標題或摘要)
curl -sH "User-Agent: $UA" "https://aihot.virxact.com/api/public/items?q=Sora"

# 找 RAG 論文(category 限定 + 關鍵詞)
curl -sH "User-Agent: $UA" "https://aihot.virxact.com/api/public/items?category=paper&q=RAG&take=30"

# 關鍵詞 + 時間窗(Anthropic 最近 3 天的精選)
SINCE=$(date -u -v-3d +%Y-%m-%dT%H:%M:%SZ 2>/dev/null || date -u -d '3 days ago' +%Y-%m-%dT%H:%M:%SZ)
curl -sH "User-Agent: $UA" "https://aihot.virxact.com/api/public/items?mode=selected&q=Anthropic&since=$SINCE"

q 約束:

  • 至少 2 個字元(單字元 GIN trigram 退化為全表掃,服務端會視作不搜索)
  • 最長 200 字(超出自動截斷)
  • 跟其它參數(mode/category/since/take/cursor)正交疊加,可以「按精選 + 論文 + 關鍵詞 + 7 天內」組合
  • 跟其它請求共享 600r/m 限流

返回數據型態

/api/public/daily 返回

{
  "date": "2026-05-07",
  "generatedAt": "2026-05-07T00:01:23.456Z",
  "windowStart": "2026-05-06T00:00:00.000Z",
  "windowEnd":   "2026-05-07T00:00:00.000Z",
  "lead": { "title": "...", "leadParagraph": "..." },
  "sections": [
    {
      "label": "模型發佈/更新",
      "items": [
        {
          "title": "...",
          "summary": "...",
          "sourceUrl": "https://...",
          "sourceName": "OpenAI Blog"
        }
      ]
    }
  ],
  "flashes": [
    { "title": "...", "sourceName": "...", "sourceUrl": "...", "publishedAt": "..." }
  ]
}

sections[].label 固定 5 個:「模型發佈/更新」 / 「產品發佈/更新」 / 「行業動態」 / 「論文研究」 / 「技巧與觀點」。lead 極少數日報為 null。

/api/public/dailies 返回

{
  "count": 14,
  "items": [
    { "date": "2026-05-07", "generatedAt": "...", "leadTitle": "..." }
  ]
}

/api/public/items 返回

{
  "count": 50,
  "hasNext": true,
  "nextCursor": "eyJhIjoxNzE0OTk1MjAwMDAwLCJpIjoiY205eHl6MTIzIn0",
  "items": [
    {
      "id": "cm9abc456def789ghi012jkl3",
      "title": "中文標題(normalize 過)",
      "title_en": "原英文標題(僅當與 title 不同時存在,否則 null)",
      "url": "https://...",
      "source": "OpenAI Blog",
      "publishedAt": "2026-05-07T15:30:00.000Z",
      "summary": "中文摘要(LLM 生成)",
      "category": "ai-models"
    }
  ]
}

欄位不變量:

  • 必有:id / title / url / source
  • 可空:title_en / summary / publishedAt / category
  • category 取值集:ai-models / ai-products / industry / paper / tip / null
  • publishedAt:ISO 8601 UTC(帶 Z)
  • id:cuid 字串(25 字元),不要假設是數字

給用戶的輸出格式

⚠️ 核心原則:這一節是直接展示給用戶的最終內容——必須 markdown 格式 + 排版好 + 普通人能看得懂的人話。用戶多數是非技術 AI 創業者 / 設計師 / 普通讀者,看到的應該是中文資訊簡報,不是 API 調試日誌。

所有「端點路徑 / mode=selected 這種 raw 參數 / 限流 / nginx 快取 / cursor / hasNext」等基礎設施細節都不能出現在用戶看到的輸出裡。人話級元數據(時間窗 / 條數 / 「按發佈時間倒序」)可以保留——判斷標準:用戶能直接看懂嗎?能 → 保留;不能 → 刪掉。

日報式輸出(用 daily / daily/{date} 端點時)

**AI HOT 日報 · 2026-05-07**

## 模型發佈/更新
1. **<title>** — <source>
   <summary 簡化版 50 字內>
   <url>

## 產品發佈/更新
2. ...

## 行業動態
3. ...

## 論文研究
4. ...

## 技巧與觀點
5. ...

## 快訊(如果 flashes 有內容)
- <flash.title> — <flash.source>(<flash.publishedAt 轉人話>)

編號貫穿全文(1, 2, 3 ... N),不在每個 ## 內重新計數——這樣用戶能一眼數到「今天 27 條」。

列表式輸出(用 items 端點時)

預設按 category 分組 + 全局編號——用戶對「模型/產品/行業/論文/技巧」五版塊結構已經形成預期(來自日報),混合 category 時這個結構最自然:

**AI HOT — 最近 30 條精選**

## 模型發佈/更新
1. **<title>** — <source>
   2 小時前
   <summary>
   <url>

## 產品發佈/更新
2. **<title>** — <source>
   ...

3. ...

## 行業動態
4. ...

只有 1 個 category 時(用戶明確說「AI 論文」/「模型發佈」等),用扁平編號列表:

**AI HOT — 最近一週 AI 論文**(2026-05-01 ~ 2026-05-08)

1. **<title>** — <source>
   <summary>
   <url>

2. ...

副標題/元資訊只寫人話

OK(用戶能直接懂的):

  • 「時間窗 2026-05-05 ~ 2026-05-07」
  • 「最近 3 天命中 OpenAI 關鍵詞的全部條目」
  • 「按發佈時間倒序」
  • 「共 50 條」
  • 「今天 5/8 日報北京時間 08:00 後才生成,先看 5/7 這期」

不 OK(基礎設施泄漏,堅決不寫):

  • ❌ mode=selected / category=paper / take=30 這種 raw 參數名
  • ❌ 端點路徑 /api/public/items?since=2026-04-30T18:39:31Z&take=50
  • ❌ 「限流 600 req/min」 / 「nginx 快取 60s」 / 「x-nginx-cache: HIT」
  • ❌ 「cursor」 / 「hasNext=true」 / 「需 cursor 翻頁或縮小 since 窗口」
  • ❌ 任何 HTTP 狀態碼 / cache 狀態 / 後端機制描述

資料源最多寫一句:「數據來自 aihot.virxact.com」,要麼乾脆不提(用戶在用 skill 時已經知道源頭)。

時間轉人話

publishedAt 是 ISO 8601 UTC,展示時必須轉成北京時間 + 用戶能掃讀的相對/絕對時間:

內部值展示給用戶
2026-05-08T01:48:00.000Z「今天上午 09:48」 / 「2 小時前」
2026-05-07T18:08:17.000Z「今天凌晨 02:08」 / 「10 小時前」
2026-05-06T16:43:00.000Z「5/7 00:43」 / 「昨天」

不要直接展示 2026-05-07T15:30:00.000Z 這種 ISO 字串——用戶看不懂。

title vs title_en

預設輸出 title(中文 normalize 過的)。title_en 只在以下場景才用:

  • 用戶明確要求英文版(「用英文給我看一下」)
  • title 為空(極少見)

不要兩個都展示。

常見錯誤處理

  • {"error":"No daily report available yet."}(HTTP 404):當天日報還沒生成(北京時間 08:00 之前)。建議給用戶:拉昨天日報 curl /api/public/daily/{昨天日期}
  • {"error":"Invalid date format..."}(HTTP 400):date 必須是 YYYY-MM-DD,UTC 基準
  • items 端點常見 400:
    • "invalid mode (must be 'selected' or 'all')"
    • "invalid category (must be one of: ai-models, ai-products, industry, paper, tip)"
    • "invalid since (must be ISO date, not in future)"
    • "invalid take (must be integer 1-100)"
  • HTTP 429(限流):單 IP 超 600 req/min。串行調用 + 翻頁加 200ms 間隔即可

不要做

  • 不要把「今天 AI 圈」、「過去 24 小時大新聞」、「最近 AI 圈有啥」等寬問題路由到 daily — 這些是滾動時間窗,daily 是 UTC 0 點切片(5/6-5/7 一整天)的固定一日成品,時間精度對不上。預設走 mode=selected + since=<語義窗>。僅當用戶在話裡明確說「日報」二字才走 daily
  • 不要在用戶沒說「全部 / 完整 / 所有 / 全量」時預設走 mode=all — 精選已經覆蓋大部分用戶關心的事,全部池子量大但雜含未精選次要條目。預設 mode=selected,只有用戶主動點單「全部」才切到 mode=all
  • 不要試圖猜測 / 編造內容 — 永遠以 API 返回為準
  • 不要把摘要(summary)當原文引用 — 摘要由 LLM 生成,引用需要回 url / sourceUrl 核對
  • 不要做高頻輪詢 — 日報每天 08:00 才更新一次,items 端點 5 分鐘服務端快取,用戶問相同問題時不需要重新調 API
  • 不要併發猛拉翻頁 — 串行 + 自然間隔
  • 不要嘗試解析 / 遞增 / 跨端點複用 cursor — 它是不透明 token,內部編碼格式不穩定,改了不通知
  • 公司維度 / 關鍵詞查詢用 server-side ?q=<詞>,不要走「拉一批 + 用戶端 jq grep」(那只能看到前 100 條池子,會漏)
  • 用戶問「最近 N 天 X」時顯式帶 since=<N天前>(意圖明確 + 元資訊能寫人話時間窗)。不帶 since 服務端預設 7d 兜底,所以不會拉到老條目,但用戶問「最近 3 天」時讓服務端預設 7d 會多帶 4 天的內容
  • 不要在用戶輸出裡暴露端點路徑 / raw 參數 / 限流 / 快取 TTL / cursor / hasNext 等基礎設施細節 — 這些是給開發者看的,用戶看不懂。詳見上方「給用戶的輸出格式 → 副標題/元資訊只寫人話」
  • 不要在壓縮 / 跨日 / 跨版塊合併輸出時丟失此節規定的展示格式 — 輸出一致性很重要,用戶習慣了五版塊 + 全局編號的模式

相關技能