关系网tension/affinity双轴驱动+文档对齐 #126

Closed
opened 2026-08-13 01:36:15 +00:00 by KumaAgent · 0 comments
Member

Parent

#103 第四批清单:31 条实现类落差 + 9 条待拍板(条目 12、13、31)

What to build

ADR-0008 拍板的关系四轴(familiarity/trust/affinity/tension)里,affinity(≈旧 warmth,注入排序键)与 tension(近期冲突,自然衰减防记仇)驱动函数在生产里零调用点——两轴恒 0.0,"warmth 加权排序"退化成插入顺序,"紧张"恒渲染 0.00,"自然衰减防记仇"整条兑现路径一次都走不到。familiarity/trust 两轴已驱动。

两条改同一个 _EXTRACT_MEMORIES_TOOL schema 与同一条 run_delta_compression_cycle 路径,必须同片,不能分两片各改一次同一个 prompt。

Acceptance criteria

一、affinity(改动面比原估计小得多——信号已在库里)

  • _EXTRACT_MEMORIES_TOOLspeaker_polarity(issue #94 已加入的逐发言人互动极性)就是 affinity 需要的"本批互动的亲和倾向"信号,不需要新增 LLM schema 字段
  • 新增 relationship.py::record_affinity_interaction(...) 驱动函数(仿 record_trust_disclosure 形状,内部调既有 apply_affinity_delta),在 delta.py::_apply_interaction_polarity 已有的 for sender_id, polarity in result.speaker_polarity.items() 循环里(或紧邻处)接入
  • config.py 加 affinity 的 delta 系数与 bound 两个旋钮
  • A 型陷阱必须靠原文引文钉住:下面这句否决的是"排序键直接读 slow_valence(user)"(合并两套状态),不是禁止两者共用同一个原始输入信号——affinity 只要仍是独立存储、独立累积、不跟着慢情感态衰减,就满足决策要求;任何让排序去读 slow_valence 的做法才是被明文否决的

原文(docs/adr/0008-relationship-network.md「更新(2026-07-06,情感模型选型 grill 联动)」节 affinity 条):

affinity vs 慢情感态.valence(user):两者数值上大概率高度相关……考虑过合并(排序键直接读 slow_valence(user),省一套参数),用户否决:affinity 要的是一个更稳、不因一两天情绪波动就回落的长期累积量,慢情感态是连续衰减、更易受近况影响的中时标量,两者时间尺度不同,保留独立……真被数据证明冗余再收敛,不凭猜测先合并。

  • 测试须构造真正非零的 affinity 值并断言排序确实换序——现有测试全零时任何实现都绿,是空转测试的典型形状,必须绕过这一层

二、tension(本组唯一真需要新 LLM schema 字段的)

  • _EXTRACT_MEMORIES_TOOL 新增一个独立的冲突信号字段(逐发言人),语义须与既有 interaction_polarity/speaker_polarity 明确区分——不得复用极性信号驱动 tension,原文已预先排除这条捷径
  • 新增 relationship.py::record_tension_conflict(...) 驱动函数(仿 record_trust_disclosure 的"读现值→算新值→写回"形状),写回时一并置 tension_updated_atdecayed_axes 首行 if tension_updated_at is None: return 意味着不写这个字段自然衰减永远走不到)
  • run_delta_compression_cycle 里接入(与 record_trust_disclosure 同一处循环附近),保持"不碰前台回复路径"
  • config.py 加 tension gain/cap 两个旋钮(half-life 已有 _relationship_tension_half_life_seconds
  • 无需 DB 迁移,RelationshipAxesModel 已有 tension/tension_updated_at 两列

原文(docs/adr/0008「更新(2026-07-06…)」节 tension 条——为什么不能复用极性信号):

tension:与"慢情感态低谷"排查后判定不重叠——tension 专门标记"这是冲突导致的",慢情感态是全部互动的混合平均(用户单纯倾诉心情不好也会拉低它,但那不是冲突),两者回答不同问题,均保留。

  • ADR-0008「更新(2026-07-13,issue #36 实现反馈)」节两处不实陈述订正:record_trust_disclosure 的两个生产调用点实际都在 delta.py::run_delta_compression_cycle不在 runtime_loop.py

三、文档面(无独立改动面,作为验收清单)

  • 本片完成后回读 CONTEXT.md「关系亲密度 / 关系多轴」条、design.md「关系多轴(ADR-0008)」条、ADR-0008「决策」节第 2 条三处,确认"四轴 + 4 轴封顶防膨胀"逐字成立——"4 轴封顶"是轴数封顶(就四个轴不再加第五轴),不是注入侧的行数上限,与 issue #114 的"独立封顶"不是同一件事,不要混读出多余工作量

Blocked by

None — can start immediately

## Parent #103 第四批清单:31 条实现类落差 + 9 条待拍板(条目 12、13、31) ## What to build ADR-0008 拍板的关系四轴(`familiarity`/`trust`/`affinity`/`tension`)里,`affinity`(≈旧 warmth,注入排序键)与 `tension`(近期冲突,自然衰减防记仇)驱动函数在生产里零调用点——两轴恒 0.0,"warmth 加权排序"退化成插入顺序,"紧张"恒渲染 0.00,"自然衰减防记仇"整条兑现路径一次都走不到。`familiarity`/`trust` 两轴已驱动。 两条改同一个 `_EXTRACT_MEMORIES_TOOL` schema 与同一条 `run_delta_compression_cycle` 路径,必须同片,不能分两片各改一次同一个 prompt。 ## Acceptance criteria **一、affinity(改动面比原估计小得多——信号已在库里)** - [ ] `_EXTRACT_MEMORIES_TOOL` 的 `speaker_polarity`(issue #94 已加入的逐发言人互动极性)就是 affinity 需要的"本批互动的亲和倾向"信号,**不需要新增 LLM schema 字段** - [ ] 新增 `relationship.py::record_affinity_interaction(...)` 驱动函数(仿 `record_trust_disclosure` 形状,内部调既有 `apply_affinity_delta`),在 `delta.py::_apply_interaction_polarity` 已有的 `for sender_id, polarity in result.speaker_polarity.items()` 循环里(或紧邻处)接入 - [ ] `config.py` 加 affinity 的 delta 系数与 bound 两个旋钮 - [ ] A 型陷阱必须靠原文引文钉住:下面这句否决的是"排序键直接读 slow_valence(user)"(合并两套状态),**不是**禁止两者共用同一个原始输入信号——affinity 只要仍是独立存储、独立累积、不跟着慢情感态衰减,就满足决策要求;**任何让排序去读 slow_valence 的做法**才是被明文否决的 原文(docs/adr/0008-relationship-network.md「更新(2026-07-06,情感模型选型 grill 联动)」节 affinity 条): > **affinity vs 慢情感态.valence(user)**:两者数值上大概率高度相关……**考虑过合并**(排序键直接读 slow_valence(user),省一套参数),**用户否决**:affinity 要的是一个更稳、不因一两天情绪波动就回落的**长期累积量**,慢情感态是连续衰减、更易受近况影响的中时标量,两者时间尺度不同,**保留独立**……真被数据证明冗余再收敛,不凭猜测先合并。 - [ ] 测试须构造真正非零的 affinity 值并断言排序确实换序——现有测试全零时任何实现都绿,是空转测试的典型形状,必须绕过这一层 **二、tension(本组唯一真需要新 LLM schema 字段的)** - [ ] `_EXTRACT_MEMORIES_TOOL` 新增一个**独立**的冲突信号字段(逐发言人),语义须与既有 `interaction_polarity`/`speaker_polarity` 明确区分——**不得复用极性信号驱动 tension**,原文已预先排除这条捷径 - [ ] 新增 `relationship.py::record_tension_conflict(...)` 驱动函数(仿 `record_trust_disclosure` 的"读现值→算新值→写回"形状),写回时一并置 `tension_updated_at`(`decayed_axes` 首行 `if tension_updated_at is None: return` 意味着不写这个字段自然衰减永远走不到) - [ ] 在 `run_delta_compression_cycle` 里接入(与 `record_trust_disclosure` 同一处循环附近),保持"不碰前台回复路径" - [ ] `config.py` 加 tension gain/cap 两个旋钮(half-life 已有 `_relationship_tension_half_life_seconds`) - [ ] 无需 DB 迁移,`RelationshipAxesModel` 已有 `tension`/`tension_updated_at` 两列 原文(docs/adr/0008「更新(2026-07-06…)」节 tension 条——为什么不能复用极性信号): > **tension**:与"慢情感态低谷"排查后判定**不重叠**——tension 专门标记"这是冲突导致的",慢情感态是全部互动的混合平均(用户单纯倾诉心情不好也会拉低它,但那不是冲突),两者回答不同问题,均保留。 - [ ] ADR-0008「更新(2026-07-13,issue #36 实现反馈)」节两处不实陈述订正:`record_trust_disclosure` 的两个生产调用点实际都在 `delta.py::run_delta_compression_cycle`,**不在** `runtime_loop.py` **三、文档面(无独立改动面,作为验收清单)** - [ ] 本片完成后回读 CONTEXT.md「关系亲密度 / 关系多轴」条、design.md「关系多轴(ADR-0008)」条、ADR-0008「决策」节第 2 条三处,确认"四轴 + 4 轴封顶防膨胀"逐字成立——**"4 轴封顶"是轴数封顶(就四个轴不再加第五轴),不是注入侧的行数上限**,与 issue #114 的"独立封顶"不是同一件事,不要混读出多余工作量 ## Blocked by None — can start immediately
Yushu closed this issue 2026-08-14 02:11:46 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
ProjectKuma/arise#126
No description provided.