MemoryEcho API

MemoryEcho(MemoryEcho 意回)为大语言模型提供长期记忆能力。通过 REST API 创建记忆库、写入对话、做语义召回,让您的 AI 应用无视上下文窗口限制,真正记住每一位用户。

Base URL
https://api.artific.social
格式
JSON(部分接口 SSE 流式)
认证
API Key(Bearer)/ 会话 Cookie

架构上,API 网关(Rust)负责鉴权、配额与消息持久化,背后的记忆引擎(litemem,记忆以原文存于 PostgreSQL、确定性检索,不依赖向量库)负责记忆整理与召回。引擎短暂不可用时,读写接口以 degraded 模式降级响应而不是直接失败——客户端应始终检查响应中的 degraded / pipeline 字段。

认证

API Key(推荐服务器端使用)

在 MemoryEcho 管理页创建 as_ 前缀的 API Key(完整密钥仅创建时展示一次),随请求放入 Authorization 头即可,无需会话:

Authorization: Bearer as_xxxxxxxx_…

Key 的 scope 决定能否访问记忆服务:

  • memory —— 记忆服务全部接口(管理页创建的 Key 默认此 scope)。目前不区分读写,没有更细的 scope。
  • 未设置任何 scope 的 Key 视为全功能 Key(不限服务)。
  • 设置了 scope 但不含 memory 的 Key 访问任何记忆接口都返回 403 {"error":"insufficient scope: …"}。

Key 无效、已撤销或已过期直接返回 401——带了 as_ 前缀的请求只按 Key 校验,不会回退到会话认证。

会话 Cookie(浏览器端)

登录 artific.social 后,浏览器持有 HttpOnly 会话 Cookie。同源前端请求带上 credentials: 'include' 即可;命令行调试也可从浏览器开发者工具复制 Cookie 头使用。

所有 /api/v1/memory/* 接口按认证所属用户隔离数据;未认证请求返回 401 {"error":"unauthorized"}。

服务间集成(HMAC)合作接入

平台内一方服务(如 GamEcho)通过内部 HMAC 签名通道接入记忆能力,绕过会话与配额、由接入方自行计费。如需此级别的深度集成,请联系我们。

快速开始

三步接入:创建记忆库 → 写入记忆 → 语义查询。

# 0. 在 MemoryEcho 管理页创建 API Key(见「认证」一节)
API_KEY='as_xxxxxxxx_…'

# 1. 创建记忆库
curl -X POST https://api.artific.social/api/v1/memory/vaults \
  -H 'Content-Type: application/json' \
  -H "Authorization: Bearer $API_KEY" \
  -d '{"name": "quickstart"}'
# => { "id": "<vault_id>", … }

# 2. 写入记忆
curl -X POST https://api.artific.social/api/v1/memory/append-user-message \
  -H 'Content-Type: application/json' \
  -H "Authorization: Bearer $API_KEY" \
  -d '{"library_id": "<vault_id>", "message": "我喜欢深色模式,讨厌弹窗"}'
# => { "status": "ok", "memory_id": "…", "pipeline": "ok" }

# 3. 语义查询
curl -X POST https://api.artific.social/api/v1/memory/query \
  -H 'Content-Type: application/json' \
  -H "Authorization: Bearer $API_KEY" \
  -d '{"library_id": "<vault_id>", "message": "用户的界面偏好?"}'
# => { "memory_id": "…", "results": [ … ], "degraded": false }

数据模型

MemoryVault — 记忆库

idUUID记忆库 ID(即各接口中的 library_id)
user_idinteger所属用户 ID
namestring名称
descriptionstring | null描述
vault_typestring类型:normal(默认)或 snapshot
share_codestring | null分享码(预留)
clone_source_idUUID | null克隆来源
memory_countnumber记忆条数统计
storage_bytesnumber占用存储(字节)
deleted_attimestamp | null软删除时间(回收站)
created_at / updated_attimestamp创建 / 更新时间

Memory — 记忆消息

idUUID记忆消息 ID
library_idUUID所属记忆库
user_idinteger所属用户 ID
rolestring消息角色:user 或 assistant
contentstring消息内容
metadataobject | null附加数据;查询消息会带 recalls(召回快照)与 degraded 标记
created_attimestamp写入时间

记忆库 Vaults

记忆库(Vault)是记忆的隔离单元——每个 Agent、每个用户会话或每个知识域一个库。接口中的 library_id 均指记忆库 ID。

POST/api/v1/memory/vaults

创建记忆库

请求体
{
  "name": "my-agent-memory",
  "description": "可选描述",
  "vault_type": "normal"
}
响应
{
  "id": "0197c9a2-…",
  "user_id": 1024,
  "name": "my-agent-memory",
  "description": "可选描述",
  "vault_type": "normal",
  "memory_count": 0,
  "storage_bytes": 0,
  "created_at": "2026-07-16T12:00:00Z",
  "updated_at": "2026-07-16T12:00:00Z"
}
  • 按次计费:每个记忆库 45,000 配额,经配额服务预授权后扣除(见「配额与计费」);被拒返回 402,error_code 说明原因(见「错误处理」)。
  • vault_type 省略时默认 normal。
GET/api/v1/memory/vaults

列出当前用户的所有记忆库(不含已删除,按更新时间倒序)

响应
[ MemoryVault, … ]
GET/api/v1/memory/vaults/{id}

获取记忆库详情

  • 非本人记忆库返回 403,不存在返回 404。
PATCH/api/v1/memory/vaults/{id}

更新记忆库名称 / 描述

请求体
{
  "name": "新名称",
  "description": "新描述"
}
  • 两个字段均可选,只更新提供的字段。
DELETE/api/v1/memory/vaults/{id}

删除记忆库(软删除,移入回收站)

  • 成功返回 204 No Content。
  • 删除后可在回收站中恢复或彻底删除,见下方回收站接口。
GET/api/v1/memory/vaults/trash

列出当前用户回收站中的记忆库(按删除时间倒序)

响应
[
  {
    "id": "0197c9c1-…",
    "base_id": "0197c9a2-…",
    "original_name": "my-agent-memory",
    "deleted_at": "2026-07-17T12:00:00Z"
  }
]
  • id 为回收站条目 ID(恢复 / 彻底删除时使用),base_id 为原记忆库 ID。
POST/api/v1/memory/vaults/trash/{id}/restore

从回收站恢复记忆库

响应
MemoryVault
  • {id} 为回收站条目 ID。
  • 恢复后记忆库回到列表中,回收站条目被移除;条目不属于当前用户或已不存在返回 404。
DELETE/api/v1/memory/vaults/trash/{id}

彻底删除回收站中的记忆库(不可恢复)

  • {id} 为回收站条目 ID。成功返回 204 No Content。
  • 记忆库及其全部记忆、权限记录一并删除;记忆库已被恢复时返回 409。

记忆消息

记忆库内的原始消息流。写入的用户消息 / AI 回复与语义查询记录都以消息形式留存。

GET/api/v1/memory/vaults/{vault_id}/messages?limit=50&offset=0

获取记忆库内的记忆消息列表

响应
[
  {
    "id": "0197c9b0-…",
    "library_id": "0197c9a2-…",
    "user_id": 1024,
    "role": "user",
    "content": "我喜欢深色模式",
    "metadata": null,
    "created_at": "2026-07-16T12:01:00Z"
  }
]
  • limit 默认 50,offset 默认 0。
  • 已删除的消息不再出现在列表里。
POST/api/v1/memory/vaults/{vault_id}/messages/erase

按 id 删除几条记忆消息(不可恢复)

请求体
{
  "memory_ids": ["0197c9b0-…", "0197c9b1-…"]
}
响应
{
  "erased": ["0197c9b0-…"],
  "already_erased": [],
  "missing": ["0197c9b1-…"],
  "unmapped": [],
  "derived_cleanup_failed": false
}
  • 一次 1~50 条。删除后语义查询里再也召回不到它们,消息列表里也不再出现;不调模型、不消耗配额。
  • erased 删掉的;already_erased 之前已删过的;missing 不在这个库里的(都不报错,同一批重复删没有额外效果)。
  • unmapped:2026-11 之前写入、尚未与记忆引擎建立对应关系的消息,暂时删不了(不会只删一半)。
  • 记忆引擎暂时不可达时返回 502,且什么都没删,可原样重试。由其它服务托管的库返回 403。
POST/api/v1/memory/vaults/{vault_id}/messages/{memory_id}/correct

更正一条记忆消息:删掉原条,追加一条注明「更正」的新消息

请求体
{
  "message": "我住在杭州"
}
响应
{
  "erased": "0197c9b0-…",
  "correction_memory_id": "0197d1e4-…",
  "pipeline": "ok",
  "derived_cleanup_failed": false
}
  • 新消息以 user 角色追加在库末尾,正文形如「【更正】2026-07-16 20:01(北京时间)记下的一条内容已删除,以此为准:我住在杭州」,召回时只会看到更正后的内容。
  • 原条已删过返回 409;不在库里返回 404。更正写入按「写入」计费(摘要),删除本身不计费。

查询与写入

核心记忆管线:append 写入消息并整理进记忆,query 做语义召回。典型的一轮 Agent 对话 = query(取上下文)→ 生成回复 → append-user-message + append-assistant-message(写回记忆)。

POST/api/v1/memory/append-user-message

写入一条用户消息(进入记忆管线)

请求体
{
  "library_id": "0197c9a2-…",
  "message": "我喜欢深色模式"
}
响应
{
  "status": "ok",
  "memory_id": "0197c9b0-…",
  "pipeline": "ok"
}
  • pipeline 为 degraded 表示记忆引擎暂时不可用:消息已保存进记忆库的消息列表,但没有进入记忆管线,也不会自动补入,因此不会被语义召回。需要被召回的内容请在恢复后重新写入。
  • 记忆管线处理消息时会调用模型,按 token 以配额计费(见「配额与计费」)。扣费被拒时返回 402:{"error_code": "INSUFFICIENT_BALANCE", "error": "…", "memory_id": "…", "pipeline": "denied"}——消息同样已保存进消息列表、但没有进入记忆管线;处理好 error_code 对应的问题后重新写入。
POST/api/v1/memory/append-assistant-message

写入一条 AI 回复(与用户消息共同构成完整记忆)

请求体
{
  "library_id": "0197c9a2-…",
  "message": "好的,已为您切换深色模式。"
}
响应
{
  "status": "ok",
  "memory_id": "0197c9b1-…",
  "pipeline": "ok"
}
  • pipeline 的 degraded 与扣费被拒(402)同 append-user-message。
POST/api/v1/memory/query

语义查询相关记忆(本次查询写入历史,可被后续召回)

请求体
{
  "library_id": "0197c9a2-…",
  "message": "用户偏好是什么?"
}
响应
{
  "memory_id": "0197c9b2-…",
  "results": [ … 召回的记忆条目 … ],
  "degraded": false
}
  • results 为记忆引擎返回的召回条目数组(含相关记忆内容与元信息)。
  • degraded 为 true 表示记忆引擎降级:返回结果可能不完整,建议按普通上下文处理。
  • 召回快照会持久化到该条查询消息的 metadata.recalls 中,便于审计与回放。
  • 召回同样按模型 token 以配额计费。扣费被拒时返回 402({"error_code", "error", "memory_id"}),不会以 degraded 的空结果代替——请按 error_code 处理,不要当成「没想起来」。
POST/api/v1/memory/query-readonly

只读语义查询(不写入查询历史、不留痕)

请求体
{
  "library_id": "0197c9a2-…",
  "message": "用户偏好是什么?"
}
响应
{
  "results": [ … ],
  "degraded": false
}
  • 降级时返回 { "results": [], "messages": [ 最近消息列表 ], "degraded": true },可用 messages 兜底拼接上下文。
  • 扣费被拒时返回 402({"error_code", "error"}),与 query 相同。

对话生成 Chat

不想自己接大模型?让 MemoryEcho 直接代理一轮记忆增强的对话生成(经 Artific LLM Hub)。

POST/api/v1/memory/chat

记忆增强对话生成(经 LLM Hub,SSE 流式返回)

请求体
{
  "model": "deepseek-flash",
  "messages": [
    { "role": "user", "content": "帮我总结一下最近的偏好" }
  ],
  "stream": true
}
  • 只接受并转发以下字段:model(必填)、messages、stream、max_tokens、temperature、tools、thinking,其余字段会被忽略。含义与 LLM Hub 的 POST /api/v1/llm-hub/chat 相同(见 LLM Hub 文档)。
  • model 必须是 GET /api/v1/llm-hub/models 列出的公开模型:缺 model 返回 400;不在公开列表里返回 403 {"error": "model '…' is not available for direct use"};模型列表暂时取不到返回 503,稍后重试。
  • stream: true 时响应为 text/event-stream(SSE),否则为普通 JSON;两种形状与 LLM Hub /chat 相同。
  • 网关以服务身份调用 LLM Hub,模型用量按 LLM Hub 的模型价目以配额从您的账户扣除。
  • 扣费被拒时在调用模型之前返回 403(不是 402),响应体是 LLM Hub 的格式:{"detail": {"error_code": "INSUFFICIENT_BALANCE", "message": "…"}}。error_code 取值同「错误处理」里 402 的 PAYG_CONFIRM_REQUIRED / INSUFFICIENT_BALANCE / QUOTA_EXHAUSTED;对话不校验地区。

文件导入

将文档批量导入记忆库:Markdown、纯文本等格式解析、切分后写入记忆,导入过程通过 SSE 推送进度。

POST/api/v1/memory/vaults/{vault_id}/import_file

导入文件到记忆库(SSE 流式返回处理进度)

请求体
{
  "library_id": "0197c9a2-…",
  "file_name": "notes.md",
  "data_url": "data:text/markdown;base64,IyBO…",
  "preset": "default"
}
  • 文件以 data URL(base64)内联上传,请求体上限 16 MiB。
  • 响应为 text/event-stream:解析 → 切分 → 写入记忆的进度事件逐条推送。
  • 走 /vaults/{vault_id}/import_file 时 library_id 可省略(以路径为准)。
  • preset / running_mode / short_memory_style 为可选调优参数,默认即可。
  • 导入过程中调用模型同样按 token 以配额计费。扣费被拒时以一条 type 为 error 的终止事件结束,事件里带 error_code(取值同「错误处理」的 402),请据此处理而不是重试。
GET/api/v1/memory/files?library_id={id}

列出记忆库已导入的文件

GET/api/v1/memory/files/content?library_id={id}&attachment_id={aid}

获取已导入文件的原始内容(Content-Type 与原文件一致)

用量 Usage

查询本月在记忆服务上消耗了多少配额。扣费逐笔明细见 artific.social 钱包的配额流水。

GET/api/v1/memory/usage

本月记忆服务的配额消耗汇总

响应
{
  "vault_count": 3,
  "period": {
    "kind": "calendar_month",
    "start": "2026-10-01T00:00:00Z",
    "end": "2026-11-01T00:00:00Z"
  },
  "units_per_credit": 100000000,
  "memory_create": { "units": 4500000000000, "user_paid_units": 0, "count": 1 },
  "memory_query":  { "units": 120000000, "user_paid_units": 120000000, "count": 42 }
}
  • 金额是配额的存储单位:units ÷ units_per_credit(10^8)= 配额数。
  • memory_create 是建库的按次费;memory_query 是记忆管线(写入、召回、导入)的模型消耗。units 为净消耗(含套餐额度代付),user_paid_units 是其中从您账户余额扣的部分,count 为扣款笔数。
  • 统计窗口为本自然月(UTC),与按量付费的月上限同一窗口。只统计经 artific.social 记忆前台与 API Key 发起的调用。
  • 用量暂时取不到时返回 502 {"error": "usage_unavailable"},不会返回 0。

MCP 服务

支持 MCP(Model Context Protocol)的客户端(Claude Code、Claude Desktop、Cursor 等)可以直接把 MemoryEcho 接成工具: Streamable HTTP,地址 https://api.artific.social/api/v1/memory/mcp。 只接受 API Key(不认会话 Cookie),scope 同上;不带或无效返回 401。工具背后就是上面的 HTTP 接口,计费与权限完全相同。

Claude Code
claude mcp add --transport http memoryecho https://api.artific.social/api/v1/memory/mcp \
  --header "Authorization: Bearer as_xxxxxxxx_…"
通用配置(mcpServers)
{
  "mcpServers": {
    "memoryecho": {
      "type": "http",
      "url": "https://api.artific.social/api/v1/memory/mcp",
      "headers": { "Authorization": "Bearer as_xxxxxxxx_…" }
    }
  }
}
工具性质说明
memory_vaults只读列出你的记忆库(id、名称、条数)
memory_recall只读 · 计费按问题召回相关记忆,返回一段文本
memory_write写入 · 计费写入用户的一句话,同时返回相关记忆
memory_append_assistant写入写入助手的回复,构成完整的一轮
memory_messages只读按时间翻原始记录(带 memory_id),缺省最近 20 条
memory_delete删除按 memory_id 删除 1~50 条(不可恢复)
memory_correct删除 + 写入删掉一条并追加更正

由其它服务托管的库(如 GamEcho 的世界记忆)只能读。claude.ai 网页版的自定义连接器需要 OAuth 登录,目前尚不支持。

配额与计费

Artific 平台内以配额(Credit)结算:充值时把人民币或美元换成配额,套餐与按次计费都以配额计价。下表的法币金额按当前价目(1,000,000 配额 = ¥72 = $11.11)折算,仅供参考,以配额数为准。订阅按 28 天为一个计费周期,主套餐互斥(升级即时生效、降级于周期末生效)。套餐购买与管理见 订阅中心。

套餐价格约合权益
入门版 starter500,000 配额 / 28天约 ¥36 / $5.563 个记忆库 · 50 MB 存储 · 1,000 次记忆查询 · 2,000 次 API 调用
标准版 standard1,500,000 配额 / 28天约 ¥108 / $16.6710 个记忆库 · 500 MB 存储 · 10,000 次记忆查询 · 20,000 次 API 调用

按次 / 按量计费

创建记忆库45,000 配额 / 个约 ¥3.24 / $0.50
写入 / 召回 / 文件导入按记忆管线所用模型的价目随 token 数
对话生成 chat按 LLM Hub 模型价目随模型与 token 数

写入(append)、语义查询(query)与文件导入不收按次费,但记忆管线处理时调用的模型按 token 以配额计费,有套餐时先用套餐额度。建库与上述模型消耗都要先经配额服务预授权(建库要求已确认所在地区);从账户余额扣费时还需已开启按量付费且余额充足,否则返回 402(原因见「错误处理」的 error_code)。本月消耗用 GET /api/v1/memory/usage 查询,逐笔明细可在 artific.social 钱包的配额流水里查看。

错误处理

错误响应为裸 JSON:{"error": "描述信息"}(无统一 envelope 包装)。计费被拒(402)另带机器可读的 error_code:{"error_code": "REGION_REQUIRED", "error": "…"}(写入 / 查询还会带 memory_id),请按 error_code 分支处理,不要解析 error 文案。

状态码error / error_code处理建议
401unauthorizedAPI Key 无效 / 已撤销 / 已过期,或会话过期。带了 as_ 前缀的 Key 只按 Key 校验、不会回退到会话。检查 Key 或重新登录 artific.social。
402(适用接口)建库、append、query、query-readonly 的扣费被拒;文件导入则以带 error_code 的 SSE error 事件结束。下面四行是 error_code 的取值,配额服务以后可能新增取值,未识别的请按通用的计费失败提示。
402error_code: REGION_REQUIRED账户尚未确认所在地区(决定按哪种币种与价目结算)。登录 artific.social 按提示选择地区后重试。
402error_code: PAYG_CONFIRM_REQUIRED需要从账户配额余额扣费,但尚未开启按量付费。在 artific.social 开启按量付费后重试。
402error_code: INSUFFICIENT_BALANCE配额余额不足。充值后重试。
402error_code: QUOTA_EXHAUSTED本月按量付费已达您设置的上限。调高上限或等待下月。
403forbidden / insufficient scope: …访问了不属于当前用户的记忆库,或 API Key 设置了 scope 但不含 memory(见「认证」一节)。对话接口 /chat 扣费被拒也返回 403,body 为 {"detail": {"error_code", "message"}}(见「对话生成」)。
403model '…' is not available for direct use/chat 指定的模型不在公开模型列表里。换用 GET /api/v1/llm-hub/models 列出的模型。
404not found记忆库或资源不存在(含已删除)。
413payload too large请求体超限(文件导入上限 16 MiB)。
503api key verification unavailableAPI Key 校验服务暂时不可用(不代表 Key 无效,请勿因此换 Key),稍后重试。
503model list unavailable, try again later/chat 暂时取不到公开模型列表,稍后重试。
500 / 502internal error / upstream error服务端错误或记忆引擎暂时不可用;读写接口会尽量以 degraded 模式响应而非直接失败。

路线图

  • 事件订阅 —— 记忆创建 / 导入等事件的 Webhook 推送。
  • 官方 SDK —— Python / TypeScript 客户端库。
© 2026 Artific Socius, Inc. · MemoryEcho 意回文档基于 memory_echo 网关当前版本编写 · 最后更新 2026-11