已关闭
[Bug]【接口测试】【0.0.27s】修改Agent模板模型引用后,有效旧session绑定查询返回404 #150
sunxie创建于  9月17日关闭于  9月20日
sunxie成员
9月17日 创建

测试意图与接口范围

接口测试:修改 Agent 模板的模型引用后,新会话应使用新模型;尚未到期的旧 session 应继续保留原 Pod、原模型配置及上下文。本单验证的是 Agent 的 template_ref.default_model 引用变化,不是直接修改模型模板内的 model_id。

通过 Gateway HTTP 配置和聊天接口、Runtime 公开只读视图验证;没有通过前端页面操作,没有直接调用内部 route/touch,没有修改服务开发代码。

环境与测试数据

  • swarm123 / test-toc,dev-stable 部署包 0.0.27s,PostgreSQL;历史实际执行日期2026-09-16。
  • 原用例:test_agent_reference_update,用例ID TC-SDS-GATEWAY-AGENT-REF-025。
  • run_id:sds-264ac21ed899。
  • 原模型A:Qwen3.7-Plus-no-thinking;模型B:Qwen3.7-Plus。分别创建模型模板,Agent先引用A再改为B。
  • 本次实际策略:session_ttl=600秒、pod_ttl=30秒、min_idle_pods=1、scope_concurrency=8、pod_concurrency=2。完整策略见附件 case-01/report.json 中 CONFIG_PLAN;复现配置样例、模型模板及Agent引用见附件。真实模型凭据已移除,需替换为开发环境可用凭据。

复现步骤

  1. 通过 POST /api/v1/model-templates 创建可用模型A/B模板;通过 POST /api/v1/agent-templates 创建Agent模板,让 template_ref.default_model 初始引用A模板ID;建立允许测试身份的Agent资源和实例池。保存环境原配置供恢复。
  2. 调用 Gateway POST /api/v1/sessions 创建旧session,再调用 POST /api/v1/chat/completions 完成普通聊天。记录原session、实际模型A和服务Pod ID。此步骤证明配置变更前业务可用。
  3. 调用 PATCH /api/v1/agent-templates/{agent_id},仅将 template_ref.default_model 改为B模板ID,保留其余引用。业务目的:后续新session使用B,而有效旧session仍沿用A。
  4. 历史执行中,修改后先创建了新session,再检查旧session的绑定;通过 GET /visualization/session?session_id=<旧session_id> 得到404。随后新session聊天成功,模型日志验证实际使用B。具体先后时刻见附件 http_timings、timeline及服务日志。
  5. 复现时在旧session TTL内检查绑定,并继续用原session发送业务、新建session发送业务,分别记录实际Pod和模型。第5步的完整立即新旧会话探针是后续增强的测试方法,本单不声称历史执行已经完成这些新增断言。

实际结果

旧session:web_1a0a98a5442_84caeea8f479;原Pod:jiuwenclaw-agentserver-1hu22atfqs-e0bjs。

报告 transition_old_sessions 保存原绑定后,记录:GET /visualization/session: HTTP 404,关联请求标记 sds-264ac21ed899-model-patch-old-session。报告最终错误为 old-session continuity failed; see transition_old_sessions。

新session:web_1a0a98abedf_c6307a752684;新Pod:jiuwenclaw-agentserver-aw60705u7p-mk32o。新会话业务与实际模型B消费检查成功。

HTTP相对时间:旧会话首轮从0.623秒开始、耗时7.515秒;修改后的新会话约27.664秒创建,第二轮约42.991秒开始、耗时12.700秒。完整配置TTL及绑定检查上下文在附件,失败观测发生在测试清理之前。

预期结果

Agent模型引用更新可触发Pod日落和新Pod创建,但应保留仍有效的旧session绑定,由原Pod继续承接旧配置业务;新session使用新Pod和模型B。没有有效会话的空闲Pod可以回收,本单不要求空闲Pod必须等到TTL才删除。

证据边界与开发定位建议

  • 已执行证据是旧绑定404和新模型消费成功;404本身不等于聊天历史被删除,也不能单独证明旧session实际聊天已失败。
  • 用户另转述同事手工观察:修改Agent模型引用后,有流量和无流量Pod都会被删除,再启动新Pod。该观察作为定位线索,未取得同事操作的独立日志,不当作本次自动化已经验证的事实。
  • 尚未专门执行“旧请求正在生成期间同时PATCH”的并发窗口,因此不声称覆盖请求中断。
  • 复现频率未统计,不标记必现;请开发结合配置刷新、原Pod回收时刻和旧session有效期定位。已有相关单 #4391 关注补位失败,本单关注有效旧session保留,不能仅因都触发刷新就认定同一根因。
  • 当前测试源码已经加强立即旧请求、新请求及旧回访;附件标明当前源码与历史执行哈希,避免把未重跑的增强断言当作本次执行证据。无mock,使用真实模型。

日志与复现数据附件

下载完整脱敏复现数据及关联日志(agent-model-reference-evidence.zip)

SHA256:39f229860fdbd72de0b3995540d0f847e52ecf7b4752c34b2ee73944faba14e7。附件已实际下载校验一致。

likedislike
openJiuwen-bot成员
9月17日 评论:

欢迎来到 openJiuwen 社区

Hey @tenet321 , 感谢你对社区的贡献.

机器人使用手册

有关指令的使用,可以点击 此处 查看详情。开发人员可以在每个PR或Issue下方评论特定指令来触发机器人任务。

likedislike
王明琦
王明琦成员
9月18日 评论:

根因定位(开发侧已确认)

与 #151/#153 同根因家族:default_model 引用变化经 config_sync 下发后属 A 类变更(deploy_ver
变化)→ 老代 Pod 日落;0.0.27s 无排空窗口,日落判定只看版本不看会话——有流量/无流量 Pod 同批
即刻回收(与贵方同事手工观察一致);Pod 被收触发 notify_pod_dead,该 Pod 上全部会话绑定被
原子清除(session 哈希四处同删)→ /visualization/session 404。404 = 绑定随 Pod 被连带清除,
非会话数据丢失
。

修复:日落优雅排空窗口(与 #151 同批交付)

对本单场景(session_ttl=600):变更后 600s 排空窗口内,原 Pod、原绑定、原模型 A 配置全程保留
(404 → 200,旧会话可继续原上下文);新 session 即刻部署新 Pod 并消费模型 B;无有效会话的空闲
Pod 在窗口截止即回收(与贵单"不要求空闲 Pod 等到 TTL"的口径一致)。窗口后旧会话若仍活跃,下一
条消息重放置到新 Pod(模型 B)——有界优雅的设计边界。

复验请断言:① 变更后旧 session 绑定查询 200 且 Pod/模型不变(窗口内多点采样);② 新 session 用
B;③ 窗口截止后空闲 Pod 回收、活跃旧会话 rebind。#4391(补位失败)由 surge 余量单独覆盖,如仍
复现请单独反馈。

likedislike
王明琦王明琦成员
9月18日 关联了pull request:fix(config):测试issue修复
sunxie成员
9月20日 评论:

0.0.31s 回归通过,按本单“Agent 模板 default_model 引用变化后,有效旧 session 绑定及业务连续性”范围关闭。

环境:swarm123 / test,PostgreSQL;执行日期:2026-09-20。用例:TC-SDS-GATEWAY-AGENT-REF-025,run_id:sds-14e353db0d88。真实模型,无 mock。

验证步骤与结果:

  1. Agent 初始引用模型 A(Qwen3.7-Plus-no-thinking),旧 session 完成真实聊天并记录 Pod、模型与上下文。
  2. PATCH Agent 的 template_ref.default_model 为模型 B(Qwen3.7-Plus)。变更后立即及后续回访旧 session,绑定仍可查询,保持原 Pod、模型 A 与上下文,聊天成功,未再出现本单的绑定 404。
  3. 新 session 使用新 Pod 和模型 B,实际模型调用日志与回复、历史检查通过。

旧 session:web_1a0bda88c2f_80a6408ba210;原 Pod:jiuwenclaw-agentserver-v8tg6v39od-nnztp。新 session:web_1a0bda94189_f9a86abb3696。关联请求包括 sds-14e353db0d88-chat-1、sds-14e353db0d88-chat-2、sds-14e353db0d88-model-patch-followup-old-session。报告状态 passed,证据完整性检查通过,清理错误为空。

覆盖边界:本次验证排空窗口内的有效旧会话与新会话行为;未执行窗口截止后的自然回收/rebind,也未执行生成中并发 PATCH,不将这些扩展场景计为通过;相关生命周期问题继续单独回归。

下载脱敏回归报告、关联日志摘录及测试入口

SHA256:a1ba543cb6c6f0f3fa21340423997a26a20bfab2e285371ffc2fe76cdfe535f6,已实际下载校验一致。

likedislike
Ssunxie成员
9月20日 关闭了 issue
Ssunxie成员
9月20日 issue状态由 TODO 改变为 DONE