3.6 KiB
3.6 KiB
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 任务是否继续拒绝、服务就绪与剩余问题;未验证前不声称恢复。