翻訳 API リファレンス
Shisa 翻訳 API は、単一の multipart/form-data リクエストで、ソース言語とターゲット言語の間でテキストを翻訳します。このページでは、エンドポイント、そのフォームフィールド、非ストリーミングレスポンス、ストリーミング形式について説明します。
エンドポイント
POST https://api.shisa.ai/translate/
Authorization ヘッダーで、標準的なベアラートークンを使って認証します。
Authorization: Bearer YOUR_API_KEY
翻訳は標準的なベアラートークンで認証します。これはすべての Shisa サービスで共通です。トークンが欠落または不正な形式の場合は 401 エラーが返されます。完全な規約については 認証 を参照してください。
リクエストボディは multipart/form-data です — 以下のフィールドは JSON ではなくフォームフィールドとして送信します。
リクエストフィールド
| Field | Type | Required | 説明 |
|---|---|---|---|
text | string | Required | 翻訳するテキスト。最大10,000 Unicodeコードポイント。 |
source_lang | string | Required | ソース言語コード(例: ja)。 |
target_lang | string | Required | ターゲット言語コード(例: en)。 |
stream | string | Optional | 単一の JSON レスポンスの場合は "false"(デフォルト)、Server-Sent Events の場合は "true"。 |
keywords | repeated string | Optional | 保持する用語集。用語ごとにフォームフィールドを繰り返します。最大20件、各項目100バイトまで。 |
context | string | Optional | 以前の会話などの文脈。最大2,000 Unicodeコードポイント。 |
model | string | Optional | 翻訳モデルの上書き。デフォルト: shisa-ai/chotto。 |
非ストリーミングレスポンス
stream=false(デフォルト)の場合、API は OpenAI スタイルの JSON オブジェクトを返します。翻訳されたテキストは choices[0].message.content にあります。
{
"id": "trans_20f537a6-da14-4c98-8ee3-063319c45072",
"object": "translation.completion",
"created": 1768299459,
"model": "shisa-v2.1-unphi4-14b",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "お腹が空いた。"
},
"finish_reason": "stop"
}
],
"transcription": "I am hungry",
"source_lang": "en",
"target_lang": "ja",
"usage": {
"prompt_tokens": 47,
"completion_tokens": 8,
"total_tokens": 55
}
}
| Field | 説明 |
|---|---|
id | 翻訳の一意の識別子。trans_ のプレフィックスが付きます。 |
object | オブジェクトタイプ。非ストリーミングレスポンスの場合は translation.completion です。 |
created | 翻訳が作成された時刻の Unix タイムスタンプ(秒)。 |
model | バックエンドがレスポンスで報告したモデル ID。リクエストで使用した shisa-ai/chotto エイリアスと異なる場合があります。 |
choices | 翻訳の選択肢の配列。各エントリには index、role と content を持つ message、finish_reason があります。 |
choices[0].message.content | 翻訳されたテキスト。 |
transcription | 翻訳された元のソーステキスト。 |
source_lang | 翻訳に使用されたソース言語コード。 |
target_lang | 翻訳に使用されたターゲット言語コード。 |
usage | トークンの集計: prompt_tokens、completion_tokens、total_tokens。 |
ストリーミングレスポンス
リアルタイム配信のために翻訳を Server-Sent Events として受け取るには stream=true を設定します。
curl -X POST "https://api.shisa.ai/translate/" \
-H "Authorization: Bearer YOUR_API_KEY" \
-F "text=I am hungry" \
-F "source_lang=en" \
-F "target_lang=ja" \
-F "stream=true"
各チャンクはtranslation.completion.chunkオブジェクトを持つdata:イベントで、テキスト(空文字列の場合もあります)はchoices[0].delta.contentに入ります。1つのリクエストの全チャンクは同じidを使用します。最初のチャンクにはtranscription、source_lang、target_langも含まれます。バックエンドが利用量を送信したチャンクにはusageも含まれ、その後にdata: [DONE]が続きます。ストリーミングチャンクにはfinish_reasonは含まれません。
data: {"id": "trans_446d7397-...", "object": "translation.completion.chunk", "transcription": "I am hungry", "source_lang": "en", "target_lang": "ja", "choices": [{"delta": {"content": ""}, "index": 0}]}
data: {"id": "trans_446d7397-...", "object": "translation.completion.chunk", "choices": [{"delta": {"content": "お"}, "index": 0}]}
data: {"id": "trans_446d7397-...", "object": "translation.completion.chunk", "choices": [{"delta": {"content": "腹が"}, "index": 0}]}
data: {"id": "trans_446d7397-...", "object": "translation.completion.chunk", "choices": [{"delta": {"content": "空いた"}, "index": 0}]}
data: {"id": "trans_446d7397-...", "object": "translation.completion.chunk", "choices": [{"delta": {"content": "。"}, "index": 0}]}
data: {"id": "trans_446d7397-...", "object": "translation.completion.chunk", "choices": [{"delta": {"content": ""}, "index": 0}], "usage": {"prompt_tokens": 47, "completion_tokens": 8, "total_tokens": 55}}
data: [DONE]