Memory Tool 原理
Memory 是 HyperAI Relay 最重要的一块差异化,也是我花最多时间打磨的一块。这篇文档讲它到底是什么、跟 claude.ai 的 Memory 有什么区别、为什么我们永远免费。
什么是 Memory Tool
Anthropic 在 2025 年 8 月发布了一个 client-side tool 规范,类型名叫 memory_20250818。它不是一个自动运行的功能,而是一组由客户端实现的文件系统操作,Claude 会在需要时主动调用:
| 命令 | 含义 |
|---|---|
view |
查看 /memories 目录或某个文件的内容 |
create |
创建一个新 memory 文件(路径 + 内容) |
str_replace |
对已有文件做字符串替换(精确编辑) |
insert |
在指定行号插入新内容 |
delete |
删除文件或目录 |
Anthropic 只定义了协议,不提供后端存储。客户端(通常就是 SDK 用户)自己决定这些文件存哪里。
HyperAI Relay 做的事:在我们的 gateway 里实现了一整套 memory tool 后端,存储用 PostgreSQL,每条 memory 绑定你的 user_id,跨会话自动生效。你调任何客户端(Cursor / Claude Code / API),只要请求里带了 memory_20250818 tool,都走同一份数据。
跟 claude.ai 的 Memory 有什么区别
Anthropic 官方的 claude.ai 也有 Memory,但那是完全不同的一个系统:
| 维度 | claude.ai Memory | HyperAI Relay Memory |
|---|---|---|
| 你能看到每条内容吗? | 只能看到"它记住了这些大概" | 每一条都能精确看到原文 |
| 你能删除单条吗? | 只能整体清空 | 单条删除 |
| 你能编辑吗? | 不能 | str_replace / insert 精确编辑 |
| 你能导出吗? | 不能 | 一键导出 JSON |
| 协议开放吗? | 黑盒,只在 claude.ai web 里 | 标准 memory_20250818,任何 SDK 都能用 |
| 跨客户端共享吗? | 只在 claude.ai | Cursor / Claude Code / API / MCP 全共享 |
| 数据所有权 | 在 Anthropic | 在你,导出后可以带到任何地方 |
一句话总结:claude.ai 的 Memory 是"让 Claude 更懂你"的 UX 糖;HyperAI Relay 的 Memory 是"让你真正拥有记忆数据"的基础设施。
为什么我们把 Memory 做白盒
四个长期护城河机制(摘自内部路线图,用户视角):
| # | 机制 | 对你的意义 |
|---|---|---|
| 1 | 数量积累 | Memory 随时间单调增长,存的越久越有价值。我们在 UI 上把"已记住 N 条 · 已陪伴 M 天"做成勋章 |
| 2 | 语义结构 | Claude 基于你的 Memory 形成的理解是有机的,不可机械复现;即使把 JSON 搬到别的平台,那边的模型也要重新"磨合" |
| 3 | 工作流锁定 | Memory 可以按项目分组(/memories/project-X/),每个项目是一条独立工作链 |
| 4 | 摩擦导出 | 我们给完整的导出能力,但不对齐任何竞品格式 —— 数据可以带走,生态粘合要用户自己做 |
这四点的核心认知是:数据可携带是原则,生态不兼容是事实。我们给你最大的所有权,同时信任自己的工程质量能让你留下来。
为什么 Memory 永远免费
这是很多人会疑惑的:"你们做了这么多 Memory 功能,不应该做 Pro 功能卖吗?"
不。原因很简单:
- Memory 是所有用户的护城河,不是 Pro 的卖点。把它藏在付费墙后等于自己拆护城河。
- Pro Plan 卖的是 quota 和隔离,不是功能。标准版 50MB,Pro 版 500MB —— 区别只有"能存多大",功能完全一致。
- 诚实派:我们的定价哲学是"不藏 feature,只卖确定性",详见 诚实派定价哲学。
所以:
- 注册后就能用全套 Memory 功能
/app/memories浏览 / 删除 / 导出都是免费的/try沙盒里甚至不登录就能体验 Memory- 只有当你的 Memory 真的撑爆 50MB,才需要考虑 Pro Plan
怎么开始用
最小代码示例(Python + 官方 SDK):
from anthropic import Anthropic
client = Anthropic(
base_url="https://api.hyper-ailab.com",
api_key="sk-relay-xxx",
)
msg = client.messages.create(
model="claude-opus-4-6",
max_tokens=1024,
tools=[{"type": "memory_20250818", "name": "memory"}],
messages=[
{"role": "user", "content": "请先 view 一下 /memories,看看我之前存过什么"},
],
)
第一次调用 /memories 目录是空的(或者只有 /try 带过来的数据)。你正常聊天,告诉 Claude 一些关于你的事情:项目上下文、技术栈、口味偏好、待办事项。它会自主决定要不要调 create 把这些存下来。
下次打开任何客户端 —— 只要带同一个 API Key、带同一套 tools=[{"type": "memory_20250818", ...}],Claude 就会自动从 /memories 读取,表现出"认识你"的感觉。
最快的体验路径:访问 /try,不登录、不装任何东西,直接在浏览器里跟 Claude 聊 5 分钟,然后刷新页面 —— 你会亲眼看到它记住的东西。
常见误解
误解 1:"Memory 会自动存所有对话" 错。Claude 只在它主动判断需要时才调 memory tool,不是每句话都存。这是设计决定,不是 bug —— 自动存会让 Memory 迅速膨胀到噪声。如果你希望强制它存某件事,直接告诉它:"记住:X"。
误解 2:"Memory 就是长上下文 window"
不是。长上下文 window 是单次请求里塞很多 token,成本和 token 用量线性增长。Memory 是跨会话的持久化存储,只在 Claude 调用 view 时消耗 token 去读,不读就没消耗。
误解 3:"Memory 会被其他用户看到"
绝对不会。Memory 的存储按 user_id 硬隔离,gateway 在每次请求时强制注入你的 user_id 作为 scope。admin 甚至都不能看 Memory 内容(只能看 size_bytes 统计)。详见 Memory 面板与配额 的隐私章节。
下一步
- 看几个真实场景怎么用 Memory,去 Memory 使用食谱
- 搞清楚配额和清理策略,看 Memory 面板与配额
- 想让流式请求也带 Memory,看 流式响应 里的 streaming memory loop