Chat API
使用 Rivya Chat API 傳送非串流或 SSE 回合、延續 API 建立的工作階段、附加 file_id 圖片,並依權杖用量結算點數。
最近審閱於 2026年8月29日
使用 POST /api/v1/chat/completions 取得一則完整的非串流聊天回應,或使用 POST /api/v1/chat/completions/stream 取得 Server-Sent Events。
Chat API 以工作階段為基礎。省略 session_id 會建立新的 API 聊天工作階段;傳入回傳的 session_id,即可接續同一個由 API 建立的工作階段。
本文介紹的是已實作的公開 API v1 規格。實際能否執行,仍取決於目前部署是否啟用公開 API、帳號是否有有效的 API 金鑰,以及所選模型在即時模型清單中是否標示為可透過 API 使用;有文件不代表每個環境都能呼叫。
目前範圍
Chat API v1 支援:
非串流的助理回應
使用
text/event-stream的 SSE 串流API 建立的聊天工作階段
預留帳號點數,並依最終權杖用量結算
所選模型支援時,可選用網頁搜尋、推理強度和思考模式
透過 Files API
file_id值加入圖片附件
Chat API v1 不支援:
使用者自行提供完整的
messages歷史記錄接續只能在 Studio 使用的聊天工作階段
任意外部附件 URL
Chat Webhook 事件
所需權限範圍
使用包含以下權限範圍的 API 金鑰:
chat:create
chat:read在設定中建立的新金鑰預設包含這兩項權限。較早建立的金鑰可能需要重新建立,才能呼叫 Chat API。
建立 Chat 回覆
curl https://rivya.ai/api/v1/chat/completions \
-H "Authorization: Bearer rvya_sk_..." \
-H "Content-Type: application/json" \
-H "Idempotency-Key: chat-turn-001" \
-d '{
"model": "claude-sonnet-5-chat",
"message": "Write a concise launch plan for a new product image campaign",
"client_request_id": "chat-001"
}'回應:
{
"id": "chatcmpl_...",
"object": "chat.completion",
"session_id": "session_id",
"model": "claude-sonnet-5-chat",
"created_at": "2026-05-11T00:00:00.000Z",
"message": {
"id": "assistant_message_id",
"role": "assistant",
"content": "..."
},
"usage": {
"input_tokens": 1200,
"output_tokens": 320,
"total_tokens": 1520
},
"credits": {
"reserved": 3,
"final": 2
}
}串流 Chat 回覆
若伺服器要在助理的增量內容抵達時即時接收,請使用 POST /api/v1/chat/completions/stream:
curl -N https://rivya.ai/api/v1/chat/completions/stream \
-H "Authorization: Bearer rvya_sk_..." \
-H "Content-Type: application/json" \
-H "Accept: text/event-stream" \
-H "Idempotency-Key: chat-stream-001" \
-d '{
"model": "claude-sonnet-5-chat",
"message": "Write a concise launch plan for a new product image campaign",
"client_request_id": "chat-stream-001"
}'串流回應使用 Content-Type: text/event-stream; charset=utf-8。
事件:
| 事件 | 意義 |
|---|---|
session.created | API 金鑰、模型、工作階段、附件、速率限制和點數預留檢查均已通過。 |
message.delta | 用來顯示助理訊息的增量內容,尚未成為已提交的訊息。 |
message.completed | 助理訊息已提交到由 API 建立的工作階段。 |
usage.completed | 權杖用量與最終點數已完成結算。 |
heartbeat | 長時間停頓時用來保持連線的事件。 |
error | 串流開始後發生失敗時,公開 API 傳回的錯誤物件。 |
done | 串流已成功完成。 |
範例串流:
event: session.created
data: {"request_id":"req_...","session_id":"session_id","model":"claude-sonnet-5-chat"}
event: message.delta
data: {"request_id":"req_...","session_id":"session_id","delta":"Draft ","index":0}
event: message.completed
data: {"request_id":"req_...","session_id":"session_id","message":{"id":"assistant_message_id","role":"assistant","content":"Draft ...","created_at":"2026-05-11T00:00:00.000Z"}}
event: usage.completed
data: {"request_id":"req_...","session_id":"session_id","usage":{"input_tokens":1200,"output_tokens":320,"total_tokens":1520},"credits":{"reserved":3,"final":2}}
event: done
data: {"request_id":"req_...","ok":true}如果第一個 SSE 事件之後才發生錯誤,串流會送出 event: error,然後關閉:
event: error
data: {"error":{"code":"internal_error","message":"The request could not be completed.","requestId":"req_..."}}如果用戶端在完成前斷線,Rivya 會在可行時停止仍在進行的生成串流。未完成的增量內容不會儲存為最終助理訊息。如果伺服器已經提交 message.completed,之後可以使用 GET /api/v1/chat/sessions/{sessionId} 讀取最終結果。
繼續工作階段
使用回傳的 session_id:
curl https://rivya.ai/api/v1/chat/completions \
-H "Authorization: Bearer rvya_sk_..." \
-H "Content-Type: application/json" \
-H "Idempotency-Key: chat-turn-002" \
-d '{
"model": "claude-sonnet-5-chat",
"session_id": "session_id",
"message": "Now turn that into a 5-step execution checklist."
}'這個工作階段必須屬於同一個 Rivya 帳號,而且必須由公開 API 建立。只能在 Studio 使用的聊天工作階段,無法透過 Chat API 回傳或接續。
圖片附件
Chat 附件使用 Files API 記錄,而不是外部 URL。
使用
POST /api/v1/files上傳圖片。使用回傳的
id作為attachments[].file_id。
{
"model": "<image-capable-chat-model-id>",
"message": "Review this product photo and suggest a cleaner editorial direction.",
"attachments": [
{
"file_id": "file_..."
}
]
}檔案必須屬於同一帳號、kind 為 image,而且處於可用狀態。請將預留位置換成目前可用,且 /api/v1/models 的 chat_capabilities 明確標示支援圖片附件的聊天模型。本文其他範例使用的 claude-sonnet-5-chat 僅支援文字,不能用於這項附件請求。不支援圖片附件的模型會回傳 chat_attachment_not_supported。
選用控制項
{
"model": "claude-sonnet-5-chat",
"message": "Compare three launch options.",
"enable_web_search": false,
"reasoning_effort": "default",
"thought_mode": "default"
}控制項支援會因模型而異。在你的 UI 中公開控制項前,請讀取 /api/v1/models 並檢查 chat_capabilities。
列出工作階段
使用 GET /api/v1/chat/sessions,並搭配包含 chat:read 權限的金鑰。
curl https://rivya.ai/api/v1/chat/sessions \
-H "Authorization: Bearer rvya_sk_..."這只會回傳 API 建立的工作階段:
{
"object": "list",
"data": [
{
"id": "session_id",
"object": "chat.session",
"model": "claude-sonnet-5-chat",
"tool_slug": null,
"title": "Write a concise launch plan...",
"controls": {
"enable_web_search": false,
"reasoning_effort": null,
"thought_mode": null
},
"created_at": "2026-05-11T00:00:00.000Z",
"updated_at": "2026-05-11T00:00:00.000Z",
"last_message_at": "2026-05-11T00:00:00.000Z"
}
]
}取得工作階段
使用 GET /api/v1/chat/sessions/{sessionId} 讀取一個 API 建立的工作階段和其中已提交的訊息。
curl https://rivya.ai/api/v1/chat/sessions/session_id \
-H "Authorization: Bearer rvya_sk_..."回應包含已提交的使用者與助理訊息,不會公開內部供應商欄位。
冪等性
每個正式環境請求都應使用 Idempotency-Key:POST /api/v1/chat/completions 和 POST /api/v1/chat/completions/stream。
如果重試時使用相同金鑰值與相同請求內容,Rivya 可以回傳已儲存的回應,不會再建立另一則訊息或重複消耗點數。若同一金鑰值搭配不同輸入重複使用,API 會回傳 idempotency_conflict。
重試串流請求時,Rivya 不會重播過去的權杖增量。若原請求已完成,重播時會回傳最精簡的 SSE 序列,包括 session.created、message.completed、usage.completed 和 done。
常見錯誤
| 代碼 | 意義 |
|---|---|
chat_model_not_supported | 所選模型不適用於 Chat API。 |
chat_session_conflict | 這個工作階段不能用於此請求。 |
chat_attachment_not_supported | 附件缺失、不屬於該帳號、不是圖片,或模型不支援。 |
insufficient_credits | 帳號沒有足夠點數完成這一回合。 |
idempotency_conflict | 同一冪等金鑰值被用於不同輸入。 |
