fix(ai): ignore duplicate params in favor of task and session fields

This commit is contained in:
2026-10-09 17:14:33 +08:00
parent 6ba7180afd
commit ddd4de20fa
13 changed files with 136 additions and 46 deletions
@@ -0,0 +1,39 @@
# AI 参数重名优先级调整(2026-10-09)
## 使用者确认的规则与范围
此前契约和绑定检查拒绝 params 中的协议重名字段,真实 SaaS 任务 4 同时给出 `agent.tts.voice` 与 `agent.tts.params.voice`,导致 Dispatcher 退出。
使用者明确确认变更:**任务/会话生成字段优先,忽略 params 中重名键,其他参数按原值传递**。同值、不同值或 null 均使用该优先级;不修改获批任务原始快照,不要求 SaaS 删除原有重复字段。参数仍是必填、可空的平坦对象,本轮不改变其他结构和业务规则。
同步共享契约、实现、测试和说明,验证后提交并推送、重新部署 `server.sip`。保留固定配置、数据和既有 SaaS 任务授权,不清理或迁移数据、不操作真实 MQ 拓扑、不重启 Asterisk、不独立试拨或主动投递任务。
## 共享契约及 SaaS 通知
共享仓库 `sip-contracts` 提交 `f490afab764a702dda919c718dca1a05e5bceb0a` 已推送,本项目同步固定该提交。规范位置为 `contracts/schema/saas-dispatcher.md` 的 AI 参数段落。Schema 已接受这类平坦对象,无需改变数据结构。
提供给 SaaS 开发人员的变更通知:重名参数不再导致任务拒绝,任务/session 的 model、voice、消息及事务身份具有优先权。现有任务中重复 voice 不需要删除或更改任务内容,其他参数继续原值传递;其余现行契约不变。
## 实际改动
- 删除绑定阶段 ASR/LLM/TTS 重名参数拒绝和废弃的 `reservedParams` 路径,不保留旧拒绝兼容层。
- LLM 和百炼 TTS 已有“复制 params,再写入任务/会话字段”的组装逻辑,分别保证 model/messages、voice 优先;补完整任务绑定到实际请求的回归,不只是手工构造绑定对象。
- 火山 ASR 在对接 SDK 前复制 params,并移除与 SDK 生成字段重名的 `reqid`、`sequence`、`model_name`。请求使用任务 model 和真实 session 身份,其他参数保持原值,原快照及绑定中的 params 不改。
- SDK 自身保护生成身份的规则不变,本次是业务优先级调整,不是 SDK 缺陷,不改依赖版本或引入本地 replace。
- 更新现行 `AGENTS.md`,旧部署证据标明当时拒绝规则及要求 SaaS 删除 voice 的建议已被取代,历史事实仍保留。
## 验证
- 测试先加入重名键,旧代码在 ASR、LLM、TTS 绑定阶段明确失败;修复后通过。
- 同值、不同值、null 三组重名值均接受,任务字段不被改写,原始任务快照不变。
- ASR WebSocket 实际请求:model_name 采用任务值,reqid/sequence 由 session 生成,原绑定中重名值仍保留;其他字段以及 false、null、大整数保持原值。
- LLM HTTP 实际请求:model/messages 采用任务/会话值,其他字段原值传递。
- 百炼 TTS WebSocket 实际请求:voice 采用任务值,其他字段原值传递。
- Agent 正式快照与重放保护测试接受重名键、不改冻结绑定;缺失/null/非对象/嵌套参数等原先无效结构仍明确拒绝,拒绝不得持久接纳或拨号。更新旧的“重名即无效”测试为真正的结构错误测试,不削弱基础校验。
- `make proto-check acceptance-local`、`make release-check-local`、`go vet ./...`、`go test -race ./...`、构建及隔离 RabbitMQ/HTTPS/双向 TLS 端到端全部通过。
- 业务单元覆盖率 **70.8%**。
- 本地 mock 请求不代表供应商实际可用、真实通话、AI/录音/OSS 或生产验收。
## 部署验证
安装后补固定源码、制品校验、真实 SaaS 任务是否继续拒绝、服务就绪与剩余问题;未验证前不声称恢复。
@@ -1,5 +1,7 @@
# 正式 Dispatcher SIP 加载遗漏修复(2026-10-09)
> 本文记录当时的冲突拒绝规则和部署事实。随后使用者确认 params 重名键应忽略、任务/session 字段优先;该旧拒绝规则及“要求 SaaS 删除重复 voice”的建议已被新契约取代,不作为现行要求。新规则与后续部署结果见 [参数优先级变更记录](ai-params-task-precedence-20261009.md)。
## 授权与完成标准
使用者在只读根因定位后确认按已讨论方案修复、验证并重新部署 `server.sip`:正式入口接入现有 SIP 加载能力,保留占用检查与实际版本核对,补启动和更新回归测试。