你三天前看过的那篇文章,Google 找不回来——Hister 把搜索引擎拆成两半
你坐在电脑前,努力回忆——三天前你看到过一篇关于"用 RL 训练小模型做工具调用"的文章,写得很好,你想再读一遍。
你三天前看过的那篇文章,Google 找不回来——Hister 把搜索引擎拆成两半
一个尴尬的日常
你坐在电脑前,努力回忆——三天前你看到过一篇关于"用 RL 训练小模型做工具调用"的文章,写得很好,你想再读一遍。
你打开 Google,输入几个关键词。结果页前 10 条都不是那篇。你换关键词,还是找不到。你翻浏览器历史——过去三天你访问了 847 个页面,Ctrl+F 搜"RL",47 个匹配,没有一个对得上。
最后你只能问自己一个问题:我到底看没看过那篇文章?
这个场景的荒谬之处在于:Google 能帮你找到全世界任何一篇文章,却找不到你三天前亲自看过的那一篇。你的浏览器记录着你访问过的每一个 URL,但你没法从中检索出"那段你记得但记不全的内容"。
搜索引擎其实在做两件完全不同的事——发现(找到你不知道存在的东西)和记忆(找到你曾经看过的东西)。Google 把这两件事混在一起,用同一个 PageRank 索引服务两种需求。结果是:它既不是最好的发现工具(因为商业 SEO 污染),也不是最好的记忆工具(因为它不索引你看过的页面内容)。
asciimoo/hister 做的事情很简单:把搜索引擎的"记忆"功能拆出来,装进你的本地。
Hister 是什么
一句话:Hister 是一个只索引你看过的页面和本地文件的全文搜索引擎,跑在你自己的机器上。
它不是元搜索引擎(像 Searxng 那样把 Google/Bing 的结果聚合),也不是爬虫(不主动去抓全网)。它的工作模式是:
1. 你装一个浏览器扩展(Firefox/Chrome) 2. 你正常浏览网页 3. 扩展把你访问的页面全文发送到本地 Hister 服务 4. Hister 建立全文索引 5. 你用 Web UI、TUI、命令行或 MCP 客户端搜索这些内容
核心区别在于:Hister 索引的是"你看过什么",Google 索引的是"全世界有什么"。
这个区别听起来微小,实际是两个完全不同的搜索问题。全网搜索需要处理数十亿页面、对抗 SEO、用 PageRank 这种链接分析来排序。个人搜索只需要处理你自己的几千到几万个页面,但需要全文索引(不只是标题和 URL)、支持短语查询、字段过滤、通配符。
Hister 的查询语法很直接:
phrase search— 用双引号包起来找精确短语title:foo— 字段过滤,只在标题里找-exclude— 排除某个词*wildcard— 通配符匹配@alias— 给常用查询起别名
作者的谱系:从 Searxng 到 Hister
Hister 的作者 asciimoo 不是新手。他是 Searxng 的核心维护者之一——Searxng 是目前最流行的开源元搜索引擎,把 Google、Bing、DuckDuckGo 等几十个搜索引擎的结果聚合在一起,去掉追踪器,按相关性重排。
Searxng 解决的是"发现"层的问题——如何在不被追踪的前提下使用全网搜索。Hister 解决的是"记忆"层的问题——如何找回你曾经看过的内容。两个项目合在一起,构成了 asciimoo 对"搜索"这个问题的完整答案:
发现用 Searxng(不追踪的全网搜索),记忆用 Hister(本地的个人索引)。
这个分工的逻辑很清晰:发现需要全网规模,所以必须用别人的索引(Google/Bing),但可以用元搜索去掉追踪;记忆只需要个人规模,所以可以完全本地化,连云端都不需要碰。
MCP 支持:让 AI 助手查你的记忆
Hister 最有意思的设计是 MCP(Model Context Protocol)客户端支持。这意味着你可以对 Claude、Cursor 或任何支持 MCP 的 AI 助手说:
"我上周看过一篇讲 RL 训练小模型的文章,帮我找出来。"
AI 助手会通过 MCP 调用 Hister 的搜索接口,在你的个人索引里查找,返回匹配的页面。
这个场景揭示了 AI 助手的一个核心限制:它们没有"你的记忆"。 Claude 不知道你上周读过什么,不知道你的项目用的是什么框架,不知道你之前尝试过什么方案。所有这些上下文都需要你每次手动提供。
Hister + MCP 的组合,本质上是在给 AI 助手装一个"你的个人记忆"。AI 不再只是一个有通用知识的对话伙伴,而是一个能查你个人历史的助手——就像你问同事"我们上次那个 bug 是怎么修的?"一样自然。
这个方向和 supermemory、mem0 这些"AI 记忆引擎"有相似之处,但有一个关键区别:Hister 索引的是网页和文件内容,不是对话历史。 它不是在记你跟 AI 说了什么,而是在记你看过什么。这两个维度的记忆是互补的——对话历史记的是"你想了什么",网页索引记的是"你看了什么"。
语义搜索:可选的,不是强制的
Hister 默认是全文检索(keyword-based),语义搜索是可选项。你需要自己配置一个 embeddings endpoint(可以是本地的 Ollama,也可以是 OpenAI 的 embeddings API),Hister 会把文档内容发送到这个 endpoint 生成向量,用于语义相似度搜索。
这个设计值得注意。大部分"AI 搜索"项目默认就是向量检索,把关键词检索当落后技术。但关键词检索有一个不可替代的优势:精确性。
当你搜一个专有名词(比如 "P(z)" 或 "Bitrot Protection")时,向量检索可能返回"语义相近但不是这个词"的结果,而关键词检索能精确命中。反过来,当你搜"那个讲 RL 训练小模型的文章"时,关键词检索无能为力,向量检索能找到。
Hister 把选择权交给用户:默认用关键词(精确、快、零外部依赖),需要语义时再开。这比一刀切的方案更务实——大部分个人搜索场景,关键词就够了。
隐私哲学:不是藏东西,是拥有自己的记忆
Hister 的隐私设计很彻底:
- 零遥测:不发送任何使用数据
- 零云同步:数据只存在你的 Hister 服务器上
- 浏览器扩展只发送到你配置的 Hister 服务:除了下载 favicon,不与任何第三方通信
- 语义搜索的 endpoint 由你选择:可以是本地 Ollama,也可以是 OpenAI,但这是你主动配置的
当你用 Google 搜索、用 Chrome 浏览时,你的"记忆"(浏览历史、搜索记录)归 Google 所有。Google 用它来训练模型、投放广告、训练 RankBrain。你得到的是"免费搜索服务",失去的是对自己记忆的所有权。
Hister 的立场是:你的浏览历史是你的记忆,应该存在你控制的基础设施上。 这不是隐私 paranoia,是数据主权的常识。
技术实现:Go 单二进制
Hister 用 Go 写,编译成一个单一二进制文件。下载、chmod +x、运行,完事。没有 Docker、没有数据库、没有 Kubernetes。这种工程审美在 2026 年的"万物容器化"浪潮里反而显得清新。
Go 的选择也合理——个人搜索引擎需要:
- 低资源占用(不能吃掉用户机器的内存)
- 快速启动(不能像 Java 那样预热 30 秒)
- 跨平台编译(一个二进制覆盖 Linux/Mac/Windows/ARM64)
- 足够的并发能力(索引 + 查询 + 浏览器扩展通信)
Hister 解决不了的问题
诚实地说,Hister 不是银弹:
1. 它只索引你主动访问的页面——如果你只是扫了一眼标题没点进去,它不会索引 2. 它不索引付费墙后面的内容——如果你订阅了某篇文章但没装扩展,它也抓不到 3. 它需要你养成"开着 Hister 浏览"的习惯——如果你忘了开服务,那几天的浏览就没被索引 4. 多设备同步需要你自己搭共享服务器——不是开箱即用的云同步
这些限制是"本地优先"架构的必然代价。你换来的是:零订阅费、零数据外泄、零被广告商画像的风险。
搜索引擎的下一个十年
过去十年的搜索创新几乎全在"发现"层——RankBrain、BERT、MUM、SGE(AI 概览)。"记忆"层被完全忽视了,因为记忆不赚钱——你不能在"用户上周看过的文章"上投广告,那是用户自己的数据。
Hister 代表的是另一种可能:把记忆层从商业搜索引擎手里夺回来,做成开源工具,跑在本地,通过 MCP 和 AI 助手连接。
这个方向和"个人知识管理"(PKM)工具(Obsidian、Logseq、Notion)有交集,但定位不同。PKM 工具是让你主动整理知识,Hister 是让你被动积累索引。PKM 需要你养成写笔记的习惯,Hister 只需要你正常浏览网页。
从 Searxng 到 Hister,asciimoo 在做一件持续十多年的事:把搜索这个被 Google 垄断的能力,一块一块拆下来还给个人。 Searxng 拆的是"发现",Hister 拆的是"记忆"。两件事都还没做完,但方向是对的。
项目地址:https://github.com/asciimoo/hister 在线 Demo:https://demo.hister.org/ 作者:asciimoo(Searxng 核心维护者) 协议:AGPLv3 语言:Go 今日 Stars:842(2026-09-18 GitHub Trending)