记忆写入管线

wesgine 记忆写入流程:安全扫描、质量门控、写入审批、去重与嵌入。


写入入口

API

POST /memory  (body.layer)

SDK

cell.Memory().Save(ctx, entry)
cell.Memory().SaveToLayer(ctx, MemoryWrite{...})

saveCore 管线

所有写入路径最终经过 saveCore,执行以下步骤:

RequireActor → 威胁扫描 → 质量门控 → 写入审批 →
DedupKey 兜底 → 嵌入 → 后端写入 → 配额记录

威胁扫描(INV-MEM-24)

FirstThreatError() 扫描 entry.Content。

检测模式(5 条正则)

模式说明
硬编码密钥hardcoded_secret
连接字符串密码connection_string_password
AWS AccessKeyaws_access_key
Bearer Tokenbearer_token
私钥private_key(PEM 头)

加上 invisible unicode 检测。

匹配 → 返回 ErrThreatPatternDetected,拒绝写入。

Always-on,无 opt-out。

与 KB 扫描的区别

Memory 用 ScanThreats()(5 条 + invisible unicode),KB 用 ScanKBChunk()(仅 private_key)。


质量门控(INV-MEM-31)

ContentQualityError() 拦截引擎状态前缀:

ScopeWorking 豁免。

返回 ErrContentQualityRejected(硬拒绝)。


写入审批(INV-MEM-27)

CellSpec.MemoryWritePolicy 控制审批门控:

策略行为
silent直接写入
logged写入 + 记录日志
gated需要审批才写入

WriteGate.Evaluate 在安全扫描通过后、嵌入前执行。


DedupKey 兜底

saveCore 在落盘前强制 ContentDedupKey 兜底。

空 Key 路径全部被关闭——GatewaySave / RunEndHook / Learner / 迁移等无 Key 路径都经过此单点。


RequireActor(INV-MEM-38)

saveCore 单点执行 Actor 必填校验。

曾只被两个进程内调用方显式调用,三条 HTTP 写入路径全在外面。


Kind 必填(INV-MEM-54)

空 kind → ErrKindRequired。

Kind 是三张表的键,与 Trust 零值、accessed_at 零值同族。


SessionID 校验

Episodic kind 缺 SessionID → ErrSessionRequired。

201 比 400 坏——调用方拿到成功返回就不再找了。


按层写入(INV-MEM-53)

SaveToLayer(MemoryWrite) → LayerTarget(layer) 一张表答三件事:

问题答案
落哪个 scope由层决定
要不要 actor由层决定
namespace 谁给由层决定

四类 400

错误含义
ErrUnknownLayer层名不存在
ErrLayerNotWritableenvironment/session/working 不许写
ErrLayerSharedconsensus 带 actor
ErrLayerNamespaceRequiredagent_memory 空 namespace

Trust 兜底(P2-5)

Go 零值 Trust=0 = TrustSystem = T0 最高信任。

saveCore 对 Trust==TrustSystem && Kind!=KindEnvironment 按 defaultTrustForKind 兜底。


相关文档