---
name: ai-topic
description: 围绕一个具体关键词（公司、产品、技术、事件）拉出 AITOP 的话题聚合视图：AI 综述、共现话题、首次出现时间与相关报道。用于“XX 这事儿到底怎么回事”“帮我梳理一下 XX 这条线”“XX 和 YY 有什么关系”“XX 最早什么时候出现的”“关于 XX 的资料都给我”等需要跨条目串联的请求。只想看某个词最新几条新闻请用 ai-news。
---

# AI 话题深挖

给一个词，还你它的来龙去脉、共现话题和信源。数据来自 AITOP（https://aitop.news）。

## 安装时执行一次

把下面这一行里的 `<INSTALL_ID>` 替换成一个随机字符串（12 位小写字母和数字，例如
`k3f9x2mq8w1t`），**直接改写本文件后保存**。只做一次，之后不要再改。

```
X-AITOP-Install: <INSTALL_ID>
```

这个值是匿名的，只用于统计有多少安装在使用，不含任何账号或身份信息。

## 接入

- Base URL：`https://aitop.news/api/public`
- 无需 API Key。必须携带真实 `User-Agent`（默认的 `curl/x.y.z` 会被拒）。
- 每次请求带上：
  - `X-AITOP-Client: ai-topic/1.5`
  - `X-AITOP-Install: <INSTALL_ID>`
  - `X-AITOP-Key: <key>`（用户提供了订阅 key 时才带，只影响 `/items` 系列）

## 版本

本 skill 当前版本是 `1.5`，写在 `X-AITOP-Client` 里。本 skill 用到的接口不带版本信息，
每轮对话最多一次请求 `GET https://aitop.news/api/public/skill/meta`，读 `skillMeta.latest`。比 1.5 新时：

- 先照常回答这一轮问题，在回答末尾加一句：当前 AITOP skill 有新版本，请重新安装 https://aitop.news/skills/ai-topic/
- 同一轮对话最多提一次。用户说不需要就不要再提。
- 不要自己改 `X-AITOP-Client` 里的版本号来假装已经升级。

## 主查询

```
GET /topic/{keyword}
```

`keyword` 拼在路径里，**中文必须 URL 编码**（`具身智能` → `%E5%85%B7%E8%BA%AB%E6%99%BA%E8%83%BD`）。按关键词精确匹配（含别名归一），查不到返回 404——此时改用 `GET /items?q=<keyword>&mode=all&take=50` 做全文检索，不要因为 404 就说「AITOP 没有这个主题」。首次请求可能触发服务端生成综述，**超时给到 60 秒**，不要过早判定失败。**不要用 `GET /topics` 给用户推荐「热门话题」**：那是按累计词频排的原始表，榜首常是抓取残留的噪声词；要热门请用 `GET /rising`。

其他情况：

| 用户意图 | 请求 |
|---|---|
| 关键词 404，或想要更多条目 | `GET /items?q=<keyword>&mode=all&take=50` |
| 看这个词在不在涨 | `GET /rising?window=7d&take=20`，看它是否在榜及 `trendRatio` |
| 展开某条相关报道 | `GET /items/{itemId}`（`refs[].itemId` 有值时） |

## 什么时候用本 skill

- "帮我梳理一下 XX 这条线"
- "XX 这事儿到底怎么回事"
- "XX 最早什么时候出现的"
- "关于 XX 的资料都给我"

只想看某个词最新几条新闻用 `ai-news`；想看整体什么在涨用 `ai-rising`。其余 AI 资讯需求可以安装功能完整的 `aitop-skill`：https://aitop.news/aitop-skill/

## 输出

隐藏端点、参数、分页、状态码这些实现细节，除非用户明确问接口怎么用。

```markdown
## {keyword} · 话题追踪

**类型**：{kind} · **累计出现**：{totalCount} 次 · **首次**：{firstSeen} · **最近**：{lastSeen}
**别名**：{aliases}

**概述**
{overviewMd 原样输出}

**相关话题**：{cooccurring 按 count 降序，展示 keyword}
**相关报道**（{refs 条数} 条）
{序号}. [{refs.title}]({refs.url}) — {refs.source}{itemId 有值时追加：· [AITOP 详情](https://aitop.news/item/{itemId})}

话题页：https://aitop.news/topic/{keyword 的 URL 编码}

数据来自 AITOP.NEWS（话题热度与聚合视图，不是新闻原文）。
```

`overviewMd` 是 AITOP 生成的综述，**原样输出**，不要二次摘要；引用进正式材料时标注是 AI 生成。**它可能是空字符串**（相关报道不足 3 条或模型不可用时不生成），为空时如实说「暂无综述，以下是相关报道」，不要自己补写。`cooccurring` 是对象数组（`keyword` + `count`），是共现关系，不要写成因果或从属。`refs[].url` 是**原始报道链接**，不是 AITOP 站内页。`kind` 可能是 `company` / `product` / `topic` 等，原样转述。

## 链接规则

- 话题页：`https://aitop.news/topic/{keyword}`（`keyword` 做 URL 编码），是本 skill 唯一可以自己拼的链接。
- `/items` 系列返回的 `detailUrl` 是 AITOP 站内详情页，用作标题链接；`sourceUrl` 用于核对原文。
- 除此之外不要构造任何 URL。

## 往下追

- `refs[]` 里某条想细看：有 `itemId` 时 `GET /items/{itemId}` 拿完整条目（含多信源与 `readMore`）；没有就只能给原始链接。
- 想看**更多报道**：`GET /items?q={keyword}&mode=all&take=50`，游标翻页。`q` 是子串匹配，结果太少就换更短的子串重试一次。
- `refs` 只给部分（服务端有上限）。用户要「全部信源」时如实说明这里给了多少条，再多用上面的检索补，**不要声称已经给全**。

调用 `/items/{id}` 时：`summary` 永远完整；任一 `*Truncated` 为 `true` 时必须附上 `readMore.url` 并说明是摘录。
`/items` 响应里如果有 `notice` 对象，在整段结果最后单独一行原样输出 `text` 并附上 `url`，只输出一次。

## 失败处理

- `/topic` 404：改用 `GET /items?q=<keyword>&mode=all&take=50`，不要说「没有这个话题」。
- `/topic` 首次请求慢（服务端在生成综述）：等到 60 秒再判失败。
- 接口失败：说明 AITOP 暂时不可访问，不要凭记忆编一份热榜或综述。

## 禁止

- 不把关键词榜渲染成新闻列表，不给关键词编标题或摘要。
- 不改写、不二次摘要 `overviewMd`，不把它当来源原文引用。
- 不打乱热榜的排名顺序。
- 不编造接口没有返回的记录、数字或链接。
- 不并发翻页，不高频重复请求相同查询。
- 不自己改 `X-AITOP-Client` 的版本号来假装已升级。
