回指消解resolved_subject落地(仅user_id半,event_id半明确留后续) #137
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Parent
#103 第四批清单:31 条实现类落差 + 9 条待拍板(条目 23)
What to build
ADR-0016 拍板 Delta 压缩那一次 LLM 调用要顺带产出
resolved_subject(具体 user_id/event_id 或 null),复用同一次调用零新增成本——origin/main 全仓resolved_subject零命中。当前 prompt 不但没让模型尝试消解代词,反而只写了"认不出是谁的填 null,不要瞎猜",永远停在 fail-closed 的退化态,代词一律降级为丢信息。失败处理侧(按写入目标区别处理 null)已经实现,本片只补"让模型去尝试"这个出口,不要动已经对的那半。
Acceptance criteria
_EXTRACT_MEMORIES_TOOL加resolved_subject出口(二元产物:具体 id 或 null,不得做成 0-1 置信度)_build_prompt的 instruction 改写(不是追加)——现有"不要瞎猜是哪个 sender_id"与新的"请尝试消解代词"直接冲突,必须重写成"先尝试消解代词所指;不确定才填 null"的两段式,否则新字段会被旧措辞直接压死原文(docs/adr/0016-reference-resolution.md「决策」节第 2 条):
原文(同 ADR「决策」节第 1 条——范围边界,挡住"顺手把召回侧也做了"):
原文(同 ADR「决策」节第 3 条——形状约束,挡住"加个置信度"):
_parse_event已过滤 null);画像更新主体解析失败整条候选丢弃(_parse_candidate已return None);Knowledge 影响面小不特殊处理——这三条已落地,本片不重写原文(同 ADR「决策」节第 4 条):
events.py::EventRecorddocstring 当前宣称"participant_ids只含回指消解成功的参与者"——这句话目前描述的是不存在的机制,本片落地后改真EventCandidate/EventRecord都没有指向既有事件的引用字段、_build_prompt也不喂既有事件列表——做 event_id 半需要新增引用字段 + 把候选事件列表喂进 prompt + 新增一条读,体量远大于 user_id 半。event_id 半明确不在本片范围,留给后续 ticket(不要让它无声消失)resolved_subject且它与既有participants不一致"这类只有新逻辑才走得到的用例tests/test_delta_compressor.py(解析层主战场)、tests/test_delta_compression_cycle.pyBlocked by
_EXTRACT_MEMORIES_TOOLschema 与同一段 Delta 压缩 instruction 字符串加字段,并行改会冲突,需串行实现期留痕:本片只落地 resolved_subject 的 user_id 半(画像 scope_id / 事件 participant_ids),有两处范围裁定需要显式记录,供后续评估参考:
relations 不在本片范围:
relations.user_a_id/user_b_id结构上与facts.scope_id/events.participants同属 sender_id 型主体判定,理论上有同样的代词消解需求。但核实后发现 ADR-0016 全文(背景/决策/拒绝了/取代/备注)从未提到relations——而RelationshipEdgeCandidate其实早于 ADR-0016 存在(issue #36,ADR-0008),本 ADR 枚举既有写入目标时漏掉了这个更早的写入目标,不是权衡后的有意排除。另外 relations 有两个主体位(user_a_id/user_b_id),直接照搬 facts 单字段 fallback 模式不成立,需要独立设计。本片不处理,留给后续单独评估。event_id 半留后续,已在 ADR-0016 补的更新节里留两条面包屑(不只是"延后"):
_build_prompt目前只喂"已知画像"/"已知话题记忆"两类上下文,没有"已知事件"——做 event_id 半第一步要先补一条current_events-style 参数。EventCandidate/EventRecord目前没有任何"关联到既有事件"的字段或合并语义(不像 Knowledge 的target_id),event_id 消解出来后该怎么落库是独立于本片的设计问题。另外 events 侧
resolved_subject是标量、一次只能消解一个模糊指代——同一事件候选里如果有两个及以上不同的模糊指代都能分别消解到不同的人,只有一个会被捕获,其余仍随 null 略过。这是已知局限(fail-closed,漏报不误报),已记入 ADR-0016 更新节与delta.py::_parse_event的代码注释,不在本片修复范围。详见 ADR-0016 更新节(2026-08-17,issue #137 实现期)。