Skip to main content
Memory Stores

Memory Store 数据结构

Forward Memory Store API 共用的数据结构、字段约束和挂载规则。

Forward Memory Store 相关接口共用的三个对象结构。层级关系:Memory Store → Memory → Memory Version
层级ID 前缀说明
Memory Storememstore_记忆库容器,本身不存内容,可挂载到 (identity, template)
Memorymem_库内一条记忆,由相对 path 标识,承载实际 content
Memory Versionmemver_每次创建、更新、删除 memory 时自动生成的版本快照,不可修改。

Memory Store 对象

{
  "id": "memstore_00mc7mukn7lkxr454tjd",
  "type": "memory_store",
  "name": "project-alpha-memory",
  "description": "Alpha 项目的 Agent 知识库",
  "status": "active",
  "entry_count": 12,
  "total_size": 4096,
  "metadata": {
    "team": "backend",
    "created_by": "forward"
  },
  "system_managed": false,
  "identity_id": null,
  "created_at": "2026-08-14T10:00:00Z",
  "updated_at": "2026-08-14T10:00:00Z",
  "archived_at": null,
  "binding_info": {
    "identity_template_count": 1
  }
}
字段类型说明
idstringMemory Store ID,前缀 memstore_
typestring固定为 memory_store
namestringStore 展示名。
descriptionstringStore 描述。
statusstringactivearchived
entry_countintegerStore 中的 memory 条目数量。
total_sizeinteger所有 memory 内容的总字节数。
metadataobject元数据。始终包含服务端注入的 created_by=forward
system_managedbooleantrue 表示系统在 Session 创建时为 (identity, template) 自动配的默认库;用户显式创建的为 false
identity_idstring/null系统默认库指向所属 identity;用户创建的库为 null
created_atstring创建时间,RFC 3339 格式。
updated_atstring最后更新时间,RFC 3339 格式。
archived_atstring/null归档时间,未归档为 null
binding_info.identity_template_countinteger当前挂载该 Store 的 (identity, template) 数量。归档和删除会检查该值。

Store metadata 约束

约束
最大键数15
键长度1..64 字符
值类型必须为字符串
值长度≤512 字符
保留键created_by 由服务端注入为 "forward";调用方传入返回 400
上游硬上限为 16 键,Forward 在写入侧注入 created_by 占用一个键位,因此调用方可用 15 键。

Memory 对象

{
  "id": "mem_00mc7mvag5u68kkfvxhy",
  "type": "memory",
  "memory_store_id": "memstore_00mc7mukn7lkxr454tjd",
  "path": "decisions/arch-choice.md",
  "content": "# 架构决策\n\n选择微服务架构。",
  "content_size_bytes": 99,
  "content_sha256": "1712de0d497a5aeef2beeccf4fbb7d5a16944975438d0c25447b9c1fba13099a",
  "metadata": {
    "owner": "backend-team"
  },
  "created_at": "2026-08-14T10:00:00Z",
  "updated_at": "2026-08-14T10:00:00Z"
}
字段类型说明
idstringMemory ID,前缀 mem_
typestring固定为 memory
memory_store_idstring所属 Memory Store ID。
pathstring库内相对路径,大小写敏感。
contentstring/null内容明文(UTF-8)。仅单条查询、创建、更新接口返回;列表接口不返回该字段。
content_size_bytesinteger内容字节数。
content_sha256string内容的 SHA-256,可用于乐观并发控制。
metadataobject元数据。
created_atstring创建时间,RFC 3339 格式。
updated_atstring最后更新时间,RFC 3339 格式。

path 规则

约束
必须为相对路径不能以 / 开头
最大长度1024 字节
最大段数58
每段长度≤255 字节
禁止的段空段、...、首尾带空白的段
禁止字符\、NUL
大小写敏感
合法:notes/meeting-2026-08-14.mdconfig.yaml 非法:/notes/meeting.mda/../bnotes//x.md

content 约束

约束
编码UTF-8 明文,非 base64
最大字节100 KiB(按原始请求字节计算)
控制字符不允许非打印控制字符(U+0000U+001FU+007F),换行 \n、回车 \r、制表 \t 除外

Memory metadata 约束

约束
最大键数16
键长度1..64 字符
值类型必须为字符串
值长度≤512 字符
保留键无。Forward 不在条目层注入 created_by,该键名可作为普通键使用,值原样保存并回显
Agent 自身的记忆写入会把条目 metadata 整体替换为 {"source":"agent"},通过本 API 设置的 metadata 可能被正常 Agent 活动清除。

Memory Version 对象

{
  "id": "memver_00mc7mw0t337kbcx5q52",
  "type": "memory_version",
  "memory_store_id": "memstore_00mc7mukn7lkxr454tjd",
  "memory_id": "mem_00mc7mvag5u68kkfvxhy",
  "path": "decisions/arch-choice.md",
  "content": "# 架构决策\n\n选择微服务架构。",
  "content_size_bytes": 99,
  "content_sha256": "1712de0d497a5aeef2beeccf4fbb7d5a16944975438d0c25447b9c1fba13099a",
  "operation": "updated",
  "redacted": false,
  "redacted_at": null,
  "created_at": "2026-08-14T10:00:00Z"
}
字段类型说明
idstringMemory Version ID,前缀 memver_
typestring固定为 memory_version
memory_store_idstring所属 Memory Store ID。
memory_idstring所属 Memory ID。
pathstring该版本对应的 memory 路径。
contentstring/null版本内容。仅单条查询接口返回;列表接口不返回。已 redact 的版本为 null
content_size_bytesinteger版本内容字节数。
content_sha256string版本内容的 SHA-256。
operationstring产生该版本的操作:createdupdateddeleted
redactedboolean是否已脱敏。
redacted_atstring/null脱敏时间,未脱敏为 null
created_atstring版本生成时间,RFC 3339 格式。

Memory Store 挂载对象

(identity, template) 上的一条挂载记录。
{
  "memory_store_id": "memstore_00mc7mukn7lkxr454tjd",
  "identity_id": "idn_63ee28747a35cff93771c491",
  "template_id": "tmpl_eb3377fb74ad413e17b3d755",
  "access": "read_only",
  "system_managed": false,
  "name": "team-a",
  "status": "active",
  "entry_count": 12,
  "created_at": "2026-08-14T10:00:00Z"
}
字段类型说明
memory_store_idstring挂载的 Memory Store ID。
identity_idstring挂载所属 identity。
template_idstring挂载所属 template。
accessstringread_writeread_only。见下方访问权限说明。
system_managedbooleantrue 表示系统自动配的默认库槽位。
namestring挂载库的展示名,取自 Store 实体。best-effort:Store 不可读时为空串。
statusstring挂载库的状态(active / archived),取自 Store 实体。best-effort:Store 不可读时为空串。
entry_countinteger挂载库的 memory 条目数,取自 Store 实体。best-effort:Store 不可读时为 0
created_atstring挂载建立时间,RFC 3339 格式。

访问权限与挂载上限

规则说明
唯一可写库系统默认库(system_managed=true)是唯一以 read_write 注入 Session 的库。
显式挂载权限用户显式挂载的库一律 read_only,Agent 能读但写不进去。
挂载上限同一 (identity, template) 最多挂载 10 个显式库,不含默认槽位。
列表顺序默认库排第一,其余按挂载时间升序。
之所以强制「恰好一个可写」:多个可写库同时挂载时,上游选择写入目标的查询没有确定排序,写入落点会不可预测。

在 Session 中的可见形态

Session 创建时,Forward 会把该 (identity, template) 上所有活跃挂载注入到会话资源中。所有库的 memory 会path 合并成一个扁平命名空间挂载到 sandbox:
/data/.qoder/awareness/<memory.path>
沙箱内没有 memory_store / mem_ 这些命名层级,Agent 只能按 path 直接读取文件。多个库中相同 path 会相互遮蔽,遮蔽顺序按挂载建立时间稳定,但不直观 —— 建议为不同库使用不同的 path 前缀。
自托管 Environment 上不加载:当 Session 运行在自托管 Environment(config.type=self_hosted)上时,Forward 不会向 Session 注入任何 memory store。挂载关系不受影响——挂载接口照常返回,库与条目仍可通过 Memory Store 相关 API 正常读写;只是 Agent 沙箱内看不到这些记忆。需要 Agent 使用记忆时,请在托管(cloud)Environment 上运行 Session。
Memory Store 数据结构 - Qoder