用户跟你的 Agent 说了一句「老地方见」,系统反应特别迅速,唰地写了一条——「用户想在老地方见面」。
然后你盯着这条记录看了三秒钟。
老地方是哪?没人知道。
又或者,用户说了句「谢谢」,系统又快速地记了一笔——「用户表达了感谢」。
好家伙,这条信息的价值大概约等于零。
更典型的,用户上个月说「我住在北京」,这个月说「我搬到上海了」。
记忆里两条都在,Agent 下次要用的时候,该信哪个?
如果你做过 Agent 长期记忆的开发,应该非常熟悉这些场景,这不是个别 bug,背后是一整个系列的问题——
现有的记忆抽取方式,大部分是被动的。
拿到对话,系统直接压缩成结构化 JSON 存进去。
管你是寒暄、是关键信息、还是一句充满歧义的指代,一律照单全收。
结果就是,记忆库里什么都有,但该用的时候什么都不靠谱。
那为什么不能在存之前先想一想,这条信息值得记吗?记得下来吗?信息完整吗?
这就是我们今天发布的 MemReader 系列模型想解决的事。
官方文档:
memos-docs.openmem.net/self_developed_model/extraction_usage_example/
HuggingFace 地址:
huggingface.co/IAAR-Shanghai/MemReader-4B-thinking
一、从「被动提取」到「主动管理」——MemReader 在做的事
现在大部分记忆系统的做法,有点像一个不加筛选的速记员——你说什么,它就原封不动地记下来。
信息有没有价值?不管。
有没有歧义?不管。
信息完不完整?也不管。
我们希望通过 MemReader 更好的解决这些问题。
让 AI 像一个有判断力的助理,每收到一条信息,先想三个问题,然后再决定怎么处理。
这三个问题是:
-
这条信息值得记吗? 是用户偏好、重要决定、关键约束,还是无意义的闲聊?
-
信息里有没有歧义? 有没有代词、模糊引用,需要翻一翻历史记忆才能搞清楚的?
-
信息足够完整吗? 能直接写入记忆,还是得先存着,等后续对话补充完整再说?
然后才做决定——是写入、检索、缓存、还是直接丢弃。
我们把这套逻辑封装成了两个模型:
- MemReader-4B,基于 Qwen3-4B,走 ReAct 范式。
-
- 能推理、能调工具、能搜索历史记忆做消歧。
- 适合对记忆质量要求高的场景。
- MemReader-0.6B,基于 Qwen3-0.6B,轻量级结构化提取器。
-
-
不做推理不调工具,专注于一件事——用最低成本把对话变成干净的结构化记忆。
-
适合对延迟和成本敏感的部署场景。
-
二、MemReader-4B:四种记忆操作,先想再做
MemReader-4B 的核心能力,是在写入记忆之前加了一层「思考」。
举个栗子🌰
用户说:「关于那个项目,我决定用方案 B。」
如果是传统的被动提取系统,它会直接写一条记忆——「用户决定使用方案 B」。
看起来没问题对吧,但「那个项目」是什么?「方案 B」具体是什么内容?全是未知的。
这条记忆存进去,下次用的时候大概率又给你埋了个坑。
MemReader-4B 的处理方式则不一样。
它会先思考:「那个项目」和「方案 B」都是模糊引用,得搜一下历史记忆。
于是调用 search_memory,找到用户之前提到过一个「新产品计划」,里面包含方案 A(激进扩张)、方案 B(稳步推进)和方案 C(观望)。
结合上下文之后,它写入的记忆变成了:「用户决定在新产品计划中采用方案 B(稳步推进路线)」。
一条被动提取的模糊记忆,变成了一条消歧之后的精准记忆。
整个流程遵循 ReAct 范式——输入 → 思考 → 行动 → 观察 → 最终决策。
对应四种记忆操作:
-
add_memory——信息有价值且完整,直接写入长期记忆。
-
search_memory——信息中存在歧义或指代,先检索历史记忆进行消歧。
-
buffer_memory——信息有价值但不完整,先临时缓存,等后续对话补充。
-
ignore_memory——低价值或重复的信息,直接丢弃,不占用记忆空间。
三、MemReader-0.6B:0.6B 参数,干翻 GPT-4o-mini
MemReader-0.6B 做的事情就更加纯粹了——不推理、不调工具,就是把对话变成干净的结构化记忆。
但 0.6B 这个参数量做到的效果,说实话我们自己看到 benchmark 数据的时候也有点意外。
直接看数据⬇️
LOCOMO 综合得分:
LongMemEval 综合得分:
0.6B 的小模型,在 LOCOMO 上综合得分超过了 GPT-4o-mini 的基线!
再看 HaluMem 的提取与更新结果,差距就更明显了:
有两个数据希望跟大家特别提一下:
MemReader-4B 在 LongMemEval 的知识更新维度上达到了 91.03%,时序推理达到 84.21%,远超 4o-mini 的 74.26% 和 77.44%。
这恰恰是现实场景中最难的两个维度——用户信息变了你能不能跟上,时间线上的信息你能不能理清楚。
四、怎么用
MemReader-4B 已经完全开源,提供多种部署方式。
HuggingFace 地址:
huggingface.co/IAAR-Shanghai/MemReader-4B-thinking
本地加载:
from transformers import AutoModelForCausalLM, AutoTokenizer
model_name = "IAAR-Shanghai/MemReader-4B-thinking"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(
model_name,
torch_dtype="auto",
device_map="auto"
)
# 定义四个记忆操作工具(add/search/buffer/ignore_memory)
# 通过 apply_chat_template 组装输入并生成
也支持 vLLM 服务化部署:
python -m vllm.entrypoints.openai.api_server \
--model IAAR-Shanghai/MemReader-4B-thinking \
--port 8000 \
--enable-auto-tool-choice \
--tool-call-parser hermes
详细用法可以查看 HuggingFace 模型页。
MemReader-0.6B 通过 MemOS Cloud API 调用(加入社群,限时免费订阅中!):
import os, requests, json
os.environ["MEMOS_API_KEY"] = "YOUR_API_KEY"
os.environ["MEMOS_BASE_URL"] = "https://memos.memtensor.cn/api/openmem/v1"
data = {
"messages": [
{"role": "user", "content": "我暑假定好去广州旅游,住宿的话有哪些连锁酒店可选?"},
{"role": "assistant", "content": "您可以考虑七天、全季、希尔顿等等"},
{"role": "user", "content": "我选七天"},
{"role": "assistant", "content": "好的,有其他问题再问我。"}
],
"extraction_types": ["memory", "preference"]
}
headers = {
"Content-Type": "application/json",
"Authorization": f"Token {os.environ['MEMOS_API_KEY']}"
}
url = f"{os.environ['MEMOS_BASE_URL']}/extract/memory"
res = requests.post(url=url, headers=headers, data=json.dumps(data))
print(f"result: {res.json()}")
API 文档:
更多开放模型列表:
memos-dashboard.openmem.net/cn/models/
写在最后
回到最初的问题——你的 Agent 记了一堆东西,但为什么越记越乱?
因为现在的问题已经不在是「记不记得住」,而在于「该不该记」和「怎么记才对」。
我们希望通过 MemReader 做到的,说到底就是让记忆写入这个动作,从一个无脑的信息搬运,变成一个有判断的认知过程。
先想清楚,再做决定。
如果你对 MemReader 感兴趣,欢迎通过以下方式了解更多:
官方文档:
memos-docs.openmem.net/self_developed_model/extraction_usage_example/
技术报告:
arxiv.org/abs/2604.07877
开放模型列表:
memos-dashboard.openmem.net/cn/models/
关于 MemOS
MemOS 为 AI 应用构建统一的记忆管理平台,让智能系统如大脑般拥有灵活、可迁移、可共享的长期记忆和即时记忆。
作为记忆张量首次提出“记忆调度”架构的 AI 记忆操作系统,我们希望通过 MemOS 全面重构模型记忆资源的生命周期管理,为智能系统提供高效且灵活的记忆管理能力。