SSE API
摘要翻譯 SSE
連線資訊
| 項目 | 值 |
|---|---|
| 基礎路徑 | https://vas-poc.vurbo.ai/api/v1/sse |
| 協定 | HTTP + Server-Sent Events (SSE) |
| 資料格式 | text/event-stream |
| 認證方式 | Header X-API-Key: {KEY}(本端點不接受 query string 帶金鑰) |
注意:本端點只接受 POST(JSON body),瀏覽器原生的 EventSource API 無法使用。請改用 fetch API 搭配 ReadableStream,或任何能讀取串流回應的 HTTP 客戶端。
端點總覽
| 方法 | 端點 | 是否保存結果 | 計費 | 用途 |
|---|---|---|---|---|
| POST | /api/v1/sse/summary/translate | 否 | 是 | 把請求自帶的摘要文字翻譯成指定語言(不綁定任何錄音) |
與重新翻譯摘要的差異:
- 重新翻譯摘要:輸入是服務端為該錄音保存的摘要,不計費。
- 本端點:輸入是請求帶入的
content,適用於服務端沒有的內容,例如合併後的摘要、使用者編輯過的摘要。
兩者翻譯的方式相同,結果都不會儲存,只以串流回傳給客戶端。
v1.17.0 新增。
請求參數(JSON body)
| 參數 | 類型 | 必填 | 限制 | 說明 |
|---|---|---|---|---|
content | string | 是 | ≤30,000 字元,不可全為空白 | 要翻譯的摘要原文 |
target_language | string | 是 | 支援語言的語言代碼 | 目標語言 |
source_language | string | 否 | 支援語言的語言代碼 | 原文語言。不帶時自動判斷。與 target_language 相同時回 422 |
idempotency_key | string | 是 | ≤64 字元、A-Z a-z 0-9 . _ - | 重複請求識別碼,用來避免重複扣點,規則與 Ad-hoc 摘要 相同 |
錯誤回應模式
本端點供後端系統整合使用。串流開始前的錯誤一律回真實 HTTP 狀態碼(JSON body),與 Ad-hoc 摘要 相同:
| 階段 | 回應形式 |
|---|---|
| 認證失敗(401/403)、參數驗證失敗(422)、點數不足(402)、重複請求識別碼衝突(409)、超過頻率限制或免費重試次數(429) | 真實 HTTP 狀態碼加 JSON 錯誤 body |
| 串流開始後(翻譯失敗、逾時、內容被過濾等) | HTTP 200 加 SSE error 事件 |
422 的 JSON body 會在 data.details.errors 列出各欄位的錯誤訊息。
計費
- 依
content的字元數計費:每 200 字元 0.1 點(未滿 200 字元以 200 字元計),與全文重新翻譯的費率相同。 - 例:450 字元=0.3 點;30,000 字元=15 點。
- 翻譯成功才計費;以
error結束的請求不計費。 - 被截斷的譯文(見下方「處理時間與截斷」)照常計費;判定為「沒有翻完」的譯文不計費。有沒有實際扣點,一律以
done的billed為準。
重複請求與計費保證
系統以整份請求內容(content、target_language、source_language)判斷兩次請求是否為同一次工作的重試:
| 情境 | 行為 |
|---|---|
| 同一識別碼、完全相同的請求重試 | 不重複計費,但會重新翻譯,不會重播上次的結果 |
| 同一識別碼、任一欄位不同(包括只換目標語言) | 回 409 summary_idempotency_key_conflict,不翻譯、不計費 |
| 首次請求失敗、或判定為沒有翻完之後重試 | 不佔用識別碼,重試時視為全新請求 |
idempotency_key只在同一把 API Key 內有效。要翻譯新的內容,或換成另一種語言,請帶新的idempotency_key。
請求範例
curl -N -X POST "https://vas-poc.vurbo.ai/api/v1/sse/summary/translate" \
-H "X-API-Key: vas_aB3dE5fG7hI9jK1lM3nO5pQ7rS9tU1vW" \
-H "Content-Type: application/json" \
-d '{
"content": "## 會議摘要\n\n1. 產品上線時程確認為下月初",
"target_language": "ja-JP",
"source_language": "zh-TW",
"idempotency_key": "summary-7f3a-ja"
}'
事件序列
1. connected → 連線確認
2. summary_translation → 譯文(重複 N 次,累積式)
3. done → 翻譯完成
或
error → 翻譯失敗(流程中止,不會送出 done)
connected
{ "message": "Summary translation stream connected (target_language: ja-JP)" }
summary_translation
{ "text": "## 会議の要約\n\n1. 製品のリリース時期は来月初めに確定", "is_final": false }
| 欄位 | 類型 | 說明 |
|---|---|---|
text | string | 目前累積的譯文全文。每一則都是前一則的延伸 |
is_final | boolean | 是否為最後一則。最後一則的 text 就是這次交付的完整內容;如果 done 帶 truncated,表示這份譯文不完整 |
長內容的串流方式:內容較長時,串流常會一次送出一大段(可能達數千字),兩則之間也可能停頓數秒。每一則仍是累積全文,順序與原文一致。
如果要在畫面上逐字呈現,請在客戶端自行做平滑處理。
done
{
"tokens_used": 230,
"source_language": "zh-TW",
"target_language": "ja-JP",
"characters_billed": 24,
"charged": "0.1",
"idempotency_key": "summary-7f3a-ja",
"billed": true
}
| 欄位 | 類型 | 說明 |
|---|---|---|
tokens_used | number | 總 token 用量 |
source_language | string | null | 請求帶入的原文語言;沒帶時為 null |
target_language | string | 目標語言 |
characters_billed | number | 計費依據(content 的字元數) |
charged | string | 依費率計算的消耗點數。此值反映用量:吃到飽方案已涵蓋的用量、免費重試、判定沒有翻完時,仍回報這個數字。有沒有實際扣點,請看 billed |
idempotency_key | string | 請求帶入的識別碼,原樣回傳,方便對帳 |
billed | boolean | 本次是否實際扣點。同一識別碼的免費重試,以及判定為沒有翻完時為 false。對帳請以此欄為準 |
truncated | boolean | 僅在譯文不完整時出現(值恆為 true),譯文完整時沒有這個欄位。原因有兩種:翻譯達到處理時間或長度上限而被截斷(照常計費),或譯文明顯少於原文、判定為沒有翻完(不計費)。這次若不是同一識別碼的重試,可以用 billed 區分:true 是被截斷,false 是判定沒有翻完 |
收到
truncated: true時,最後一則的text不是完整譯文。建議不要當作正式譯文保存,可以提示使用者重試。
處理時間與截斷
- 一次請求的處理時間上限約 230 秒,從送出請求開始算。
- 時間到時,如果已經有譯文,會把目前的內容當成截斷送出:
done帶truncated: true,照常計費。如果連一個字都還沒有收到,就送error(Translation timed out),不計費。 - 翻譯途中停頓超過 60 秒沒有新內容,會送
error(Translation timed out),不計費。
特有錯誤碼
串流開始前(真實 HTTP 狀態碼加 JSON):
| 錯誤碼 | HTTP | 說明 | 處理建議 |
|---|---|---|---|
validation_failed | 422 | 參數驗證失敗,例如缺欄位、超過 30,000 字元、全為空白、不支援的語言、原文語言與目標語言相同、文字編碼無效 | 依 data.details.errors 修正欄位 |
summary_idempotency_key_conflict | 409 | 同一個 idempotency_key 已經用在不同的請求內容上 | 換新的 idempotency_key |
stt_quota_exceeded | 402 | 可用點數不足以支付本次應收點數 | 儲值後重試 |
too_many_requests | 429 | 超過頻率限制,或同一個 idempotency_key 的免費重試次數已達上限(以 24 小時為窗口)。重送同一個識別碼時收到 429,就是免費重試達上限 | 頻率限制請稍後再試;免費重試達上限時請改用新的 idempotency_key,收到後不要進入短間隔重試 |
串流開始後(HTTP 200 加 SSE error 事件):
| 錯誤碼 | details.original_error | 說明 | 處理建議 |
|---|---|---|---|
sse_summary_translation_failed | Translation timed out | 等待回應逾時、翻譯途中停頓超過 60 秒,或時間到時還沒有任何譯文 | 稍後重試 |
sse_summary_translation_failed | Empty translation | 翻譯結果為空。長內容時,可能已經收到部分譯文 | 確認內容後重試 |
sse_summary_translation_failed | Translation service unavailable | 翻譯服務暫時無法使用,或連線中途中斷 | 稍後重試 |
sse_summary_translation_failed | Service error | 其他錯誤,包含一開始就無法連上翻譯服務 | 稍後重試;持續發生請附上 request_id 聯繫我們 |
llm_content_filtered | Content filtered | 內容無法翻譯 | 重試無效,請調整內容 |
以上錯誤都不計費,也不佔用識別碼。
版本:V1.24.1 最後更新:2026-09-28