[RFC] 分阶段 Session Commit:pending 上下文超过抽取模型窗口时切块逐个 commit #4531
ZaynJarvis
started this conversation in
RFC
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
问题
Harness 侧一个 session 的未提交上下文可以远大于 ov 记忆抽取模型(VLM/LLM)的 context window。当前 commit 语义下,这样的 session 一旦 commit,Phase 2 抽取就是一次超窗的单一 LLM 调用——只有重试,没有降级路径。
现状(本地 SDK 与云上 HTTP API 同构,均不支持):
keep_recent_count/turn_budget),归档剩余全部openviking/server/routers/sessions.pyCommitRequest;openviking/session/session.pycommit_asynccommit_async,全量归档为一个 archiveopenviking/service/session_service.pyrun_auto_commitopenviking/session/compressor_v3.py_extract_user_memories注:
pending_token_threshold默认 150k、上限 1M(auto_commit_policy.py),而抽取模型窗口通常小于上限,阈值与窗口之间没有任何约束关系。现有的ExtractContext._split_message_for_extraction只把单条超长文本消息切 chunk 用于 event range 定位,所有 chunk 仍在同一个抽取上下文里,不解决超窗。提案:分阶段 commit(两个能力)
1. commit 支持前缀边界(server + client)
CommitRequest增加一个边界参数(up_to_message_id或commit_message_count二选一),语义从「归档除尾部 N 条外的全部」扩展为「归档指定前缀」:约束:只支持前缀,不支持任意消息子集。保持 archive 的连续性、checkpoint 链和
keep_recent_count的现有语义不变;边界参数与 retention 参数互斥。2. auto commit 按窗口预算切块逐个 commit
run_auto_commit里当pending_tokens超过抽取窗口预算(新增配置,如extraction_token_budget)时,循环切前缀块逐个 commit,而不是一次全量:turn_budget已有的 Turn 划分)latest_archive_overview机制已存在,无需新做)非目标
待议
extraction_token_budget放在 auto_commit_policy 里还是 server 级配置(跟随抽取模型窗口)?keep_recent_count=0的 compact 路径?All reactions