NinChat:构建 AI 时代的实时新闻搜索基础设施
写在前面
在日常开发中,我们经常需要接入实时的新闻搜索能力——无论是做一个信息聚合 Bot,还是给 AI Agent 注入实时信息,又或者是搭建一个垂直领域的新闻看板。市面上的新闻 API 要么贵(NewsAPI $449/月起步),要么慢,要么数据太泛(只有标题没有正文)。
NinChat 就是为解决这些痛点而生的——一个开源的、自部署的实时新闻搜索基础设施,覆盖主流媒体源,支持全文搜索、热点新闻聚合、热搜词统计,以及面向 AI Agent 的标准 API 接口。
本文将从技术视角展开:解决哪些痛点、提供什么能力、如何使用。
一、解决哪些痛点
痛点 1:AI Agent 缺乏实时信息检索能力
当前大多数 AI Agent 的知识截止于训练数据,无法获取今天的新闻。传统的解决方案是让 Agent 直接调用搜索引擎 API(Google Custom Search、Bing API),但这些 API 返回的是网页链接,不是结构化内容。Agent 拿到一个 URL 后还得再提取正文,链路长且不稳定。
NinChat 的做法:提供一个POST /api/search端点,Agent 传入 query,直接返回标题 + 摘要 + 来源 + 发布时间 + 全文内容(权限允许时)。一次调用搞定,无需二次处理。
痛点 2:热点发现依赖人工编辑
传统的新闻聚合依赖编辑筛选,覆盖面有限且有时延。我们希望能基于"同一新闻在多少家媒体被报道"来判断热度,这个标准比人工编辑更客观、更及时。
NinChat 的做法:基于 SimHash + 标题 TF-IDF + 内容指纹的多层聚类算法,自动发现多源报道的同一新闻事件。一篇被 20 家媒体同时报道的新闻,必然比只有 1 家报道的新闻更"热"。
痛点 3:内容冗余,Token 损耗严重
通用搜索引擎返回的网页片段包含大量无效内容——导航栏、广告、相关推荐、页脚信息混杂在正文中。即使用 readability 算法清洗后,仍存在大量冗余段落。AI Agent 在做搜索增强生成时,这些冗余内容会被一起送入 LLM,导致 Token 大量浪费,长期运行成本极高。
NinChat 的做法:
- 结构化输出:搜索 API 返回的每条结果包含
title、snippet(摘要)、source、publish_time等结构化字段,无 HTML、无样式、无无关元素 - 分级摘要:根据权限返回不同长度的纯文本摘要(100-400 字符),Agent 可以先基于摘要判断是否需要获取全文,避免无效 Token 消耗
- 按需全文:支持
detail=true参数按需获取正文内容,而不是每次搜索都返回全文 - 内容质量过滤:搜索结果会过滤掉内容过短(≤50 字)、纯图片页面、JS 空壳页面等低质量内容,确保送入 LLM 的都是有效信息
相比通用搜索引擎 API 返回的原始网页片段,NinChat 的结构化输出在相同信息量下可节省 60-80% 的 Token 消耗。
二、提供哪些能力
2.1 全文搜索 — 三种匹配模式
POST /api/search { "query": "新能源汽车", "match_mode": "all", // exact | all | fuzzy "limit": 20, "api_key": "sk_ninso_..." }| 模式 | 行为 | 适用场景 |
|---|---|---|
exact | 精确短语匹配,空格分词 | “人工智能 医疗” → 必须同时包含两个词 |
all | 所有词必须命中(AND) | 精准搜索,结果少但准确 |
fuzzy | 模糊匹配(OR),容错 1-2 字符 | 探索式搜索,结果多但可能相关 |
meilishard 的默认中文分词已经处理了大部分场景。对于更精确的需求,exact模式会在后端用引号包裹查询词,强制 meilishard 做短语级匹配。
2.2 热点新闻 — 算法聚合而非人工筛选
GET /api/hot-news?limit=20&days=3返回的热点列表不是人工标注的,而是算法聚合的结果。核心流程:
- 碰撞检测:相同
content_fingerprint但标题相似度 > 0.6 的文章被归为一组 - 跨域合并:基于标题 SimHash 海明距离 < 3 的组进一步合并
- 热度排序:按
source_count(覆盖媒体数)降序排列
一条被央视、新华网、澎湃、界面等 20 家媒体同时报道的新闻,自然排在前面。
2.3 热搜词统计
GET /api/hot-search?limit=20&time_range=today基于用户搜索行为的热搜词统计。支持today/week/month/all四种时间窗口。统计结果包括搜索次数和排名变化趋势。
此接口不记录用户身份,仅统计搜索词频次。
2.4 Web 搜索首页 — 零门槛体验
https://ninchat.cpolar.top/不需要登录、不需要 API Key,直接在浏览器中访问。提供:
- 🔍 大搜索框 + Logo 展示
- 🔥 前 10 条热点新闻(来源数 + 标题)
2.5 AI Agent 集成 — 标准 REST API
项目为两种主流 AI Agent 框架提供了 Skill 文件:
- OpenClaw:通过
NINCHAT_BASE_URL环境变量配置,支持 CLI / Telegram / Discord / Slack 等多平台 - Hermes Agent:通过
execute_code工具调用 Python 代码,支持 Dashboard UI 配置
Agent 调用搜索的标准流程:
importrequestsdefsearch(query,api_key,detail=False):payload={"query":query,"limit":10,"match_mode":"fuzzy","detail":detail,"api_key":api_key}r=requests.post("https://ninchat-api.cpolar.top/api/search",json=payload,timeout=30)data=r.json()returndata["results"]Agent 拿到结果后可以直接用 LLM 进行二次处理,典型的"搜索增强生成"模式。
三、如何使用
3.1 浏览器体验(零门槛)
打开https://ninchat.cpolar.top/,直接用。
不需要注册,不需要 API Key。首页展示实时热点新闻,搜索框输入关键词即可搜索。搜索结果包含标题、摘要、来源和时间。
3.2 获取 API Key
- 访问网站注册账号
- 在「API Key」页面创建 Key
- Key 格式为
sk_ninso_<64位hex> - 复制 Key 即可使用
3.3 基础搜索(匿名 / API Key)
curl-XPOST https://ninchat-api.cpolar.top/api/search\-H"Content-Type: application/json"\-d'{ "query": "人工智能 医疗", "match_mode": "all", "limit": 10, "api_key": "sk_ninso_你的API_KEY" }'返回示例:
{"status":"ok","total":86,"search_level":"basic","search_time":"0.156s","results":[{"title":"AI辅助诊断系统在三甲医院落地","url":"https://example.com/article/123","snippet":"近日,多家三甲医院宣布引入AI辅助诊断系统...","source":"新华网","publish_time":"2026-07-03"}]}3.4 群组用户 — 深度搜索
群组用户(tags 含group:xxx)可以获取全文内容:
curl-XPOST https://ninchat-api.cpolar.top/api/search\-H"Content-Type: application/json"\-d'{ "query": "车船税 政策 调整", "match_mode": "all", "detail": true, "limit": 5, "api_key": "sk_ninso_群组KEY" }'detail: true返回的每篇结果包含完整正文(最多 10000 字符),适合 AI Agent 做深度分析和摘要生成。
3.5 获取热点 / 热搜
# 热点新闻curl"https://ninchat-api.cpolar.top/api/hot-news?limit=20&days=3"# 热搜词curl"https://ninchat-api.cpolar.top/api/hot-search?limit=20&time_range=today"3.6 在 Python 项目中集成
importrequestsclassNinChatClient:def__init__(self,api_key,base_url="https://ninchat-api.cpolar.top"):self.api_key=api_key self.base_url=base_urldefsearch(self,query,match_mode="fuzzy",limit=20):r=requests.post(f"{self.base_url}/api/search",json={"query":query,"match_mode":match_mode,"limit":limit,"api_key":self.api_key,},timeout=30,)r.raise_for_status()returnr.json()["results"]defhot_news(self,limit=20,days=3):r=requests.get(f"{self.base_url}/api/hot-news",params={"limit":limit,"days":days},timeout=15,)r.raise_for_status()returnr.json()["news"]defhot_search(self,limit=20,time_range="today"):r=requests.get(f"{self.base_url}/api/hot-search",params={"limit":limit,"time_range":time_range},timeout=15,)r.raise_for_status()returnr.json()["terms"]client=NinChatClient("sk_ninso_你的KEY")# 精确搜索results=client.search("新能源汽车 充电桩","all")# 热点新闻news=client.hot_news(20)# 热搜词trending=client.hot_search(10,"today")四、未来规划
| 方向 | 计划 |
|---|---|
| 多语言支持 | 目前以中文为主,未来计划扩展英文源站 |
| RSS/Webhook 推送 | 关注特定关键词后,有新内容自动推送 |
| 语义搜索 | 嵌入模型增强搜索召回,不仅限于关键词匹配 |
结语
NinChat 的核心理念是“搜索即服务”——把新闻搜索抽象成一个标准的 REST API,让任何应用、任何 Agent 都能以最低的接入成本获取实时信息检索能力。
项目完全开源,欢迎 Star、Issue、PR。
GitHub: https://github.com/nineinfra/ninchat-skills
在线体验: https://ninchat.cpolar.top