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)

參數類型必填限制說明
contentstring是≤30,000 字元,不可全為空白要翻譯的摘要原文
target_languagestring是支援語言的語言代碼目標語言
source_languagestring否支援語言的語言代碼原文語言。不帶時自動判斷。與 target_language 相同時回 422
idempotency_keystring是≤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 }
欄位類型說明
textstring目前累積的譯文全文。每一則都是前一則的延伸
is_finalboolean是否為最後一則。最後一則的 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_usednumber總 token 用量
source_languagestring | null請求帶入的原文語言;沒帶時為 null
target_languagestring目標語言
characters_billednumber計費依據(content 的字元數)
chargedstring依費率計算的消耗點數。此值反映用量:吃到飽方案已涵蓋的用量、免費重試、判定沒有翻完時,仍回報這個數字。有沒有實際扣點,請看 billed
idempotency_keystring請求帶入的識別碼,原樣回傳,方便對帳
billedboolean本次是否實際扣點。同一識別碼的免費重試,以及判定為沒有翻完時為 false。對帳請以此欄為準
truncatedboolean僅在譯文不完整時出現(值恆為 true),譯文完整時沒有這個欄位。原因有兩種:翻譯達到處理時間或長度上限而被截斷(照常計費),或譯文明顯少於原文、判定為沒有翻完(不計費)。這次若不是同一識別碼的重試,可以用 billed 區分:true 是被截斷,false 是判定沒有翻完

收到 truncated: true 時,最後一則的 text 不是完整譯文。建議不要當作正式譯文保存,可以提示使用者重試。


處理時間與截斷

  • 一次請求的處理時間上限約 230 秒,從送出請求開始算。
  • 時間到時,如果已經有譯文,會把目前的內容當成截斷送出:done 帶 truncated: true,照常計費。如果連一個字都還沒有收到,就送 error(Translation timed out),不計費。
  • 翻譯途中停頓超過 60 秒沒有新內容,會送 error(Translation timed out),不計費。

特有錯誤碼

串流開始前(真實 HTTP 狀態碼加 JSON):

錯誤碼HTTP說明處理建議
validation_failed422參數驗證失敗,例如缺欄位、超過 30,000 字元、全為空白、不支援的語言、原文語言與目標語言相同、文字編碼無效依 data.details.errors 修正欄位
summary_idempotency_key_conflict409同一個 idempotency_key 已經用在不同的請求內容上換新的 idempotency_key
stt_quota_exceeded402可用點數不足以支付本次應收點數儲值後重試
too_many_requests429超過頻率限制,或同一個 idempotency_key 的免費重試次數已達上限(以 24 小時為窗口)。重送同一個識別碼時收到 429,就是免費重試達上限頻率限制請稍後再試;免費重試達上限時請改用新的 idempotency_key,收到後不要進入短間隔重試

串流開始後(HTTP 200 加 SSE error 事件):

錯誤碼details.original_error說明處理建議
sse_summary_translation_failedTranslation timed out等待回應逾時、翻譯途中停頓超過 60 秒,或時間到時還沒有任何譯文稍後重試
sse_summary_translation_failedEmpty translation翻譯結果為空。長內容時,可能已經收到部分譯文確認內容後重試
sse_summary_translation_failedTranslation service unavailable翻譯服務暫時無法使用,或連線中途中斷稍後重試
sse_summary_translation_failedService error其他錯誤,包含一開始就無法連上翻譯服務稍後重試;持續發生請附上 request_id 聯繫我們
llm_content_filteredContent filtered內容無法翻譯重試無效,請調整內容

以上錯誤都不計費,也不佔用識別碼。


版本:V1.24.1 最後更新:2026-09-28

Copyright © 2026