larry-zy commented on issue #1534:
URL: https://github.com/apache/dubbo-admin/issues/1534#issuecomment-5395305765

   方案整体方向没问题,Store 抽象 + 单实例注入 + MemoryStore/GormStore 共用 Contract Test 
的拆分是对的,尤其统一 Store实例正好修掉了现在 Agent 和 Memory Tool 各持一个 
HistoryMemory、历史对不上的问题。补充几个小点,结合现有代码核实过,分三档。
   
   一、需要先定的硬问题
   
     1. max_turns 与 TurnLimit=10 必须先对齐
     现状 max_turns(默认 100)一路传到 Component 后并没有下传给 HistoryMemory,真实上限是 history.go 
里硬编码的 const TurnLimit = 
     10——配置项目前是死代码。第 6 节又把 max_turns 写进配置。请在 spec 里定死:是启用 max_turns(废掉硬编码 
10),还是迁移期两边都锁死
     10。否则 GormStore 和 MemoryStore 很容易在这个值上分叉,共用 Contract Test 就失去意义。
   
     2.「保持现有行为」不够——现有的轮次上限行为本身是坏的
     NextTurn 在第 10 轮会因窗口满返回 "context is full, please create a new 
session",但调用点 react.go 是
     history.NextTurn(sessionID),直接丢弃了返回值。结果:第 10 轮后不再 pop,后续所有对话被静默合并进同一个
     turn,「上限」对用户不可见、也没真正拦住。所以第 2/5 节请用文字把目标语义写清楚(一个 session 最多 N
     轮、到顶后对用户如何表现),而不是「保持现有行为」——因为现有行为是个 bug。
   
     二、spec 内部需要澄清
     
     3. role 分组顺序 vs 单一 sequence
     第 2 节要保留 system/user/model 分组和读取顺序,但第 4 节 Message 只有单个 sequence、role 埋在 
Payload 里,ORDER BY sequence
     只能还原插入顺序。当前生产链路每次只写单条、且只有 user/model(没有 system 写历史),插入序恰好等于分组序,撞不到;但第 8
     节「AddHistory 的 Role 分组和顺序」测试一旦传混合 role,MemoryStore(按 role 重排)和 GormStore(按
     sequence)就会分叉。建议二选一并写进 spec:放弃分组统一按插入序(更简单,不影响现链路),或加 role/group 列按 
(role_group, 
     sequence) 排。顺带一提,AllMemory 现有顺序是「当前 turn 在最前、再接旧历史」,反直觉,spec
     别只写「保持兼容顺序」,把顺序显式定义并进契约测试。
   
     三、设计建议(非 bug)
     
     4. request ctx 与持久化
     现在 agent goroutine 跑在 context.Background() 派生的 ctx 上,和 gin 
请求刻意解耦——客户端断连(handler 在
     c.Request.Context().Done() 直接 return)后,生成和落库仍会在后台跑完。第 3 节要把 gin ctx 传进 
Agent/Store
     支持取消,等于反转这个解耦。取消推理本身合理(省 token),但把存储写入也挂上去有副作用:断连时
     NextTurn/收尾写入会被取消,可能留下未 finalize 的半截 turn;或某次写入正好在事务中被取消回滚。建议区分:推理/工具调用挂请求
     ctx,生成后的 AddHistory/NextTurn 用脱离取消的 ctx。
   
     5. 共享库下的 List/DeleteExpired
     List(ctx) 无过滤/分页,在多实例共享库下会全表扫,建议签名带 status/updatedAt 过滤 + 分页(也为将来 tenant 
留口)。另外
     cleanupExpiredSessions 每个实例都会周期性打 DeleteExpired,spec 说明清由谁清理即可。
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to