語音與模型目錄
GET /v1/chat/catalog 返回公開模型、音色及即時點數價格。文本聊天使用 POST /v1/chat/completions,語音使用下方介面。
模型與價格
正在載入模型目錄...
語音轉文字
POST /v1/chat/transcribe,傳入 { "audio": "data:audio/webm;base64,..." }。支援純 base64,解碼後最大 10MB;返回 text 和 language。
文字轉語音
正在載入模型目錄...
展開模型可查看已啟用音色。音色名稱和說明可由管理員配置;禁用音色不會出現在目錄中,也不能用於新的合成請求。刷新本頁即可讀取最新配置。模型禁用後,其全部音色也會從文件和目錄的音色列表中移除,且不能用於新的合成請求;重新啟用不會重置各音色的獨立配置。預設音色或其所屬模型被禁用後,會自動選擇其他已啟用模型的已啟用音色。
POST /v1/chat/speech,傳入 { "text": "你好", "voice": "speech-light:zf_xiaoni" },最多 2,000 字元。不傳 voice 使用後臺預設音色。使用目錄中的 voices[].id,其 modelId 對應模型及價格。支援 Speech Standard、Speech Light、Speech Pro、Speech Expressive。音色自動決定語音模型,與聊天模型獨立選擇。
返回 audio(MP3 data URI,格式為 data:audio/mpeg;base64,...)、voice 和 billing: { model, credits, characters, price, unit: "1000_characters" }。所有音色(包括 Speech Pro)均返回 MP3。audio 可直接賦給音頻播放器的 src,或將逗號後面的 base64 解碼並儲存為 .mp3 文件。Speech Pro 無需客戶端轉碼,音色 ID 和按字元計費規則不變,詳見可運行的 Python 示例。
串流語音
在同一個 POST /v1/chat/speech 請求中加入 "stream": true。Speech Standard、Speech Light、Speech Pro 和 Speech Expressive 均支援,目錄通過 speechModels[].streaming 標識此能力。不傳 stream 或傳 false,保持上面的完整 JSON 響應。
{ "text": "你好,今天過得怎么樣?", "voice": "speech-pro:Ashley", "stream": true }響應為連續的 MP3 二進制流,Content-Type: audio/mpeg,不再是 JSON、base64 或 SSE。代理收到音頻就逐步轉發;Speech Pro 采用增量轉碼,不等待完整音頻。這不代表模型本身的生成延遲有保證。文本仍作為一個請求提交,不會自動拆句。
安裝了 curl 和 FFmpeg 後,可以直接邊接收邊播放:
curl --fail --no-buffer https://api.coldstart.win/v1/chat/speech \
-H "Authorization: Bearer $COLDSTART_API_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"你好,今天過得怎么樣?","voice":"speech-pro:Ashley","stream":true}' \
| ffplay -nodisp -autoexit -f mp3 -i pipe:0電話客戶端應逐塊讀取響應,並交給持續運行的 MP3 解碼器/播放器。瀏覽器可通過 response.body.getReader() 配合串流播放實現;呼叫 response.blob()、arrayBuffer() 或 json() 會等待完整響應。網路資料塊並非獨立 MP3 文件,不能把每塊當作完整音頻分別解碼。使用者打斷或掛斷時取消 fetch/reader。瀏覽器播放仍需通過使用者交互解鎖音頻權限。
響應頭提供 X-Speech-Voice(URL 編碼後的對外音色 ID)、X-Speech-Credits、X-Speech-Characters 和 X-Speech-Usage-Id。點數金額為本次預扣金額;成功完成後,價格與非串流相同,按字元計費。串流失敗或服務端完成處理前斷連,會退回本次點數並記錄失敗用量;服務端已經成功完成後再取消,不會撤銷成功扣費。
音頻開始前的錯誤仍返回常規 HTTP 狀態和 JSON 錯誤體;開始後若失敗,會中斷連接,請丟棄不完整音頻,並在任務歷史核對最終扣費。收到 HTTP 200 或首塊音頻不代表請求已經成功完成。若客戶端前還有額外代理,應關閉此路由的響應緩沖與壓縮;API 已發送 X-Accel-Buffering: no 和 Cache-Control: no-store, no-transform。
語音文本被明確判定違反內容政策時,串流和非串流請求都會在音頻開始前返回 HTTP 400,錯誤碼為 content_policy_violation,並退回點數。請勿自動重試相同文本,應調整為符合內容政策的文本。支援串流不代表沒有內容限制。
語音請求獨立處理,請明確傳入所需的公開音色 ID。語音非串流返回包含音頻 data URI 和賬單的 JSON,串流返回音頻字節。
語音消耗 = 清理後文本的計費字元數 × 模型每千字元單價 / 1,000,向上保留八位小數。Speech Light、Speech Pro 和 Speech Expressive 按 UTF-16 單位計數,以目錄標注為準:普通中文、英文字母計 1,😀 等補充平面字元計 2。Speech Standard 按 Unicode 碼點計數。目錄的 speechModels[].characterCounting 和響應的 billing.character_counting 標明規則(utf16_code_units 或 unicode_codepoints);billing.characters 為實際計費數量。格式標記和動作描述在合成和計數前移除。失敗或空音頻原額退款。每次合成請求收費,直接重播返回的音頻不收費;控制臺在當前頁面按消息和音色快取音頻。