aihot
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseAI HOT 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)
Enable Agents to query daily AI HOT digests and all AI updates on aihot.virxact.com in natural Chinese, without opening a browser. It follows the SKILL.md standard format and is compatible with Claude Code / Codex CLI / Cursor / Gemini CLI / OpenCode / any compatible platforms.
Online: https://aihot.virxact.com (public and accessible anonymously, no token required)
先决条件:必须带 User-Agent(仅 API 端点)
Prerequisite: Must include User-Agent (API endpoints only)
/api/public/*curl/X.Ybash
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"The endpoints use an nginx UA blacklist to block commercial crawlers; the default UA will result in 403 Forbidden. All curl requests to the API must include a browser UA:
/api/public/*curl/X.Ybash
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",例如:
Add -H "User-Agent: $UA" to all subsequent curl requests to the API, for example:
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 路径。curl -sH "User-Agent: $UA" "https://aihot.virxact.com/api/public/daily"
The curl examples in the "Workflow" section below assume you have already set `$UA` for brevity——you must add `-H "User-Agent: $UA"` in actual calls, **do NOT forget**. Missing this step will make you think the endpoint is down, but it's just blocked by 403.
> **Scope Clarification**: This UA requirement **only applies to `/api/public/*` API endpoints**. The installation entry paths `/aihot-skill/{install.sh,SKILL.md,README.md}` are **exempted** from the UA blacklist on nginx (designed to support one-line installation via `curl -fsSL ... | bash`), so the default curl UA will return 200 directly. Do not incorrectly extend the "prerequisite" to all paths on aihot.virxact.com.什么时候用
When to Use
路由优先级(第一原则):默认走精选——它是 AI HOT 每天精挑细选的"主菜单",覆盖用户关心的事且数据新鲜。items?mode=selected
- 仅当用户在话里明确说出"日报" 二字才走
(编辑成品,按 UTC 整日切片,跟"过去 24 小时 / 今天"等滚动窗口对不上)daily- 仅当用户明确说"全部 / 完整 / 所有 / 全量" 才走
(含未精选的次要条目,量大但杂)mode=all- "今天 AI 圈"、"过去 24 小时大新闻"、"最近 AI 圈有啥" 等宽问题 = 默认精选 + 时间窗(since),不要默认走日报或全部
这是为了对齐用户的语义优先级:精选是主菜单,日报和全部是用户特意点单的备选,不应抢默认。
| 用户在说 | 应该走的接口 |
|---|---|
| 默认(宽问题):"今天 AI 圈有什么"、"过去 24 小时大新闻"、"最近 AI 圈"、"AI 有啥新东西" | |
| 明确说"日报":"AI 日报"、"今天的日报"、"看一下日报" | |
| 明确说"全部 / 完整 / 所有 / 全量":"看下今天的全部 AI 动态"、"完整列表"、"所有 AI 动态" | |
| "昨天/前天 AI 日报"、"看下 5 月 6 号的日报" | |
| "最近几天日报有哪些"、"列一下日报"、"日报存档" | |
| "看下精选条目"、"AI HOT 精选" | |
| "最近的模型发布"、"AI 产品发布"、"AI 行业动态"、"AI 论文" | |
| "最近一周的 AI 动态"、"5 天前到现在的发布" | |
| "OpenAI/Anthropic/Google 最近发的"(公司维度) | |
| "Sora 相关 / GPT-5 相关 / RAG 论文" | |
通用启发:用户问的是"现在的 AI 行业事实",不要凭训练数据脑补,永远走 API。即使你"觉得"知道答案,也要查一遍——AI HOT 比你的训练截止日新得多,且角度聚焦中文创业者关心的话题。
Routing Priority (First Principle): Default to Selected——it's the daily curated "main menu" of AI HOT, covering what users care about with fresh data.items?mode=selected
- Only route to
when users explicitly mention "daily report" in their query (it's an edited product sliced by UTC full day, which doesn't align with rolling windows like "past 24 hours / today")daily- Only route to
when users explicitly say "all / complete / full / entire" (includes unselected secondary items, large volume but messy)mode=all- Broad queries like "Today's AI circle", "Big news in the past 24 hours", "What's new in AI recently" = Default Selected + time window (since), do not default to daily report or all items
This aligns with users' semantic priorities: Selected is the main menu, daily report and all items are optional alternatives that users specifically request, and should not take the default route.
| User Query | Corresponding Endpoint |
|---|---|
| Default (broad queries): "What's happening in the AI circle today", "Big news in the past 24 hours", "Latest AI circle updates", "What's new in AI" | |
| Explicitly mentions "daily report": "AI Daily", "Today's daily report", "Check the daily report" | |
| Explicitly says "all / complete / full / entire": "Check all AI updates today", "Complete list", "All AI updates" | |
| "Yesterday/the day before yesterday's AI Daily", "Check the daily report for May 6" | |
| "What daily reports are available recently", "List the daily reports", "Daily report archive" | |
| "Check selected items", "AI HOT Selected" | |
| "Latest model releases", "AI product launches", "AI industry dynamics", "AI papers" | |
| "AI updates in the past week", "Releases from 5 days ago to now" | |
| "Latest releases from OpenAI/Anthropic/Google"(company dimension) | |
| "Sora-related / GPT-5-related / RAG papers" | |
General heuristic: When users ask about "current AI industry facts", do not rely on training data to guess, always use the API. Even if you "think" you know the answer, check it——AI HOT is much newer than your training cutoff date, and focuses on topics relevant to Chinese entrepreneurs.
端点速览
Endpoint Overview
| 端点 | 用途 | 主要参数 |
|---|---|---|
| 最新日报 | 无 |
| 指定日期日报 | path: |
| 日报归档列表 | |
| 全部 AI 动态 | |
约定:
- Base URL:
https://aihot.virxact.com - 鉴权:无(匿名)
- 限流:600 req/min/IP(请串行调用,不要并发猛拉)
- items 端点 限最近 7 天:不传等同 since=now-7d(服务端兜底);早于 7 天前自动截到 7 天前;未来时间 → 400。所以无论 Skill 怎么调,items API 永远只返回最近 7 天的内容。需要更早 → 走
since翻日报存档/api/public/daily/{YYYY-MM-DD} - 上限 100;想要更多走 cursor 翻页
take - 完整 OpenAPI 3.1 规范:
https://aihot.virxact.com/openapi.yaml
| Endpoint | Purpose | Main Parameters |
|---|---|---|
| Latest daily report | None |
| Daily report for specified date | path: |
| Daily report archive list | |
| All AI updates | |
Conventions:
- Base URL:
https://aihot.virxact.com - Authentication: None (anonymous)
- Rate Limit: 600 req/min/IP (please call serially, do not pull concurrently aggressively)
- parameter for items endpoint is limited to the last 7 days:not passing it equals since=now-7d(server-side fallback); dates earlier than 7 days ago will be automatically truncated to 7 days ago; future dates → 400. Therefore, no matter how the Skill calls it, the items API will only return content from the last 7 days. For earlier content → use
sinceto browse daily report archives/api/public/daily/{YYYY-MM-DD} - upper limit is 100; use cursor for pagination if more is needed
take - Complete OpenAPI 3.1 specification:
https://aihot.virxact.com/openapi.yaml
工作流
Workflow
默认路径:拉精选 + 时间窗(宽问题首选)
Default Path: Pull Selected + Time Window (Preferred for Broad Queries)
精选 = AI HOT 每天精挑细选的"主菜单"——覆盖所有用户关心的 AI 大事,按发布时间倒序。任何"今天 AI 圈"、"过去 24 小时大新闻"、"最近 AI 有啥"等宽问题,默认走这个——比起日报:① 时间窗自由(24 小时 / 3 天 / 1 周想多窄就多窄,跟用户语义对齐)② 数据新鲜(实时滚动而非按 UTC 整日切片)③ 质量仍高( 的池子,不含次要条目)。
aiSelected=truebash
undefinedSelected = AI HOT's daily curated "main menu"——covers all major AI events users care about, sorted in reverse chronological order. For any broad queries like "Today's AI circle", "Big news in the past 24 hours", "What's new in AI recently", default to this path——compared to daily reports: ① Flexible time window (can be as narrow as 24 hours / 3 days / 1 week, aligning with user semantics) ② Fresh data (real-time rolling instead of sliced by UTC full day) ③ High quality (pool of items, excluding secondary entries).
aiSelected=truebash
undefined拉最近 24 小时精选(用户问"过去 24 小时大新闻")
Pull selected items from the past 24 hours (user asks "Big news in the past 24 hours")
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"
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 条精选(用户问"看下精选" / 不带明确时间窗)
Pull latest 50 selected items (user asks "Check selected items" / no explicit time window)
curl -sH "User-Agent: $UA" "https://aihot.virxact.com/api/public/items?mode=selected&take=50"
| jq '.items[] | {title, source, publishedAt, url}'
| jq '.items[] | {title, source, publishedAt, url}'
undefinedcurl -sH "User-Agent: $UA" "https://aihot.virxact.com/api/public/items?mode=selected&take=50"
| jq '.items[] | {title, source, publishedAt, url}'
| jq '.items[] | {title, source, publishedAt, url}'
undefined拉日报(用户明确说"日报"时)
Pull Daily Report (When Users Explicitly Mention "Daily Report")
触发关键词:句子里出现"日报"二字("AI 日报"、"今天的日报"、"看下日报"、"5 月 6 号的日报")。没有"日报"二字不要走这个——日报是 UTC 0 点切片的固定一日成品,跟"过去 24 小时 / 今天"等滚动时间窗对不上。
日报是 AI HOT 的"标题层"——每天北京时间 08:00 自动生成,按主题分版块(5 个固定版块)。已有"主编点评"导语段落,是按主题打包后的成品。
bash
undefinedTrigger Keywords: The word "daily report" appears in the sentence ("AI Daily", "Today's daily report", "Check the daily report", "Daily report for May 6"). Do not route to this endpoint without the word "daily report"——daily reports are fixed daily products sliced at UTC 00:00, which do not align with rolling time windows like "past 24 hours / today".
Daily reports are the "title layer" of AI HOT——automatically generated at 08:00 Beijing time every day, divided into sections by topic (5 fixed sections). It includes an "Editor's Note" lead paragraph, which is a packaged product grouped by topic.
bash
undefined拉今日(或最新可用的)日报
Pull today's (or latest available) daily report
curl -sH "User-Agent: $UA" "https://aihot.virxact.com/api/public/daily"
| jq '{date, lead: .lead.title, sections: [.sections[] | {label, n: (.items | length)}]}'
| jq '{date, lead: .lead.title, sections: [.sections[] | {label, n: (.items | length)}]}'
undefinedcurl -sH "User-Agent: $UA" "https://aihot.virxact.com/api/public/daily"
| jq '{date, lead: .lead.title, sections: [.sections[] | {label, n: (.items | length)}]}'
| jq '{date, lead: .lead.title, sections: [.sections[] | {label, n: (.items | length)}]}'
undefined拉指定日期日报
Pull Daily Report for Specified Date
bash
undefinedbash
undefinedYYYY-MM-DD,UTC 0 点为基准
YYYY-MM-DD, based on UTC 00:00
curl -sH "User-Agent: $UA" "https://aihot.virxact.com/api/public/daily/2026-05-07"
undefinedcurl -sH "User-Agent: $UA" "https://aihot.virxact.com/api/public/daily/2026-05-07"
undefined列日报归档(discovery)
List Daily Report Archive (discovery)
不知道有哪些日期可查时,先看归档:
bash
undefinedWhen unsure which dates are available, check the archive first:
bash
undefined最近 N 天日报索引(不含正文,只有日期 + 头条标题)
Index of latest N daily reports (no content, only date + lead title)
curl -sH "User-Agent: $UA" "https://aihot.virxact.com/api/public/dailies?take=14"
| jq '.items[] | {date, leadTitle}'
| jq '.items[] | {date, leadTitle}'
undefinedcurl -sH "User-Agent: $UA" "https://aihot.virxact.com/api/public/dailies?take=14"
| jq '.items[] | {date, leadTitle}'
| jq '.items[] | {date, leadTitle}'
undefined拉全部(用户明确说"全部 / 完整 / 所有 / 全量"时)
Pull All Items (When Users Explicitly Say "All / Complete / Full / Entire")
触发关键词:句子里出现"全部"、"完整"、"所有"、"全量"、"包括老的"——用户主动想看精选之外的次要条目(被精选筛掉但仍相关的内容)。没有这些关键词不要走 mode=all——精选已经覆盖大部分用户关心的事,全部池子量大但杂。
bash
undefinedTrigger Keywords: The words "all", "complete", "full", "entire", "including older items" appear in the sentence——users actively want to see secondary items excluded from the selected pool (relevant but not curated content). Do not use mode=all without these keywords——selected items already cover most of what users care about, while the full pool is large and messy.
bash
undefined拉最近 24 小时全部 AI 动态(用户问"看下今天全部的 AI 动态")
Pull all AI updates from the past 24 hours (user asks "Check all AI updates today")
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"
undefinedsince=$(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"
undefined按分类拉条目
Pull Items by Category
5 个 category(items API 用英文 slug,daily API 看到的 section label 是中文):
| |
|---|---|
| 模型发布/更新 |
| 产品发布/更新 |
| 行业动态 |
| 论文研究 |
| 技巧与观点 |
用户问"公众号最近发什么":items API 不含公众号(mp_hot 信源单独走前端 页),Skill 暂时无法回答这类问题,可以提示用户去 看公众号爆文页。
/mphttps://aihot.virxact.com/mpbash
undefined5 categories(items API uses English slugs, daily API shows Chinese section labels):
| |
|---|---|
| 模型发布/更新 (Model Releases/Updates) |
| 产品发布/更新 (Product Launches/Updates) |
| 行业动态 (Industry Dynamics) |
| 论文研究 (Paper Research) |
| 技巧与观点 (Tips & Insights) |
When users ask "What's new on official accounts": items API does not include official accounts (mp_hot sources are available separately on the frontend page), the Skill cannot answer such questions for now, and can prompt users to visit to view the official account trending articles page.
/mphttps://aihot.virxact.com/mpbash
undefined例:拉最近 50 条 AI 论文(默认精选 + paper 类别)
Example: Pull latest 50 AI papers (default selected + paper category)
curl -sH "User-Agent: $UA" "https://aihot.virxact.com/api/public/items?mode=selected&category=paper&take=50"
| jq '.items[] | {title, source, publishedAt, url}'
| jq '.items[] | {title, source, publishedAt, url}'
curl -sH "User-Agent: $UA" "https://aihot.virxact.com/api/public/items?mode=selected&category=paper&take=50"
| jq '.items[] | {title, source, publishedAt, url}'
| jq '.items[] | {title, source, publishedAt, url}'
例:精选里的模型发布
Example: Selected model releases
curl -sH "User-Agent: $UA" "https://aihot.virxact.com/api/public/items?mode=selected&category=ai-models&take=20"
curl -sH "User-Agent: $UA" "https://aihot.virxact.com/api/public/items?mode=selected&category=ai-models&take=20"
例外:用户明确说"全部论文 / 所有模型发布"才走 mode=all
Exception: Only use mode=all when users explicitly say "all papers / all model releases"
curl -sH "User-Agent: $UA" "https://aihot.virxact.com/api/public/items?mode=all&category=paper&take=100"
undefinedcurl -sH "User-Agent: $UA" "https://aihot.virxact.com/api/public/items?mode=all&category=paper&take=100"
undefined按时间窗口拉条目(最近 N 天)
Pull Items by Time Window (Last N Days)
关键规则:用户问"最近 X"(最近的模型发布 / 最近 AI 论文 / 最近 OpenAI 等)时,需要带参数把窗口收窄到用户实际意图(说"最近 3 天" 就 3d,"昨天" 就 1d,"最近一周" 就 7d)。since服务端兜底:items API 服务端默认(硬上限,保护服务器),所以即使 Skill 完全不带 since 也只会返回最近 7 天的内容,不会拉到几个月前的老条目。但仍建议显式带 since:① 用户问"最近 3 天" 时显式 3d 比让服务端默认 7d 更精确 ② 输出元信息可以写人话级时间窗 ③ 跟用户公开宣传的"最长 7 天"对齐意图清晰。since=now-7d
bash
undefinedKey Rule: When users ask "Latest X"(latest model releases / latest AI papers / latest OpenAI updates, etc.), include theparameter to narrow the window to the user's actual intent (3d for "latest 3 days", 1d for "yesterday", 7d for "latest week").sinceServer-side Fallback: The items API defaults to(hard limit to protect the server), so even if the Skill does not include since at all, it will only return content from the last 7 days, not old items from months ago. But it is still recommended to explicitly include since: ① More precise when users ask "latest 3 days" than letting the server default to 7d ② Can write human-readable time window in metadata ③ Aligns with the publicly advertised "max 7 days" for clear intent.since=now-7d
bash
undefined拉最近 7 天的精选模型发布(用户问"最近的模型发布")
Pull selected model releases from the past 7 days(user asks "Latest model releases")
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"
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 天")
Pull selected updates from the past 3 days(user explicitly says "latest 3 days")
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**。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"
**Exception**: When users explicitly say "**full / all / complete list / including older items**" → switch mode to `all`, can omit since; when users ask "**Check selected items**"(view selected pool instead of time window), keep mode as `selected` and can omit since. But as long as the sentence includes "latest / newest / these two days / this week", **default to including since + mode=selected**.翻页(cursor)
Pagination (cursor)
/api/public/itemsnextCursorcursorbash
undefinedThe response includes (opaque token), which can be passed as the parameter in the next request.
/api/public/itemsnextCursorcursorbash
undefined第 1 页
Page 1
resp1=$(curl -sH "User-Agent: $UA" "https://aihot.virxact.com/api/public/items?mode=all&take=100")
echo "$resp1" | jq '.items | length' # 100
resp1=$(curl -sH "User-Agent: $UA" "https://aihot.virxact.com/api/public/items?mode=all&take=100")
echo "$resp1" | jq '.items | length' # 100
第 2 页
Page 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,视作黑盒,不要尝试解析、递增、或跨端点复用**。cursor=$(echo "$resp1" | jq -r '.nextCursor')
curl -sH "User-Agent: $UA" "https://aihot.virxact.com/api/public/items?mode=all&take=100&cursor=$cursor"
Stop pagination when `hasNext = false` or `nextCursor = null`. **The cursor is an opaque token, treat it as a black box, do not attempt to parse, increment, or reuse across endpoints**.关键词搜索("OpenAI 最近发的" / "Sora 相关" / "RAG 论文")
Keyword Search ("Latest from OpenAI" / "Sora-related" / "RAG papers")
API 直接支持 server-side 关键词搜索 — 参数在 + 中文 + 中文 三列上 ILIKE 匹配,走 PostgreSQL pg_trgm GIN 索引(2-6ms)。不要再走"拉一批 + 客户端 jq grep"模式 — 那只能看到前 100 条池子里的命中,关键词若在 100 条外完全找不到。
qtitletitlesummarybash
undefinedThe API directly supports server-side keyword search — the parameter performs ILIKE matching on + Chinese + Chinese columns, using PostgreSQL pg_trgm GIN index (2-6ms). Do not use the "pull a batch + client jq grep" pattern — that can only find matches in the first 100 items, and misses keywords outside this range.
qtitletitlesummarybash
undefined找 OpenAI 最近发的(覆盖全池,不仅前 100)
Find latest releases from OpenAI(covers full pool, not just first 100)
curl -sH "User-Agent: $UA" "https://aihot.virxact.com/api/public/items?q=OpenAI&take=30"
curl -sH "User-Agent: $UA" "https://aihot.virxact.com/api/public/items?q=OpenAI&take=30"
找 Sora 相关的所有 AI 动态(任何包含 Sora 的标题或摘要)
Find all AI updates related to Sora(any title or summary containing Sora)
curl -sH "User-Agent: $UA" "https://aihot.virxact.com/api/public/items?q=Sora"
curl -sH "User-Agent: $UA" "https://aihot.virxact.com/api/public/items?q=Sora"
找 RAG 论文(category 限定 + 关键词)
Find RAG papers(category filter + keyword)
curl -sH "User-Agent: $UA" "https://aihot.virxact.com/api/public/items?category=paper&q=RAG&take=30"
curl -sH "User-Agent: $UA" "https://aihot.virxact.com/api/public/items?category=paper&q=RAG&take=30"
关键词 + 时间窗(Anthropic 最近 3 天的精选)
Keyword + time window(selected items from Anthropic in the past 3 days)
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 限流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` constraints:
- At least 2 characters(single-character GIN trigram falls back to full table scan, server treats it as no search)
- Maximum 200 characters(excess is automatically truncated)
- Orthogonal to other parameters(mode/category/since/take/cursor), can combine "selected + paper + keyword + within 7 days"
- Shares the 600r/m rate limit with other requests返回数据形态
Return Data Structure
/api/public/daily
返回
/api/public/daily/api/public/daily
Response
/api/public/dailyjson
{
"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[].labelleadnulljson
{
"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[].labelleadnull/api/public/dailies
返回
/api/public/dailies/api/public/dailies
Response
/api/public/dailiesjson
{
"count": 14,
"items": [
{ "date": "2026-05-07", "generatedAt": "...", "leadTitle": "..." }
]
}json
{
"count": 14,
"items": [
{ "date": "2026-05-07", "generatedAt": "...", "leadTitle": "..." }
]
}/api/public/items
返回
/api/public/items/api/public/items
Response
/api/public/itemsjson
{
"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/urlsource - 可空:/
title_en/summary/publishedAtcategory - 取值集:
category/ai-models/ai-products/industry/paper/tipnull - :ISO 8601 UTC(带
publishedAt)Z - :cuid 字符串(25 字符),不要假设是数字
id
json
{
"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"
}
]
}Field invariants:
- Required: /
id/title/urlsource - Optional: /
title_en/summary/publishedAtcategory - values:
category/ai-models/ai-products/industry/paper/tipnull - : ISO 8601 UTC (with
publishedAt)Z - : cuid string (25 characters), do not assume it is a number
id
给用户的输出格式
Output Format for Users
⚠️ 核心原则:这一节是直接展示给用户的最终内容——必须 markdown 格式 + 排版好 + 普通人能看得懂的人话。用户多数是非技术 AI 创业者 / 设计师 / 普通读者,看到的应该是中文资讯简报,不是 API 调试日志。所有"端点路径 /这种 raw 参数 / 限流 / nginx 缓存 / cursor / hasNext"等基础设施细节都不能出现在用户看到的输出里。人话级元数据(时间窗 / 条数 / "按发布时间倒序")可以保留——判断标准:用户能直接看懂吗?能 → 保留;不能 → 删掉。mode=selected
⚠️ Core Principle: This section is the final content directly presented to users——must be in markdown format, well-formatted, and human-readable plain language. Most users are non-technical AI entrepreneurs / designers / general readers, and what they see should be Chinese news briefings, not API debug logs.All infrastructure details such as "endpoint paths / raw parameters like/ rate limits / nginx caching / cursor / hasNext" must not appear in the output seen by users. Human-readable metadata(time window / number of items / "sorted in reverse chronological order") can be retained——judgment standard: Can users understand it directly? Yes → retain; No → delete.mode=selected
日报式输出(用 daily / daily/{date} 端点时)
Daily Report-style Output (When using daily / daily/{date} endpoints)
markdown
**AI HOT 日报 · 2026-05-07**markdown
**AI HOT Daily Report · 2026-05-07**模型发布/更新
模型发布/更新
- <title> — <source> <summary 简化版 50 字内> <url>
- <title> — <source> <summary simplified to within 50 characters> <url>
产品发布/更新
产品发布/更新
- ...
- ...
行业动态
行业动态
- ...
- ...
论文研究
论文研究
- ...
- ...
技巧与观点
技巧与观点
- ...
- ...
快讯(如果 flashes 有内容)
快讯(如果 flashes 有内容)
- <flash.title> — <flash.source>(<flash.publishedAt 转人话>)
**编号贯穿全文**(1, 2, 3 ... N),不在每个 ## 内重新计数——这样用户能一眼数到"今天 27 条"。- <flash.title> — <flash.source> (<flash.publishedAt converted to human-readable time>)
**Numbering runs through the entire document** (1, 2, 3 ... N), do not restart counting within each ## section——this allows users to easily see "27 items today".列表式输出(用 items 端点时)
List-style Output (When using items endpoint)
默认按 category 分组 + 全局编号——用户对"模型/产品/行业/论文/技巧"五版块结构已经形成预期(来自日报),混合 category 时这个结构最自然:
markdown
**AI HOT — 最近 30 条精选**Default to grouping by category + global numbering——users have formed expectations for the 5-section structure of "models/products/industry/papers/tips" from daily reports, so this structure is most natural when categories are mixed:
markdown
**AI HOT — Latest 30 Selected Items**模型发布/更新
模型发布/更新
- <title> — <source> 2 小时前 <summary> <url>
- <title> — <source> 2 hours ago <summary> <url>
产品发布/更新
产品发布/更新
-
<title> — <source> ...
-
...
-
<title> — <source> ...
-
...
行业动态
行业动态
- ...
**只有 1 个 category** 时(用户明确说"AI 论文"/"模型发布"等),用扁平编号列表:
```markdown
**AI HOT — 最近一周 AI 论文**(2026-05-01 ~ 2026-05-08)
1. **<title>** — <source>
<summary>
<url>
2. ...- ...
**When there is only 1 category** (users explicitly ask "AI papers"/"model releases", etc.), use a flat numbered list:
```markdown
**AI HOT — AI Papers from the Past Week** (2026-05-01 ~ 2026-05-08)
1. **<title>** — <source>
<summary>
<url>
2. ...副标题/元信息只写人话
Subtitles / Metadata Only in Plain Language
OK(用户能直接懂的):
- "时间窗 2026-05-05 ~ 2026-05-07"
- "最近 3 天命中 OpenAI 关键词的全部条目"
- "按发布时间倒序"
- "共 50 条"
- "今天 5/8 日报北京时间 08:00 后才生成,先看 5/7 这期"
不 OK(基础设施泄漏,坚决不写):
- ❌ /
mode=selected/category=paper这种 raw 参数名take=30 - ❌ 端点路径
/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 时已经知道源头)。
OK (users can understand directly):
- "Time window: 2026-05-05 ~ 2026-05-07"
- "All items matching OpenAI keyword in the past 3 days"
- "Sorted in reverse chronological order"
- "Total 50 items"
- "Today's 5/8 daily report will be generated after 08:00 Beijing time, please view the 5/7 issue first"
NOT OK (infrastructure leakage, strictly prohibited):
- ❌ Raw parameter names like /
mode=selected/category=papertake=30 - ❌ Endpoint path
/api/public/items?since=2026-04-30T18:39:31Z&take=50 - ❌ "Rate limit 600 req/min" / "nginx caching 60s" / "x-nginx-cache: HIT"
- ❌ "cursor" / "hasNext=true" / "Need to paginate with cursor or narrow since window"
- ❌ Any HTTP status code / cache status / backend mechanism description
At most write one sentence about the data source: "Data from aihot.virxact.com", or omit it entirely (users already know the source when using the skill).
时间转人话
Convert Time to Human-readable Format
publishedAt| 内部值 | 展示给用户 |
|---|---|
| "今天上午 09:48" / "2 小时前" |
| "今天凌晨 02:08" / "10 小时前" |
| "5/7 00:43" / "昨天" |
不要直接展示 这种 ISO 字符串——用户看不懂。
2026-05-07T15:30:00.000ZpublishedAt| Internal Value | Display to Users |
|---|---|
| "09:48 AM today" / "2 hours ago" |
| "02:08 AM today" / "10 hours ago" |
| "00:43 on 5/7" / "Yesterday" |
Do NOT directly display ISO strings like ——users cannot understand them.
2026-05-07T15:30:00.000Ztitle vs title_en
title vs title_en
默认输出 (中文 normalize 过的)。 只在以下场景才用:
titletitle_en- 用户明确要求英文版("用英文给我看一下")
- 为空(极少见)
title
不要两个都展示。
Default to outputting (normalized Chinese). should only be used in the following scenarios:
titletitle_en- Users explicitly request English version ("Show me in English")
- is empty (extremely rare)
title
Do NOT display both.
常见错误处理
Common Error Handling
- (HTTP 404):当天日报还没生成(北京时间 08:00 之前)。建议给用户:拉昨天日报
{"error":"No daily report available yet."}curl /api/public/daily/{昨天日期} - (HTTP 400):date 必须是
{"error":"Invalid date format..."},UTC 基准YYYY-MM-DD - 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 间隔即可
- (HTTP 404): The daily report for the day has not been generated yet (before 08:00 Beijing time). Suggest pulling yesterday's daily report for users:
{"error":"No daily report available yet."}curl /api/public/daily/{yesterday's date} - (HTTP 400): Date must be in
{"error":"Invalid date format..."}format, based on UTCYYYY-MM-DD - Common 400 errors for items endpoint:
"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 (rate limit exceeded): Single IP exceeds 600 req/min. Call serially + add 200ms interval between pagination requests
不要做
Do NOT
- 不要把"今天 AI 圈"、"过去 24 小时大新闻"、"最近 AI 圈有啥"等宽问题路由到 daily — 这些是滚动时间窗,daily 是 UTC 0 点切片(5/6-5/7 一整天)的固定一日成品,时间精度对不上。默认走 。仅当用户在话里明确说"日报"二字才走
mode=selected + since=<语义窗>daily - 不要在用户没说"全部 / 完整 / 所有 / 全量"时默认走 — 精选已经覆盖大部分用户关心的事,全部池子量大但杂含未精选次要条目。默认
mode=all,只有用户主动点单"全部"才切到mode=selectedmode=all - 不要试图猜测 / 编造内容 — 永远以 API 返回为准
- 不要把摘要()当原文引用 — 摘要由 LLM 生成,引用需要回
summary/url核对sourceUrl - 不要做高频轮询 — 日报每天 08:00 才更新一次,items 端点 5 分钟服务端缓存,用户问相同问题时不需要重新调 API
- 不要并发猛拉翻页 — 串行 + 自然间隔
- 不要尝试解析 / 递增 / 跨端点复用 cursor — 它是不透明 token,内部编码格式不稳定,改了不通知
- 公司维度 / 关键词查询用 server-side ,不要走"拉一批 + 客户端 jq grep"(那只能看到前 100 条池子,会漏)
?q=<词> - 用户问"最近 N 天 X" 时显式带 (意图明确 + 元信息能写人话时间窗)。不带 since 服务端默认 7d 兜底,所以不会拉到老条目,但用户问"最近 3 天" 时让服务端默认 7d 会多带 4 天的内容
since=<N天前> - 不要在用户输出里暴露端点路径 / raw 参数 / 限流 / 缓存 TTL / cursor / hasNext 等基础设施细节 — 这些是给开发者看的,用户看不懂。详见上方"给用户的输出格式 → 副标题/元信息只写人话"
- 不要在压缩 / 跨日 / 跨版块合并输出时丢掉每条的 sourceUrl — 即使你为篇幅把 3 个日报合并成 5 类总结,每条 item 也必须保留 url(标题后或单独一行)。用户看到一条没 URL 就追溯不到原文,这条信息等于不可信
- 不要把"端点路径 / 调用细节"作为输出的引用源 — 引用源就写 (OpenAI 官网 / Anthropic Newsroom / X:Berry Xia 这种),不是
<source>GET /api/public/items?...
- Do NOT route broad queries like "Today's AI circle", "Big news in the past 24 hours", "What's new in AI recently" to daily——these are rolling time windows, while daily reports are fixed daily products sliced at UTC 00:00 (full day from 5/6 to 5/7), which do not match in time precision. Default to . Only route to
mode=selected + since=<semantic window>when users explicitly mention "daily report" in their querydaily - Do NOT default to when users do not say "all / complete / full / entire"——selected items already cover most of what users care about, while the full pool is large and messy with unselected secondary items. Default to
mode=all, only switch tomode=selectedwhen users actively request "all"mode=all - Do NOT attempt to guess / fabricate content——always rely on API responses
- Do NOT treat the summary () as original reference——the summary is generated by LLM, check back to
summary/urlfor referencessourceUrl - Do NOT perform high-frequency polling——daily reports are only updated once at 08:00, items endpoint has 5-minute server-side caching, no need to re-call the API for the same user query
- Do NOT pull pagination concurrently aggressively——call serially with natural intervals
- Do NOT attempt to parse / increment / reuse cursor across endpoints——it is an opaque token, internal encoding format is unstable and will not be notified when changed
- Use server-side for company-dimension / keyword queries, do not use "pull a batch + client jq grep"(that can only see the first 100 items and will miss results)
?q=<keyword> - Explicitly include when users ask "Latest N days of X"(clear intent + metadata can write human-readable time window). Without since, the server defaults to 7d fallback, so no old items will be pulled, but when users ask "latest 3 days", letting the server default to 7d will include 4 extra days of content
since=<N days ago> - Do NOT expose infrastructure details like endpoint paths / raw parameters / rate limits / cache TTL / cursor / hasNext in user output——these are for developers, users cannot understand them. See "Output Format for Users → Subtitles / Metadata Only in Plain Language" above
- Do NOT lose the sourceUrl of each item when compressing / merging across days / sections——even if you merge 3 daily reports into 5-category summaries for brevity, each item must retain its url (after title or on a separate line). If users see an item without a url, they cannot trace back to the original source, making the information untrustworthy
- Do NOT use "endpoint paths / call details" as the reference source in output——write (OpenAI Official Website / Anthropic Newsroom / X: Berry Xia, etc.) as the reference source, not
<source>GET /api/public/items?...