Skip to content

feat(memory-core): add opt-in feedback-driven memory policy self-optimization - #1276

Open
bugkeep wants to merge 4 commits into
TencentCloud:feat/server_teamfrom
bugkeep:feat/feedback-self-optimization
Open

bugkeep wants to merge 4 commits into
TencentCloud:feat/server_teamfrom
bugkeep:feat/feedback-self-optimization

Conversation

@bugkeep

@bugkeep bugkeep commented Sep 7, 2026

Copy link
Copy Markdown

Description | 描述

为长任务中的记忆漏更新、临时要求误写和旧约束残留增加默认关闭的反馈策略旁路。宿主核实来源、实际提交、持久状态和送达后,才允许产生有限候选;候选经过隔离对照的效果、回归与成本门,未通过或未知时保留起始策略。本 PR 不训练基座模型,也不让模型自报 confidence 代替事实。

同时提供可公开复现的长对话实验:固定原文 L1,用历史漏检反馈选择有限 L0 检索预算。最终候选没有改善测试结果,开发门拒绝采用。这个负结果用于检验可关闭、可回退和反馈置信边界,不表述为自优化成功。

设计与用途

例如,用户将项目数据库从 MySQL 改成 PostgreSQL,代理仍写入旧值。宿主核实当前更新未提交、状态确实陈旧后,可以将一个可归因的当前错误与正确写入/NOOP 对照传给优化器;后续由该错误传播出的轮次沿用同一根原因,不重复计作独立监督。

Python SDK 的候选只改变有上限的规则,不修改分类器公共合同、来源/目标/权限保护、检索、回答器或评分。完整、同标注的隔离回放需要:会话/重复等权事实状态至少提高 5 个百分点;根错误改正;原正确状态、提交、探测及对话无回归;回放 token 不超过 1.25 倍、p95 时延不超过 1.5 倍。生成成本另记。一个错误只允许探索,不代表统计高置信或自动部署。

flowchart TD
    U[当前用户原文] --> H[宿主分类器与来源/目标/权限保护]
    P[默认关闭的有限规则] --> H
    H --> A[可选 MemoryCore 原子适配]
    A --> S[(隔离 SQLite: L1 / FTS / 版本与证据)]
    S --> D[作用域注入回执与实际送达]
    S --> V[宿主核实提交/状态/标签]
    D --> V
    V --> O[FeedbackOptimizer: 单一根错误与正确对照]
    O --> C[有界生成器产生未采用候选]
    C --> R[相同模型与计划的隔离配对回放]
    R --> G{效果/回归/成本门}
    G -->|通过后由宿主决定| P
    G -->|拒绝或未知| B[保留原策略]
    S --> F[原生 FTS 基座检索]
    F --> K[可选 L0 预算旁路: k=5/12]
    Q[公开训练引用反馈与开发采用门] --> K
    K --> X[拟注入与决策日志; 辅助失败回基座]
Loading

L1 写入链与新 L0 检索实验分开测量。公开 QA 引用只说明应取用的证据位置,不能授权新增、更新或退休用户记忆。

组件与边界

组件 内容
Python tencentdb_agent_memory.feedback FeedbackOptimizer、不可变 PolicySnapshot、提名/评估/取消/回滚和有限审计;无供应商、存储或文件系统所有权
可选 TypeScript SQLite 适配 来源绑定 ADD、回执/版本绑定 UPDATE/逻辑退休;原子更新 L1/FTS/向量失效/账本;仅隔离 SQLite
L1 影子观察器 有界冻结来源和候选快照、取消和元数据诊断;默认关闭,不替换 writer/dedup 决策
retrieval-budget.ts 通用 {id,content,score} 和两个只读回调;默认基座,探索与部署模式分开;记录 k、辅助次数、fallback、信号和时延
无模型源码演示 六轮来源/提交/回执链,以及 SDK 到 SQLite 的脚本植入故障对照;工程演示不是策略效果
公开长对话脚本 固定数据下载与校验、适配、原文审查、实际建库/回读、有限拟合、重复计时、配对统计及 pass/fail/error

L0 旁路最多 5 个阈值,k 为 5/12,单条 8 KiB、总拟注入 64 KiB、一次辅助、100 ms、0 重试、最多 4 个未结束辅助任务,无持久缓存。超时后未结束的任务保留槽位,超限以 busy 回退,防止无限积累。辅助异常、损坏或前缀/容量不合法返回已取得的基座;基座失败原样传播,不伪装回退成功。同步阻塞仍需宿主进程截止时间。

没有增加生产 Gateway 端点或 MongoDB/TCVDB 原子写入。宿主负责鉴权、租户过滤、来源及标签核验、模型送达和费用。内部迁移替换数据适配和检索回调,按项目/用户重新划分、冻结标签与采用门;旁路本身不包含 LoCoMo 名称、问题或答案。

公开长对话方法验证(M17,负结果)

固定 LoCoMo 提交 3eb6f2c585f5e1699204e3c3bdf7adc5c28cb376;10 段完整历史、5882 条话语。种子 20260914,按 4/2/4 段对话划分。确定性筛选单来源文字事实后,逐项原文审查排除 6 条主体/年份/行为错配,不改答案、不补题,最终 114 题:45 训练、24 开发、45 测试。R1/R2 修订及“R1 已采集、测试分数尚未查看”的时间边界公开记录。单一执行者审查,不声称独立人工双审或标签无条件完美。

原文以稳定 sample_id/dia_id 入库,5882 条逐字回读;检索不读取答案。训练从 0、0.01、0.05、0.15、1 中最大化“引用召回 - 0.01×注入条数”,锁定阈值 0;开发未达到 5 个百分点改善,approved=false。测试结果如下:

模式 引用覆盖 平均拟注入字节 L0 p50 / p95(ms)
基座固定 5 条 27/45,60.00% 693.84 0.651 / 1.311
锁定候选探索 27/45,60.00% 693.84 1.458 / 3.378
固定 12 条对照 29/45,64.44% 1649.04 0.739 / 1.437
采用门后的部署路径 27/45,60.00% 693.84 0.671 / 1.771
强制辅助失败 27/45,60.00% 693.84 0.711 / 1.438

候选提高 0 个百分点,4 段对话的精确符号翻转 p=1.00;固定扩容提高 4.44 个百分点,字节增加 137.67%,不能把单纯扩容记作自优化成功。强制失败 45/45 与基座一致;5 次结果一致,效果分母仍是 45。时延来自本地 SQLite,225 个计时/臂,不含模型或网络。L1 报原文回读和建库成本,不报告语义抽取准确率;L0 报引用覆盖,不报告问答/业务成功率。1305 条输出区分有效失败和基础设施 error,token=null,模型和实验 HTTP 调用为 0。

复现

需要 Node 22.16+、Python 3.11+。本次新安装复现使用 Node 24.14.0 / Python 3.12.14。依赖锁文件放在源码示例内,解决原仓库忽略 npm 锁文件导致的复现缺口:

cd MemoryCore
cp ../examples/public-memory-feedback/MemoryCore.package-lock.json package-lock.json
npm ci --ignore-scripts
npm run build
cd ../examples/public-memory-feedback
python -B -m unittest -v test_adapter
python -B download.py --output run/source

随后按 公开实验完整命令 顺序 prepare → audit → collect → fit → test → analyze,选择新输出目录。有原始公开文件与许可证时可跳过下载;安装后全程离线。效果与策略应一致,墙钟时延不承诺逐位相同。数据仍采用原 CC BY-NC 4.0 许可,不能按代码 MIT 许可重新授权。

反馈设计SDK 合同SQLite 演示 保留。脚本植入故障的演示预期 12 轮、4/6 到 6/6,最后策略回到版本 0;忙碌宿主可能因原成本门拒绝采用,真实结果照常记录,不改成通过。

历史真实模型证据

另有同 MiniMax-M3 的受控长链迁移对照:121 个已知主指标配对中,11 改善、0 倒退、110 相同,另有 23/144 未知;已知联合指标增加 9.09 个百分点,匹配 token 增加约 3%。改善集中在两条根错误链,分支级 p=0.50。历史自动规则未经改写,但它不是本场短链新产生的候选,也不是直接对原生抽取器的比较。完整计划仍 inconclusive,保留 30 个分层诊断下降坐标和体验问题。

历史报告公开实验报告 各自附 JSON 汇总。私人历史原始运行记录不在 PR 内;公开小实验可独立重跑。两类结果不是生产长编程业务指标,也没有完成端到端判定器或先进记忆系统的同条件排名。

Related Issue | 关联 Issue

无关联 Issue;默认关闭的独立扩展。

Change Type | 修改类型

  • 新功能
  • 文档更新
  • 前置构建修复:移除 aggregate build 对上游不存在的 seed-v2 tsconfig 的调用,独立提交保留

Self-test Checklist | 自测清单

  • 本次 128 项去重检查通过:feedback 84(含新预算 11)、观察器 34、参数拟合 3、Python 适配 7。新增共 21 项;单独运行的 public Node 14 中有 11 项重复,不重复计数。
  • 新公共路径严格 TypeScript 检查、完整 npm build/pack 通过,tarball 1,582,129 字节,小于 2 MiB。
  • 从纯源码新目录复制锁文件、重新 npm ci,重建全部 SQLite 和公开流程;114 题数据、锁定策略、45 配对及主要结果一致,1305 条新观测。零模型调用。
  • 默认关闭保持原对象,强制失败、超时、非法分数、重复/不一致前缀、容量和并发槽边界覆盖;测试标签变更不改变拟合结果。
  • 前一版已有 127 项检查、干净 Linux 复现、Python wheel/严格消费者校验记录;其中旧 SDK/连接演示检查本次未冒充重新执行。新增公开实验本次在 Windows 实测;现有 feedback CI 会发现新增的 11 项旁路检查,其余新增检查提供源码内明确命令,未改现有工作流。
  • 未加入密钥、私人运行数据、账户信息或 runtime 缓存;新增提交有 DCO sign-off。

Additional Notes | 其他说明

回滚只恢复策略,不撤销已经提交的用户记忆。逻辑退休保留审计历史,不是物理删除。默认关闭;正式生产采用由宿主在独立验证后决定。GitHub Actions 的在线审批与运行状态以页面为准,上述通过结果为已完成的本地/历史独立复现,未将待审批 CI 记为通过。

Signed-off-by: bugkeep <1921817430@qq.com>
@Maxwell-Code07

Copy link
Copy Markdown
Collaborator

Thank you so much for your attention and contribution! We will arrange an internal review for this PR shortly, and all feedback will be shared right here in the discussion.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants