跳到正文

12|记忆底座实施方案:百炼记忆机制对标与 mem0 落地(#21) ​

一句话:对标百炼记忆库(长期记忆 2.0)机制,基于 mem0 + Qdrant + 自建补强 落地企业级记忆底座——事实记忆、用户画像、技能记忆三类记忆 + 异步提取 + 白盒观测审计,闭环"对话 → 提取 → 检索注入 → 更好对话"的数据飞轮。 状态:设计审核稿(2026-10-26),尚未实证;实证计划见第八、九章 前置:10 篇选型(Memory → mem0 + Qdrant);11 篇知识库落地实证(同专栏,复用其模型供应/服务化模式) 生产链路:Agent → Higress → AuthZ/Credential Broker → Memory Service → mem0/Qdrant。记忆服务不得直接暴露给 Agent;user_id 必须由签名身份上下文派生,不能信任请求体自报。详见 05-AI基础设施架构审核与生产收敛.md。


一、百炼记忆库机制精读(对标基准,2026-10 官方口径) ​

百炼记忆库是长期记忆功能的全面升级版,核心叙事四句话:自动提取与持久化、动态更新机制、精细化遗忘控制、白盒化的记忆配置。

1.1 三类记忆(提取产物,非对话原文) ​

记忆类型提取来源存储形态适用场景示例
事实记忆(observation)对话内容自动提取关键事件/信息片段记忆节点(memory_node),内容经模型改写动态事件信息"用户每天上午9点需要喝水提醒"
用户画像(user_profile)基于自定义模板(profile_schema)提取结构化属性画像模板 × 字段值固定用户属性年龄、职业、爱好
技能记忆(skill)从可复用轨迹(tool_calls)归纳任务方法技能节点(名称/描述/内容)相似任务复用"如何用 MCP 检索企业知识库"

关键语义:AddMemory 不把输入原文当存储单元——对话输入被抽取为多条观察型节点,内容经过改写;custom_content 输入则保留为一条节点。写入后核对必须以 ListMemory 返回为准。

1.2 "设置记忆提取" = 记忆规则配置(白盒) ​

每个记忆库最多 50 条事实记忆规则 + 50 条用户画像规则,预置"默认项目"事实规则(180 天,可编辑不可删):

事实记忆规则:

参数说明
规则名称记忆抽取规则唯一标识
规则指令定义记忆抽取策略:默认规则指令(推荐)或自定义规则指令
自动更新开启后模型自动更新已有记忆(内置冲突解决);默认开启
记忆过期时间7 天 / 30 天 / 180 天 / 永不过期
记忆抽取策略版本Pro(¥0.03/次,开启 Rerank)或 Lite(¥0.018/次)

用户画像规则(逐字段定义,引导模型提取):

参数说明
字段名称抽取出的画像包含哪些字段(语义化,便于标签提取/聚合)
描述该字段含义的自然语言描述,提示模型提取
初始值用户尚未提供信息时的默认值
抽取策略版本Pro / Lite

1.3 提取与检索机制(工程实现基准) ​

  • 提取是异步的:AddMemoryAsync 立即返回 event_id,GetEvent 轮询终态(PENDING → RUNNING → SUCCEEDED/FAILED);CLI 实测写入 20-35 秒、读取 0.8-0.9 秒——差一个量级,调用侧需区分超时策略
  • 检索入参:SearchMemory 用 messages(对话记录)做语义检索 + top_k(最大召回)+ min_score(Pro 版最小分数阈值,默认 0.3)
  • 检索优化项(官方 FAQ):相似度阈值建议 0.5~0.7、开启"意图判别召回"、开启"改写"和"排序"、合理设置最大召回数量
  • 隔离:百炼以 user_id(记忆实体)为维度隔离,也支持 project_id 多项目并行抽取(最多 5 个)。这是产品侧记忆实体口径,不能直接当作企业授权:自建时必须在其上增加 tenant_id 与来源可信校验
  • 限流:全部接口 3000 QPM(账号级)/ add 120 QPM / search 300 QPM
  • 多模态:messages[].content 支持 text + image_url(多模态项目解析图片)
  • 技能抽取:仅解析 tool_calls 工具消息(OpenAI 格式),用于 skill 抽取,其他抽取类型过滤

1.4 API 面(对标基准) ​

Base:https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v2/apps/memory/,鉴权 Authorization: Bearer <API_KEY>。

事实记忆(9 接口):AddMemory(POST /add)、AddMemoryAsync(POST /add-async)、GetEvent(GET /events/{id})、ListMemory(GET /memory_nodes)、SearchMemory(POST /memory_nodes/search)、GetMemoryNode(GET /memory_nodes/{id})、GetSkillExport(GET /skill/export/{id})、UpdateMemory(PATCH /memory_nodes/{id})、DeleteMemory(DELETE /memory_nodes/{id})

用户画像(5 接口):CreateProfileSchema(POST /profile_schemas)、ListProfileSchemas(GET)、GetProfileSchema(GET /{id})、UpdateProfileSchema(PATCH /{id})、GetUserProfile(GET /profile_schemas/{id}/user_profile)

另注意:百炼还有长期记忆(旧版)的"记忆片段 + 记忆变量"模型——记忆变量是键值对(权重高于片段,可模型推理或人工输入),用于校准记忆片段的不完整性。新版记忆库未显式保留此概念,但"结构化字段覆盖"的语义由用户画像承接。


二、我们选型与差距判定(#21 基线) ​

10 篇选型:Memory 层用 mem0(Apache-2.0,官方 mem0-mcp) + Qdrant(向量存储,payload 多租户);进阶 Zep/Graphiti 时序知识图谱(后置)。

机制对标结论(敢说):

#百炼机制mem0 落点判定
M-1事实记忆自动提取(LLM 抽取 + 改写)mem0 默认提取器(LLM + 事实抽取 prompt)✅ 原生对齐
M-2语义检索(min_score 阈值)mem0 search + Qdrant score 阈值✅ 原生对齐
M-3记忆管理 API(增删改查)mem0 add/search/update/delete API✅ 原生对齐
M-4user_id 记忆实体隔离mem0 user_id 参数 + Qdrant payload 过滤⚠️ 原生有实体过滤,但 user_id 不能作为鉴权依据;必须由网关签名上下文派生
M-5多项目并行抽取(project_id)mem0 无原生 → Qdrant payload project_id + 查询过滤⏳ 轻量补强
M-6记忆过期时间(7/30/180 天)mem0 无原生 TTL → 定时回收任务(Qdrant 按 created_at 清理)⏳ 需补(回收器)
M-7用户画像(模板 + 字段级提取)mem0 无原生画像 → 自建 profile_schema 表 + 字段提取 prompt❌ 主要补强点
M-8技能记忆(轨迹归纳)mem0 无原生 → 自建 tool_calls 轨迹抽取(可借 LangMem procedural)❌ 主要补强点
M-9记忆变量(键值对,权重高于片段)mem0 无原生 → Qdrant payload variables 或独立表⏳ 需补
M-10异步提取 + 事件轮询(AddAsync/GetEvent)mem0 同步调用 → 自建任务队列(NATS)+ 状态表⏳ 工程化
M-11观测/审计(会话↔记忆变更对照、前后快照)自建 → 记忆变更表(event + old/new 快照)⏳ 需补
M-12白盒规则可视化(记忆规则配置页)自建管理面 → 挂 HiMarket 门户皮⏳ 与门户皮一起长
M-13Pro/Lite 策略版本(Rerank)mem0 无原生 → Qdrant 检索后接 reranker(可选)⏳ 可选增强

补强模块定级:画像(M-7)、技能记忆(M-8) 是能力空白必须自建;异步提取(M-10)、观测审计(M-11)、过期回收(M-6) 是工程化必做;规则可视化(M-12) 挂门户皮。


三、架构设计:记忆服务(对标百炼记忆库) ​

3.1 部署拓扑 ​

3.2 组件职责 ​

组件选型职责
记忆服务 APIFastAPI(复用 emb-service 模式)暴露百炼兼容记忆 API 面(add/add-async/events/memory_nodes/profile_schemas/user_profile)
提取队列NATS(已有 docker-nats-1)+ 状态表异步任务:提交 → PENDING → RUNNING → SUCCEEDED/FAILED,event_id 轮询
事实提取器mem0 默认提取器LLM 从对话抽取观察节点(改写内容,非原文)
画像提取器自建按 profile_schema 字段定义,LLM 结构化提取属性
技能归纳器自建(+ LangMem procedural)从 tool_calls 轨迹归纳技能节点
身份/授权Higress + AuthZ/Credential Broker校验 Consumer、订阅、工具白名单;派生 tenant_id/owner_subject_id;不信任请求体 user_id
向量存储Qdrantembedding 存储 + payload 隔离(tenant_id/owner_subject_id/project_id/type/visibility)
元数据MySQL画像模板、记忆规则、变更审计、事件状态
embedding复用 11 篇本地 TEI 服务(bge-m3 1024 维)记忆向量化(同一套模型,别起第二套)

3.3 隔离与信任模型 ​

text
tenant_id > owner_subject_id > project_id > memory_type > visibility
  • 每一级过滤由 Memory Service 服务端强制注入,客户端只能传“断言”,不能扩大范围;
  • owner_subject_id 来自 OIDC subject 或受控 Agent 委托身份,不等于请求体 user_id;
  • visibility 只允许 private / project / tenant,跨用户共享必须显式授权并记录来源;
  • 共享记忆、技能记忆与画像的读取分别授权,不能用“能读事实记忆”推导“能读画像/技能”;
  • 管理员排障需走审批与审计,不能默认拥有全租户明文读取权限。

四、API 设计(对标百炼 14 接口) ​

4.1 事实记忆 ​

text
POST   /api/v2/memory/add              # 同步添加(轻量场景)
POST   /api/v2/memory/add-async        # 异步提交(推荐,返回 event_id)
GET    /api/v2/memory/events/{event_id}# 查询提取任务状态/结果
GET    /api/v2/memory/memory_nodes     # 分页列出记忆(ListMemory)
POST   /api/v2/memory/memory_nodes/search  # 语义检索
GET    /api/v2/memory/memory_nodes/{id}    # 单节点详情
GET    /api/v2/memory/skill/export/{id}    # 导出技能节点
PATCH  /api/v2/memory/memory_nodes/{id}    # 更新记忆
DELETE /api/v2/memory/memory_nodes/{id}    # 删除记忆

4.2 用户画像 ​

text
POST   /api/v2/memory/profile_schemas     # 创建画像模板
GET    /api/v2/memory/profile_schemas     # 模板列表
GET    /api/v2/memory/profile_schemas/{id}# 模板详情
PATCH  /api/v2/memory/profile_schemas/{id}# 更新模板
GET    /api/v2/memory/profile_schemas/{id}/user_profile  # 获取用户画像

4.3 核心请求/响应(对齐百炼语义) ​

json
// 异步添加记忆(对齐百炼 AddMemoryAsync)
POST /api/v2/memory/add-async
{
  // user_id 仅为“断言”,服务端必须与签名上下文一致;不一致直接 403
  "user_id": "emp_001",
  "project_ids": ["project_kb"],
  "messages": [
    {"role": "user", "content": "我偏好用中文回复,每周一需要生成周报。"},
    {"role": "assistant", "content": "好的,已记录。"}
  ],
  "profile_schema": "schema_emp_basic",
  "meta_data": {"dept": "platform"}
}
// 响应:{"event_id": "evt_xxx", "status": "PENDING"}

// 查询事件
GET /api/v2/memory/events/evt_xxx
// {"status": "SUCCEEDED", "result": [{"memory_node_id": "...", "content": "用户偏好中文回复", "event": "ADD"}]}

// 语义检索(对齐百炼 SearchMemory)
POST /api/v2/memory/memory_nodes/search
{
  "user_id": "emp_001",
  "messages": [{"role": "user", "content": "帮我写这周的周报"}],
  "top_k": 5,
  "min_score": 0.3
}

身份约束:tenant_id、owner_subject_id、consumer_id 一律从已签名上下文派生,不放在请求体、不接受客户端覆盖。请求体中的 user_id/project_ids 只作一致性断言;Agent 委托场景使用平台签发的委托令牌,不能直接冒用员工 user_id。


五、补强模块设计(自建部分) ​

5.1 用户画像(M-7,核心补强) ​

sql
-- 画像模板表
CREATE TABLE profile_schema (
  id            VARCHAR(32) PRIMARY KEY,
  tenant_id     VARCHAR(64) NOT NULL,
  name          VARCHAR(64) NOT NULL,
  description   VARCHAR(256),
  extract_scene VARCHAR(16) DEFAULT 'efficient',
  visibility    VARCHAR(16) NOT NULL DEFAULT 'private', -- private / project / tenant
  owner_subject_id VARCHAR(64) NOT NULL,
  created_by    VARCHAR(64) NOT NULL,
  created_at    DATETIME DEFAULT CURRENT_TIMESTAMP,
  UNIQUE KEY uk_tenant_name (tenant_id, name)
);

-- 画像字段表(逐字段定义,引导模型提取)
CREATE TABLE profile_attribute (
  id            VARCHAR(32) PRIMARY KEY,
  schema_id     VARCHAR(32) NOT NULL,
  name          VARCHAR(64) NOT NULL,
  description   VARCHAR(256),
  init_value    VARCHAR(128),
  is_reasoning  TINYINT DEFAULT 1,   -- 是否模型推理自动更新
  sort          INT DEFAULT 0
);

-- 用户画像值表(user_id × 字段)
CREATE TABLE user_profile (
  tenant_id     VARCHAR(64) NOT NULL,
  schema_id     VARCHAR(32) NOT NULL,
  subject_type  VARCHAR(16) NOT NULL DEFAULT 'human',  -- human / agent
  subject_id    VARCHAR(64) NOT NULL,                  -- OIDC subject 或受控 Agent 身份
  attr_name     VARCHAR(64) NOT NULL,
  attr_value    VARCHAR(256),
  updated_by    VARCHAR(64) NOT NULL,
  updated_at    DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (tenant_id, schema_id, subject_type, subject_id, attr_name)
);

提取逻辑:add-async 任务中,若请求带 profile_schema,先校验该 schema 属于当前 tenant_id 且调用者有权使用;再由画像提取器按字段定义构造 prompt,异步回填 user_profile。禁止跨租户复用 profile_schema,禁止把 Agent 推断值写成人类 subject_id 的属性;敏感字段需按策略脱敏或拒绝提取。

5.2 技能记忆(M-8,核心补强) ​

数据源:agentscope / opencode 轨迹中的 tool_calls(OpenAI 格式)+ 任务结果。

字段说明
skill_node_id技能节点 ID
tenant_id / owner_subject_id / project_id归属与隔离;租户必须由签名上下文派生
skill_name归纳出的技能名称
skill_description技能描述
skill_content可复用方法/步骤(LLM 归纳)
source_trajectory来源轨迹引用(可溯源)
tags标签数组
visibilityprivate / project / tenant;默认 private,不跨用户共享
trust_level来源可信度(人工确认 / 自动归纳 / 外部导入)
review_statusdraft / pending_review / approved / rejected;发布到市场前必须审核

归纳流程:轨迹 → LLM 归纳(任务目标 + 工具调用序列 + 结果 → 技能名称/描述/步骤)→ 冲突与敏感内容检查 → 向量化存 Qdrant(type=skill)→ 人工审核通过后才可发布/导出。技能记忆属于可执行知识,默认不跨用户共享,避免把个人习惯或恶意步骤扩散为组织能力。

5.3 异步提取与事件轮询(M-10) ​

text
任务状态:PENDING → RUNNING → SUCCEEDED / FAILED
表:memory_task(event_id / tenant_id / owner_subject_id / project_ids / idempotency_key /
                messages_ref / status / attempt / next_retry_at / error_code / result_ref / created_at)
队列:NATS JetStream(持久化)+ 消费组;subject "memory.extract"
去重:tenant_id + idempotency_key 唯一约束;重复提交返回同一 event_id

必须补齐的工程约束:

  • 幂等:同一 idempotency_key 只产生一个任务与一组记忆节点;worker 重投递不重复写入;
  • 可靠投递:业务表写任务与发消息用 outbox(或事务消息);消费失败按指数退避重试,超过上限进入 DLQ 并告警;
  • 毒消息隔离:解析失败/超大消息/异常轨迹进入隔离区,不阻塞主队列;人工可重放;
  • 成本预算:按租户/项目设置抽取 token 与调用次数预算;超限降级为“只存原文摘要”或拒绝,避免长对话拖垮账单;
  • 长对话:按窗口分段抽取并做跨段去重/合并;禁止把整段超长对话一次性塞给模型;
  • 调用侧规范:写入类 20-35 秒量级,重试前先 GetEvent 确认是否已落库,避免重复抽取产生冗余节点。

5.4 观测审计(M-11) ​

sql
-- 记忆变更审计(前后快照)
CREATE TABLE memory_audit (
  id             BIGINT AUTO_INCREMENT PRIMARY KEY,
  tenant_id      VARCHAR(64) NOT NULL,
  owner_subject_id VARCHAR(64) NOT NULL,
  actor_id       VARCHAR(64) NOT NULL,       -- 人类 subject / Agent 委托身份
  service_id     VARCHAR(64) NOT NULL,       -- 调用方工作负载
  trace_id       VARCHAR(64) NOT NULL,
  request_id     VARCHAR(64) NOT NULL,
  memory_node_id VARCHAR(32),
  event          VARCHAR(8),      -- ADD / UPDATE / DELETE
  old_content_hash CHAR(64),       -- 原文不落审计表,按合规策略存加密快照
  new_content_hash CHAR(64),
  source         VARCHAR(64),      -- conversation / api / connector / admin
  reason         VARCHAR(256),
  created_at     DATETIME NOT NULL
);

审计约束:

  • 审计事件必须可按 tenant_id + owner_subject_id + trace_id 关联到一次请求,禁止只记 user_id;
  • 审计表采用只追加模型,应用账号无 UPDATE/DELETE 权限;通过独立归档/对象锁满足不可篡改;
  • 审计保留期与业务数据删除策略分开:合规保留可冻结,但必须支持 legal hold 白名单与审批;
  • 原文含 PII 时不直接落审计表,存加密快照或哈希;查询面按角色脱敏;
  • 观测面:会话 ↔ 记忆变更对照;审计面:变更事件、前后哈希、调用者、来源与原因。

5.5 过期回收(M-6) ​

text
规则:事实记忆规则配置过期时间(7/30/180/永不过期)
回收器:定时任务扫描 Qdrant(按 type + created_at + rule_ttl)→ 删除过期节点 + 审计记录

删除语义(必须按“可验证删除”设计,而不是只删一条向量):

text
状态机:ACTIVE → DELETING → DELETED
                 └→ LEGAL_HOLD(合规冻结,暂停物理删除)
                 └→ FAILED(可重试)
  • 覆盖范围:Qdrant point、MySQL 记忆/画像/任务记录、缓存与派生摘要、检索结果快照、技能导出副本;
  • 删除任务必须幂等,记录 delete_task_id / 影响条数 / 各存储结果 / 完成时间,供用户或管理员验证;
  • 删除完成后再次检索必须为 0 命中;缓存 TTL 不得导致“已删除仍可召回”;
  • 备份与归档按保留策略处理:文档需明确“备份中的副本何时失效”,不能宣称立即物理消失;
  • LEGAL_HOLD 只允许合规角色设置,必须记录原因、审批人与解除时间;冻结不等于普通删除失败;
  • 审计不可篡改与“删除用户内容”并不矛盾:审计存哈希/加密快照,按法规与保留策略处理。

5.6 记忆投毒与 Prompt Injection 防护(生产必补) ​

风险防护
恶意对话写入虚假事实记录来源与可信度;低可信来源不自动覆盖高可信记忆;冲突进入待确认队列
外部文档/网页注入指令记忆与检索结果一律视为数据,不作为系统指令;注入检测与内容隔离
技能记忆被投毒技能默认 private;发布到市场前人工审核;执行前做工具白名单与参数校验
跨用户污染tenant_id/owner_subject_id 强制过滤;共享记忆必须显式授权并标注来源
敏感信息沉淀写入前 PII/密钥检测;命中策略则脱敏、拒绝或转人工
记忆无限增长TTL、置信度衰减、去重合并、按项目配额;定期离线评估

记忆不是“可信系统提示”。检索到的记忆必须带来源、时间与置信度,并在上下文中明确标记为不可信数据;任何来自记忆的工具调用或权限变更都必须重新经过授权链。


六、数据飞轮闭环(叙事主线) ​

闭环验证指标:跨会话上下文连续(同一用户新会话能引用历史偏好)、画像字段随对话更新、技能复用率(同一任务二次执行命中技能记忆)、审计可追溯。生产还必须同时看负向指标:跨租户越权率=0、删除完成率=100%、重复写入率、抽取失败率、DLQ 积压、单用户/单租户抽取成本、记忆冲突率与人工纠正率。


七、实施路线(P0/P1/P2) ​

优先级里程碑交付物判定
P0-0网关身份与凭证链Higress 路由 + AuthZ/Credential Broker + Consumer 校验伪造 user_id/tenant_id 被拒;无凭证直连被拒
P0-1mem0 服务化 + Qdrant 起栈记忆服务 API(add/search/update/delete/list)+ Qdrant事实记忆链路(写入→检索→更新→删除)可重复执行
P0-2用户画像补强profile_schema 三表 + 画像提取器租户内模板、字段提取、跨租户拒绝
P0-3异步提取工程化add-async + GetEvent + NATS JetStream + outbox + DLQ幂等、重试、毒消息隔离、成本上限可验证
P0-4隔离与删除闸门ACL 过滤 + 删除状态机 + 负向测试集跨租户/跨用户 0 命中;删除后 0 召回
P1-1技能记忆轨迹归纳器 + skill 节点 + 审核流默认 private;发布需审核;工具白名单生效
P1-2观测审计memory_audit + 查询面 + 保留策略按 trace 可追溯;审计只追加;PII 脱敏
P1-3投毒防护来源可信度 + 冲突检测 + 注入检测毒文档/恶意记忆不覆盖高可信事实
P2门户皮整合记忆规则配置页 + 观测审计页(HiMarket 管理面)白盒可视化(M-12)
P2HA / 容量 / 灾备Qdrant/MySQL/NATS 高可用、备份恢复演练达到 SLO;RPO/RTO 有实测
P2时序图谱(可选)Zep/Graphiti 接入评估记忆关系/演进分析

八、实证计划(计划,不是已通过) ​

当前状态:未实证。下述步骤完成并留下日志/报告后,才能把状态从“设计”改为“POC 通过”;生产通过还需 05 篇的闸门。

8.1 最小链路 ​

  1. 环境:Qdrant Docker(6333/6334);复用本地 TEI embedding(9005)+ MySQL + NATS JetStream;
  2. 记忆服务:D:\build\mem-service(venv + FastAPI + mem0 + qdrant-client),参考 11 篇 emb-service 模式;
  3. 正向链路:add → add-async/GetEvent → search(带 min_score)→ update/delete → 画像(CreateProfileSchema/GetUserProfile)→ 审计查询;
  4. 证据沉淀:本专栏 13 篇(记忆底座实证),沿用“curl + 代码 + 可渲染 mermaid”,同时记录失败与限制。

8.2 必须补的负向与工程验证 ​

类别用例通过标准
身份防伪请求体伪造 user_id、tenant_id、project_id与签名上下文不一致即 403;不产生写入
跨租户隔离租户 A 的 Consumer 检索租户 B 的记忆0 命中;审计记录拒绝
跨用户隔离同租户 A 用户读取 B 的私有记忆0 命中;技能默认不可见
删除验证删除事实/画像/技能后再次 search所有存储均 0 召回;删除任务状态可查
幂等同一 idempotency_key 重复提交/worker 重投只产生一组节点;event_id 一致
抽取失败LLM 超时、限流、返回非法 JSON重试/退避/进入 DLQ;不写入半成品
毒消息超大对话、循环 tool_calls、注入文本隔离且不阻塞主队列;有告警
投毒恶意记忆尝试覆盖高可信事实冲突进入待确认;高可信事实不被静默覆盖
成本长对话/高频写入触发预算上限时降级或拒绝;账单可预测
审计任一写入/删除可按 trace_id 查到 actor/service/source/前后哈希

判定:上述任一项未通过,不得宣称“记忆底座可用”;生产上线还需 HA、备份恢复、容量压测与合规评审。


九、与现有资产的关系 ​

资产关系
11 篇本地 TEI embedding(bge-m3)记忆向量化复用同一服务,不另起 embedding
10 篇 RAGFlow记忆与知识检索并列供给 Agent(10 篇 MEM-1 主线)
04/38 篇 HiMarket MCP 市场记忆以 MCP Server 形态(mem0-mcp)上架,被 Agent 消费(10 篇 MEM-3)
统一入口网关(08 专栏)记忆 API 走 Higress(SSO/限流/审计);tenant_id/owner_subject_id 由签名上下文派生,凭证由 AuthZ/Credential Broker 注入;不按请求体 user_id 注入
HiMarket 门户皮记忆规则配置页 / 观测审计页挂管理面(P2)

生产边界:本方案基于 mem0 社区版(Apache-2.0)+ Qdrant 自托管;画像/技能/审计/删除/投毒防护为自建补强模块。当前仅为设计审核稿,未实证。生产上线前至少需:① Higress + AuthZ/Credential Broker 身份链;② tenant_id > owner_subject_id > project_id > memory_type > visibility 的强制隔离与负向测试;③ 幂等异步提取、DLQ、成本预算;④ 可验证删除与 legal hold 分离;⑤ 不可篡改审计与 PII 脱敏;⑥ 投毒/注入防护;⑦ Qdrant/MySQL/NATS HA、备份恢复与容量压测。百炼记忆库为全托管 SaaS,自托管形态的优势是数据不出域,但不等于自动满足合规。

把 AI 工程讲到既懂也会用