docs(voice): 收口「没会话/没绑定就走 default」的镜像注释(r4)
唯一 finding:audio.go 的 speechRequest.SessionID 注释原本写「省略它时本口没有会话
概念 ⇒ 走 emotionTTS 的 default 分支」——**反了**。真实链路是
effectivePersona(ctx,"") → sessionPersona("") 为空**不是终点** → Effective =
defaultPersonaID() → 常规安装必有全局默认人格 ⇒ personaId 非空 ⇒ 走 personas 映射。
照那句话改的人会写出 `if req.SessionID == "" { personaID = "" }`,正是 r2 修掉的病。
改为:省略时按**全局默认人格**选发音人(会话绑定 → 全局默认人格 → 两者都没有才落到
default 字符),并显式写了"不要写成 if SessionID == \"\" { personaID = \"\" }"。
顺手同根三处(不留第四轮):
- tts/config.go 的 Config.Default 注释:成因表「会话无绑定 / 读取失败 / 该出口本身
没有会话」已过时 ⇒ 改为「空串的唯一合法成因是连全局默认人格都没有」,并写明不是
"会话未绑定"、也不是"出站口没有会话"。
- runtimeconfig/voicetts.go 的 Default 字段注释与文件头同族措辞同步;
- selection.go 的 WithPersonaID / Resolve 分支表、service.go 的分支小标把
「解析不到」统一改成「连全局默认人格都没有」;
- voice_emotiontts_test.go 的 TestSpeechEndpointNoSessionUsesDefault 注释同步(该用例
没接人格库,所以确实落到 default —— 但成因写对了);
- wire_voice_tts_test.go nit:改成「已废弃的全局 `character` 不生效」(墓碑键仍在)。
纯注释:`git diff` 里非注释改动行为空。go build/vet 通过;四包 go test -count=1 全绿。
This commit is contained in:
1 parent
1c2944fcf4
commit
b90811fae4
8 files changed
+41
-22
No files matched your search
@@ -10,7 +10,8 @@
|
||||
// 🔴 **发音人必须绑定人格**(主人 2026-10-26 逐字:「TTS 的人物选择是要绑定后端的
|
||||
// 角色的,不然会出现以后换了别的角色(人格配置),还是用老角色的 TTS 角色」):
|
||||
// 因此本文件的核心是 `personas`(personaId → characterId)与 `default`(**仅**
|
||||
// 服务"解析不到 personaId")。全局 `character` 键已废弃并被忽略(见字段注释)。
|
||||
// 服务"连全局默认人格都没有"这一种情形 —— 不是"会话未绑定")。
|
||||
// 全局 `character` 键已废弃并被忽略(见字段注释)。
|
||||
// 映射的**唯一真源**就是本文件 —— `configs/personas/*.yaml` 不参与。
|
||||
//
|
||||
// 🔴 **刻意没有 speed / emotion / tone 三键**(塔 2026-10-26 裁决,实测证据):
|
||||
@@ -81,10 +82,14 @@ type VoiceTTSTuning struct {
|
||||
// - 有键但值为空串 = 该角色明确没有发音人 ⇒ 不合成(绝不借用别的角色)。
|
||||
// - **没有这个键** ⇒ 同样不合成,且**不**回落到下面的 `default`。
|
||||
Personas map[string]string `json:"personas,omitempty"`
|
||||
// Default 是**仅当 personaId 解析不到**(会话无绑定 / 读取失败 / 该出站口本身
|
||||
// 没有会话)时使用的发音人;空 = 没配 ⇒ 那种情况**不合成**。
|
||||
// Default 是**仅当连生效人格都没有**(personaId 传空串)时使用的发音人;
|
||||
// 空 = 没配 ⇒ 那种情况**不合成**。
|
||||
//
|
||||
// 🔴 它**不服务**「配了 personas 但没有这个 persona 的键」——那种情况一律不合成
|
||||
// 🔴 空串的唯一合法成因是"连全局默认人格都没有"(人格库未接线 / 没有任何角色被
|
||||
// 标为默认)—— **不是**"会话未绑定",也不是"这个出站口没有会话":那些情况下
|
||||
// 调用方传的是**生效人格**(会话绑定 → 全局默认人格),非空。
|
||||
//
|
||||
// 它**不服务**「配了 personas 但没有这个 persona 的键」——那种情况一律不合成
|
||||
// (见 `tts.Config.Resolve` 的拒绝分支)。用 default 去顶正是"换了人格还用老角色
|
||||
// 声音"的病害本身。
|
||||
Default string `json:"default,omitempty"`
|
||||
|
||||
Reference in new issue
Block a user