Skip to content

认识 Hindsight:Agent 每次开新会话就失忆?这个 27.8K Star 的开源记忆系统把 LongMemEval 打到 94.6% ​

先讲一件我这周遇到的事,挺丢人的。

我给自己搭了个写代码的小 Agent,上周跟它掰扯了半个小时,最后定了三条规矩:项目里不许用 Any、日志统一走 structlog、测试必须能并行跑。它当时答应得好好的。

这周新开一个会话,我随口问了一句"测试怎么跑",它给我回了一段用 unittest、还带 time.sleep(3) 的代码。

我盯着屏幕愣了两秒——它不是变笨了,它是真的忘了。

一个字都不记得。上周那半小时的对话,对它来说从来没发生过。

这就是今天几乎所有 AI Agent 的默认状态:**每次会话都是一次彻底的失忆。**你以为你在"训练"它,其实你只是在跟一个每天早上都会重置的人重新自我介绍。

然后我看到了一组让我更难受的数字:**Mem0 的开源版在 LongMemEval 这个长期记忆基准上只有 49.0%。**也就是说,一半的问题它记错了或者压根没记住。

而 2026 年 9 月 25 日这天,GitHub Trending 榜第一的项目叫 Hindsight——单日涨了 1668 个 Star,总 Star 数约 27.8K。它在这个基准上写的是 94.6%。

差了 45 个点。这已经不是"优化"了,这是两条不同的技术路线。

什么是 Hindsight ​

Hindsight 是 Vectorize(vectorize-io)开源的一套 AI Agent 长期记忆系统,MIT 协议,最新正式版 v0.10.0(2026 年 9 月 14 日发布,PyPI 上 hindsight-api 已到 0.10.1 / 9 月 22 日)。它不是一个向量数据库,也不是 RAG 框架的换皮,而是一个自带"记忆分层 + 记忆巩固"的服务:你用 retain() 存、用 recall() 查、用 reflect() 让它带着立场回答。底层是 PostgreSQL + 向量扩展(pgvector / pgvectorscale / vchord / scann),所有数据都在你自己手里,可完全自托管。

先把最容易搞混的一件事说清楚:Hindsight 不是 RAG。

RAGHindsight
检索策略只有语义相似度语义 + 关键词 + 图谱 + 时间,四路并行
多跳推理受限于召回的片段沿实体关系图遍历
时间查询关键词碰运气("春天")解析日期、按范围过滤
实体理解无实体消歧、共现追踪
知识沉淀无状态观察 → 心智模型,会演化
立场无skepticism / literalism / empathy 三档可调

RAG 回答的是"哪段文档像这个问题"。 记忆回答的是"关于这个人 / 这件事,我们目前知道什么,以及我们是怎么知道的"。 这两件事在企业里根本不是同一个需求,但过去两年我们一直在拿前者硬凑后者。

它的全部 API 只有三个动词,我第一次看文档时觉得这也太少了,看完才明白这是刻意的设计:

  • retain() —— 喂进去一段对话 / 文档 / 转录,它抽取事实、识别实体、在时间轴上挂好;
  • recall() —— 四路检索并行跑,融合重排后在 token 预算内返回最相关的记忆;
  • reflect() —— 拿召回的记忆做一次带立场的推理,生成答案。

这三个词对应的是人类记忆的三个动作:记下来、想起来、琢磨一下。 大部分"记忆方案"只做了前两个,然后管第三个叫"让模型自己总结"。

它有什么特点 ​

第一,TEMPR 四路并行检索,是它和所有对手拉开差距的地方 ​

一次 recall("Alice 去年三月做了什么") 进去,没有任何一个环节会先猜这个问题适合哪种检索,四条路同时跑:

检索臂用什么擅长什么
Semantic向量概念相似、改写过的说法
KeywordBM25人名、术语、精确匹配
Graph实体图谱关联实体、间接关系
Temporal日期索引"去年春天"、"六月"、时间区间

四条路各自排一个序,然后 RRF 融合(Σ 1/(60 + rank))合成一个列表,再上一道 cross-encoder 重排,最后按新鲜度、时间、证据强度加权,砍进你给的 max_tokens 预算里。

为什么这件事重要?因为 Mem0 和 Zep 都只跑一到两条路(Mem0 主力是语义、图谱要上 Pro 版;Zep 是图谱 + 语义增强)。碰到"时间 + 实体 + 语义"混在一起的问题,它们只能赌一条路,而 Hindsight 四条全跑。

官方给的那个例子我特别喜欢:

存进去的事实是:Alice 是 Project Atlas 的技术负责人 → Project Atlas 用 Kubernetes → Kubernetes 集群周二宕机了。 问:"Alice 受最近故障影响了吗?" RAG 只会召回关于 Alice 的那几条("故障"和 Alice 在语义上不相似)。 Hindsight 沿着 Alice → Atlas → Kubernetes → 宕机 这条实体链走一遍,然后回答"是"。

第二,记忆会"巩固",不是堆碎片 ​

这是我认为 Hindsight 最不像竞品的一点。它的记忆分四层:

类型存什么例子
World Fact客观事实"Alice 在 Google 工作"
Experience Fact这个记忆库自己的行为和交互"我向 Bob 推荐了 Python"
Observation从多条事实自动巩固出来的认知"用户曾是 React 爱好者,现在已经转向 Vue"(保留了演变过程)
Mental Model人工整理的常用问题摘要"团队沟通最佳实践"

关键在 Observation(观察)这一层:相关事实会自动合并成一条持久的认知,而不是无限堆积重复项。每条观察都带着证据追踪——引用它来源的原始记忆原文,外加一个 proof count(支持它的证据条数)。新证据来了不是覆盖,是更新,且保留历史。

reflect() 的时候查源有优先级:Mental Models → Observations → Raw Facts。

"用户曾是 React 爱好者,现在已经转向 Vue"——这句话里藏着一条时间线。 一个只会堆事实的系统,会同时告诉你"他喜欢 React"和"他喜欢 Vue",然后让你自己去猜哪个是新的。 这就是"记住"和"学会"的区别。

第三,记忆库可以有立场:Mission / Directives / Disposition ​

每个 bank(记忆库)可以配三样东西:

配置作用例子
Mission自然语言描述这个库是谁、关注什么"我是专注机器学习的研究助理,偏好简单方案而非最新方案"
Directives硬规则,永远不能违反"绝不推荐具体股票"、"必须引用来源"
Disposition软特质,1-5 档影响推理风格怀疑度(skepticism)、字面度(literalism)、共情度(empathy)

**Directives 是硬约束,Disposition 是软风格。**这两条分开,是工程上很聪明的一刀——合规规则不能商量,语气风格可以调。

注意它只影响 reflect(),不影响 recall()。检索结果保持客观,解读阶段才带立场。

第四,v0.10.0 这一版加的东西都很实在 ​

9 月 14 日发的 0.10.0,我挑几条真正影响使用的:

  • 图片和文件成了 retain 的一等公民:content 现在吃一个有序的 text / image / file 块列表,截图在两段文字中间,就按"中间那张图"来读。证据追踪细化到每条事实,散文里写的事实不会把旁边的截图认领成自己的证据。recall 回来的事实也带着支撑它的附件。
  • 请求路径快了 3.2 倍:两个 HTTP 中间件改成纯 ASGI,embedding 批处理并发,token 计数更便宜。
  • 能在花钱之前先看到 prompt:retain / consolidate / reflect 都加了 preview 端点,控制面板里还有 retain 的 prompt 测试器。这条对调过 prompt 的人来说是救命的。
  • recall 支持模糊匹配标签 + 开放词表的多值标签:不用再预先枚举分类了,让库自己从内容里长出来。
  • 0.10.0 里 reflect 不再对空缺期编数字:以前问一个库里没有数据的时期,它会从邻近期外推一个具体数字当结论。现在它会说"这个值没有记录",同时保留定性结论。

最后这条我要单独夸一句。一个记忆系统愿意承认"我不知道",比它多答对 5% 重要得多。

第五,基准成绩,以及我必须泼的冷水 ​

官方实时看板(benchmarks.hindsight.vectorize.io)上的数字,全部自称第一:

数据集Hindsight
LongMemEval-S94.6%
LoComo-1092%
PersonaMem 32K86.6%
BEAM 100K75%
BEAM 1M73.9%
LifeBench EN71.5%
BEAM 500K71.1%
BEAM 10M64.1%

对比着看才有意义(数据来自各厂商公开页面,口径不完全一致):

系统LongMemEvalLoComo
Hindsight94.6%92%
Mem0(闭源平台)94.4%92.5%
Mem0(开源版)49.0%57.7%
Zep63.8% ~ 90.2%71.2% ~ 94.7%
Letta—74.0%

好,冷水来了,而且不止一盆:

**第一,这个看板上只有 Hindsight 自己的分数。**没有竞品、没有延迟、没有成本、没有日期。官方 README 说"实时更新,含每模型的准确率、延迟和成本",但当前页面只兑现了准确率这一项。Agent Memory Benchmark 本身就是 Vectorize 的项目。

**第二,数字对不上。**仓库 benchmark 目录里写的是 LongMemEval-S 91.4%、LoCoMo overall 89.61%,实时看板上是 94.6% / 92%。涨了,但没说为什么涨。

**第三,有人质疑这个记忆层反而拖累了模型。**Honcho 在 2025 年 12 月的博客里点名说:Gemini 3 Pro 裸跑同一份题目就有 92.0%,比 Hindsight 当时公布的 91.4% 还高。言下之意是,加记忆层反而没跑过不加。这个质疑附了可复现代码。

**第四,也是最要命的一条——成本。**Mem0 官方对比页的数据:

LongMemEval每次检索 token
Mem094.4%~7K
Hindsight94.6%~27K

**准确率只高 0.2 个点,token 花了近 4 倍。**在 BEAM 10M 上是 73.9% vs 64.1%(Hindsight 明显更强),但代价是 43.6K vs 6.7K tokens。

我的看法很直接:Hindsight 是在用钱换召回率。 如果你每次调用都要付 27K token,那"记忆"这件事的账就得重新算——一个每天 10 万次调用的应用,光记忆检索就是 27 亿 token。 但反过来,如果你的场景是"宁可多花点也要答对"(医疗、法务、金融风控),这 0.2 个点可能比你省下的钱值钱得多。

最后补一句公道话:官方说这些结果由 Virginia Tech Sanghani Center 和**《华盛顿邮报》**的研究合作者独立复现过,基础设施只是本地 MacBook + PostgreSQL。这在"所有分数都是厂商自报"的行业里,已经算有诚意了。

用在哪儿 ​

语音客服 / 呼叫中心:这是我觉得最刚需的场景 ​

Hindsight 官方集成了 Vapi 和 Pipecat 两个语音 AI 平台,模式一模一样:通话开始时召回这个来电人的上下文,通话结束时把整段转录 retain 进去。

价值在哪?一个老客户第三次打进来,Agent 已经知道他上次报的是什么问题、上次的处理方案是什么、他对什么方案表达过不满。这不需要客户重复三遍。

这个场景下 token 成本反而不是问题——一通电话才几十轮对话,但每轮的价值极高。

编码 Agent:这可能是它涨 Star 最快的原因 ​

官方有个专门包:npx @vectorize-io/hindsight-coding-agents install all,一条命令给 Claude Code、Codex CLI、Cursor CLI、GitHub Copilot CLI、opencode、Kilo、Cline、Antigravity、Devin、pi、Prime Agent、Grok Build、DeepSeek Harness 全部装上长期记忆。

它干的事是:按 git 仓库自动建一个 bank,从 git 历史和过往会话里自动摄取,Agent 开始干活前把上下文注入进去,再配上架构、约定、在途工作的知识页。摄取是自动的,没有额外命令。

回想我开头那个"它忘了不许用 Any"的故事——这个包就是专门治这个的。

企业助手 / 工作流:Directives 是这里的关键 ​

通过 Dify、n8n、Zapier、Flowise、LangChain / LangGraph、LlamaIndex、CrewAI、Pydantic AI、OpenAI Agents SDK、Google ADK、Microsoft Agent Framework 等 60+ 集成接入。

Directives(硬规则)在这个场景里是刚需——"绝不推荐具体股票"、"必须引用来源"、"涉及金额必须转人工"。这些不是 prompt 里的软建议,是写在记忆库配置里、每次 reflect 都会生效的约束。

官方还专门做了一个 Business Executive bank 模板,以及和 TealTiger 合作的"治理感知记忆"——重要的拒绝决策持久保存以便合规审计,常规的批准自然衰减。这个思路我很喜欢:不是所有记忆都该平等地活下去。

还有两个挺有意思的 ​

Obsidian 集成——把你的笔记库同步进 Hindsight,然后跟一个 grounded 在你自己笔记上的 Agent 聊天,每条答案都标注它引用的那条笔记。笔记库始终是唯一事实来源。

ChatGPT 和 Perplexity 通过 OAuth 保护的 MCP 连接器接入。也就是说你不必换工具,让商业化产品的记忆落在你自己托管的库里。

官方口径的客户 ​

Vectorize 说 Hindsight 已在 Fortune 500 企业的生产环境中使用,也在被一批 AI 创业公司使用。具体名字没公开——这在 B2B 开源里很常见,但也意味着你没法直接验证。请把它当成"厂商声明"而不是"已证实的案例"。

初体验 ​

最快的一条路,Docker 一条命令(API + 控制面板全在里面):

bash
export OPENAI_API_KEY=sk-xxx

docker run -it --pull always --name hindsight --restart unless-stopped --shm-size=1g \
  -p 8888:8888 -p 9999:9999 \
  -e HINDSIGHT_API_LLM_API_KEY=$OPENAI_API_KEY \
  -v hindsight-data:/home/hindsight/.pg0 \
  ghcr.io/vectorize-io/hindsight:latest
  • API 服务:http://localhost:8888(文档在 /docs)
  • 控制面板(Web UI):http://localhost:9999
  • MCP 端点:http://localhost:8888/mcp/{bank_id}/

不想装 Docker 就走 pip:

bash
pip install hindsight-api
export HINDSIGHT_API_LLM_PROVIDER=groq
export HINDSIGHT_API_LLM_API_KEY=gsk_xxxxxxxxxxxx
hindsight-api          # 默认 8888,内置 pg0 嵌入式 PostgreSQL,数据在 ~/.hindsight/data/

然后四行 Python,跑通整个闭环:

bash
pip install hindsight-client
python
from hindsight_client import Hindsight

client = Hindsight(base_url="http://localhost:8888")

client.retain(bank_id="my-bank", content="Alice 三月加入 Google,她很喜欢研究团队")
print(client.recall(bank_id="my-bank", query="Alice 在哪工作?").results)
print(client.reflect(bank_id="my-bank", query="介绍一下 Alice").text)

真正的"两行代码"是这个——给已有 Agent 加记忆,业务代码一行不用改:

bash
pip install hindsight-litellm
python
from openai import OpenAI
from hindsight_litellm import wrap_openai

client = wrap_openai(
    OpenAI(),
    bank_id="user-123",
    hindsight_api_url="http://localhost:8888",   # 不填则走 Hindsight Cloud
)

# 后面该怎么调还怎么调,调用前自动 recall、调用后自动 retain
response = client.chat.completions.create(
    model="gpt-5-mini",
    messages=[{"role": "user", "content": "你知道我的哪些偏好?"}],
)

wrap_anthropic() 对 Anthropic SDK 做同样的事,底层是 LiteLLM,所以 100+ 模型都能覆盖。每次调用还能用 hindsight_* 参数单独覆盖 bank、检索预算、事实类型,甚至可以改成走 reflect 而不是 recall。

想连外部服务都不起的,用嵌入式模式:

bash
pip install hindsight-all
python
import os
from hindsight import HindsightServer, HindsightClient

with HindsightServer(llm_provider="openai", llm_model="gpt-5-mini",
                     llm_api_key=os.environ["OPENAI_API_KEY"]) as server:
    client = HindsightClient(base_url=server.url)
    client.retain(bank_id="my-bank", content="Alice 在 Google 工作")
    print(client.recall(bank_id="my-bank", query="Alice 在哪工作?"))

给编码 Agent 装记忆:

bash
npx @vectorize-io/hindsight-coding-agents install all       # 所有检测到的 Agent
npx @vectorize-io/hindsight-coding-agents install claude-code  # 或只装一个

六个坑,我提前替你踩一遍 ​

**一,必须有 LLM。这不是纯向量库。**retain 的抽取和 reflect 的推理都要调模型,没配 API key 服务起不来,或者起来也是个空壳。官方推荐 Groq + gpt-oss-20b,便宜又快。支持的 provider 有 openai / anthropic / gemini / groq / ollama / lmstudio / github-copilot / meta / deepseek。

**二,Docker 镜像比你想的大得多。**Full 版 AMD64 约 9 GB(ARM64 约 3.7 GB),因为它把 BGE embedding 模型和 MiniLM cross-encoder 都打包进去了。想要小的用 slim 标签(约 500 MB),代价是 embedding 和 rerank 都得走外部服务。内存同理:Full 最低 1.5 GB,Slim 512 MB 起。

**三,pg0 嵌入式数据库只适合开发。**官方明确写了 not recommended for production。上生产请用外部 PostgreSQL 14+,装 pgvector(或 pgvectorscale / vchord / scann)。Supabase、Neon、Azure、AlloyDB、RDS、Cloud SQL 都行。

**四,Docker 跑非 root(UID 1000),bind mount 会踩权限坑。**用 named volume 最省事;非要挂宿主机目录,先 sudo chown -R 1000:1000。别用 --user 换 UID,镜像里只定义了 hindsight 这个用户,换别的会直接崩在 getpwuid()。

**五,国内网络有官方解法。**文档里专门写了 China Network Notes:设 HF_ENDPOINT=https://hf-mirror.com,provider 用 deepseek(DeepSeek 没有 embedding 端点,所以 embedding 走 local + BAAI/bge-small-en-v1.5,reranker 用 flashrank)。这段配置能省你两小时。

**六,Intel Mac 别装 hindsight-all。**完整包里的本地模型没有 Intel Mac 的 wheel,pip 会静默回退到一个几个月前的旧版本。请装 hindsight-all-slim 或 hindsight-api-slim。

再补一条小的:**PyPI 页面上 hindsight-api 的 license 字段写的是 Apache 2.0,但仓库 LICENSE 和 SPDX 表达式都是 MIT。**真要走合规流程,以仓库里的 LICENSE 文件为准。

进阶 ​

如果这篇文章你只记住一件事,我希望是这个判断:

过去两年我们一直在用"更长的上下文窗口"冒充"记忆",而这两件事根本不是一回事。

上下文窗口是工作台,记忆是档案柜。工作台再大也装不下跨月跨年的交互史,成本随长度线性膨胀,而且窗口一清空,一切归零。我那个 Agent 忘了"不许用 Any",不是因为它上下文不够长,是因为它压根没有"上周"这个概念。

Hindsight 真正的贡献不是 94.6% 这个分数,而是它把"记忆"这件事拆成了可以工程化的四层:原始事实 → 巩固后的观察 → 心智模型 → 带立场的解读。它承认了记忆是需要加工的,不是存下来就完事。

冷水照例要泼,这次泼三盆:

**第一,27K token 一次召回,这个成本你必须自己算清楚。**如果你的应用是高频、低价值的调用(比如每天十万次的简单问答),Hindsight 大概率不划算,Mem0 那 ~7K 的方案更合适。如果你的应用是低频高价值(医疗问诊、法务检索、投研),那 0.2 个准确率的点值得你掏钱。别看着 94.6% 就冲。

第二,所有基准数字都请当成"厂商自报"。看板上只有它自己、README 和看板对不上、Honcho 质疑裸跑更强——这三件事叠在一起,意味着你必须在自己的数据上跑一遍。好消息是它开源、可自托管、有现成的 benchmark 仓库,跑一遍的成本不高。

**第三,它不是一个可以扔进生产就不管的组件。**数据全落在你的 PostgreSQL 里,备份、访问控制、合规审计全是你自己的活。官方自己在文档里把"生产部署指南"单独列了一节——这既是好事,也是一个提醒。

我的建议很具体:**先别急着接 Agent 框架。用 Docker 起一个,拿你真实的一周工作聊天记录 retain 进去,然后只问三个问题——"上周我们定了什么"、"这个项目的约定是什么"、"我讨厌什么做法"。**recall 回来的东西准不准,你一眼就知道。这三句话的召回质量,比任何基准分数都能说明它对你有没有用。

再往深一层,我建议你去读它的 RAG vs Memory 那页文档和官方的 Cross-Encoder Reranking 那篇博客。看清楚两件事:为什么"四路并行 + RRF 融合 + cross-encoder 重排"这套组合拳在混合查询上碾压单路检索,以及为什么观察巩固必须保留历史而不是覆盖最新——这两个结论对所有做记忆系统的代码都成立,不管你最后用不用 Hindsight。

至于"Agent 记忆"会不会像"向量数据库"一样变成一个独立的基础设施品类(Mem0、Zep、Letta、Hindsight、EverMind 在同一年里扎堆出现,本身就说明有人押注),我的看法是:**已经成了。**但它还没收敛——现在这个阶段,各家分数打架、口径不一,选型时请务必带上自己的数据和自己的账单。

更多开源技术干货和学习资料,关注公众号「遇码」,领取专属福利。

遇码MeetCoding 开源技术社区