TTS NPC 對白歸屬
開啟後,一條訊息裡多個角色的引號對白可以各用各的聲音朗讀:AI 在後台判斷每句引號是誰說的,識別出的 NPC 自動出現在語音映射裡,每句引號旁邊還會多一個單獨播放按鈕。
中英文引號均算對白("…"、“…”、「…」 等)。
開啟
先打開 擴充 → TTS 抽屜,選擇一個 TTS 服務商並啟用 —— 歸屬解析依賴 TTS 處於啟用狀態。

向下捲動到正規表示式設定下方的區塊,勾選 NPC 對白歸屬。

選擇解析所用的連線和預設:
- 歸屬解析 API 連線 — 用哪個 API 連線跑歸屬解析。只有一個連線時保持目前 API 設定即可。
- 歸屬解析聊天補全預設 — 解析走哪個聊天補全預設。建議選輕量、快速的預設,這是一個分類任務,不需要創作能力。
- 歸屬解析重試次數 — 模型回傳不可用答案時的重試次數。預設為 2。
單獨播放一句
訊息裡每句引號對白的末尾會出現一個小喇叭圖示。點擊後只播放這一句,用歸屬到的說話人的聲音。

- 點擊播放的是原始引號內容。全域朗讀篩選(跳過程式碼區塊、僅朗讀引號等)作用於整條訊息的朗讀,不影響這些單句點擊。
- 對舊訊息點擊時如果解析還沒完成,按鈕會顯示載入動畫,等結果到位後播放。解析失敗時,這句會用作者的聲音播放。
- 行動端隱藏這些按鈕,避免捲動時誤觸。
給 NPC 分配語音
所有說話人的語音均在 TTS 面板 語音映射 區的 管理語音 按鈕裡。按鈕會打開一個彈窗,列出所有說話人 —— 聊天參與者(角色卡主角、群聊成員、你)加上所有已配置的 NPC,每個名字一行,帶語音下拉,NPC 行還帶 NPC 標籤。

NPC 名字有兩種加入方式:
- 自動發現。 歸屬解析在引號對白裡認出新說話人時,名字自動加入語音映射,預設跟隨預設語音。打開 管理語音 給它指定語音,跨聊天記憶。
- 提前手動新增。 在 管理語音 彈窗頂部的輸入框輸入 NPC 名字並點擊 新增。提前配置的名字會作為候選說話人交給歸屬解析 AI,該 NPC 的台詞從第一次播放起就能被識別(並配上聲音)—— 無需等待發現。

NPC 行(帶標籤、非聊天參與者的行)可以用行尾的 ✕ 按鈕移除。改動在彈窗點擊 完成 關閉時生效。
NPC 的行在配置之前跟隨預設語音。如果播放時某個 NPC 沒有出聲,檢查它的行(或預設語音行)是不是設為了
disabled。
整條訊息的朗讀同樣受益:從第二次播放起,每句對白會用各自說話人的聲音。新訊息的第一次播放可能仍用作者的聲音 —— 後台解析可能還沒完成。
開啟內建的 為 "引號"、星號文字 和其他文字使用不同聲音 時,歸屬到的 NPC 也會得到同樣的三個槽位(引號 / 星號文字 / 其他文字)。給 NPC 的引號槽位指定不同聲音,可以讓它的台詞和旁白用不同的語音。
常見問題
NPC 第一次播放後沒有聲音。 後台解析可能還在進行。另外在 管理語音 裡檢查 NPC 的行 —— 它跟隨預設語音,而預設語音出廠是 disabled。提前手動新增名字(見上文)可以完全避開這個等待。
舊訊息上一直不出現按鈕。 按鈕在訊息渲染時或功能啟用後切換聊天時添加。重新載入頁面,或在功能開啟時切到別的聊天再切回來。
每條訊息均會發一次 AI 請求嗎? 只有包含引號對白的角色訊息才會。沒有引號的訊息直接跳過不發請求,結果快取到訊息內容變化為止。
技術深入
給好奇的讀者和貢獻者
解析時機與輸入
角色回覆生成完畢後,Luker 在後台自動跑一次小型 AI 解析(走一次工具調用,模型要做的只是給每句引號填一個說話人)。解析讀取這條訊息的原文、它前面的兩條訊息和當前說話人名單:聊天參與者加上語音映射裡已有的全部名字(含提前手動配置的 NPC)。說話人不在名單裡時,模型可以直接給出新名字。
對舊訊息第一次點播放按鈕時,會補跑同樣的解析。
快取與失效
解析結果按訊息存在每個聊天的樓層狀態檔案裡,用訊息內容雜湊校驗。訊息被編輯或 swipe 後快取自動失效,下次播放時重新解析。歸屬結果只影響朗讀時的聲音選擇,不改動訊息文字和聊天記錄。
解析失敗不快取失敗結果:按重試次數重試後仍失敗時,該句回落到作者聲音,並在控制台記錄一條警告。
引號識別
與訊息渲染裡的引號高亮共用同一套識別規則:"…"、“…”、«…»、「…」、『…』、"…"。程式碼區塊和行內程式碼裡的引號不算對白。