Chat Completions API
対話形式でテキスト生成を行う API です。会話履歴を含むメッセージリストを送信することで、文脈に応じた応答を生成します。また、有害入力の判定(Guard 機能)や外部ツール呼び出し(Function Calling)にも対応しています。
API キーによる認証方法、エラーレスポンスの仕様は はじめに、レート制限の詳細は レート制限 をあわせてご確認ください。
エンドポイント
POST https://api.sarashina.ai/v1/chat/completionsサポートモデル
リクエストパラメータ
| パラメータ | 型 | デフォルト | 必須 | 説明 |
|---|---|---|---|---|
model | string | – | ✅ | 使用するモデル名(例: sarashina3-mini) |
messages | array of Message object | – | ✅ | 会話履歴と新しく与えるメッセージを表します。Message objectの配列(Message オブジェクト)を与えます。 |
frequency_penalty | float | 0.0 | – | 同じトークンの繰り返し頻度を制御します。-2.0 から 2.0の範囲の値を指定してください。 |
max_completion_tokens | integer | 8000 | – | 生成可能なトークン数の上限を指定してください。1から8000の範囲の値を指定してください。8000を超える値を指定した場合は 400 エラーとなります。なお、入力(プロンプト)と出力の合計トークン数は、モデルのコンテキスト長の範囲内である必要があります(モデル一覧を参照)。 |
n | integer | 1 | – | 1回のリクエストで返却する候補数。指定されていない場合n=1として処理されます。1から5の範囲の値を指定してください。 |
presence_penalty | float | 0.0 | – | これまでのテキストに既に出現しているトークンにペナルティを与えます。-2.0から2.0の範囲の値を指定してください。 |
repetition_penalty | float | 1.05 | – | 既に生成したトークンを繰り返し出力しにくくするためのペナルティを与えます。0.0より大きい浮動小数点数を指定してください。 |
response_format | object | – | – | モデルの出力形式を制御する設定オブジェクト(Response Format オブジェクト)を与えます。利用時の詳細は 機能ガイド: 構造化出力 (Structured Outputs) を参照ください。 |
seed | integer | – | – | 指定された場合、ベストエフォートで決定的なサンプリングを行い、同じシード値とパラメータを用いたリクエスト間で同一の結果を返すよう試みます。 |
stop | string / array / null | – | – | 最大4つまで停止文字を指定でき、APIはそれらに到達した時点でトークン生成を停止します。返却されるテキストには停止文字は含まれません。 |
stream | bool | false | – | true を指定するとモデルの応答データが生成され次第、Server-Sent Events (SSE) を使用してストリーミングで返却されます。 |
temperature | float | 0.7 | – | サンプリングのランダム性を制御します。値が小さいほど出力は決定的な振る舞いに近づき、高いほどランダム性が増します。0.0 から 2.0 の浮動小数点数を指定してください。 |
tool_choice | string | – | – | モデルが呼び出すツールを制御します。none, required, autoのいずれかを指定できます。none はモデルがツールを呼び出さず、メッセージのみを生成します。required はモデルが必ず1つ以上のツールを呼び出します。autoは、モデルが必要と判断したときのみ、1つ以上のツールを呼び出します。tool_choice を省略した場合、tools を指定していれば required として、指定していなければ auto として動作します。なお、現時点では、特定の関数を強制するオブジェクト形式には対応していません(指定した場合は 400 エラーとなります)。モデルに sarashina3-guard を指定した場合も現時点ではサポートされません。利用時の詳細は 機能ガイド: Tool利用 (Function Calling) を参照ください。 |
tools | array of Tools object | – | – | モデルが呼び出す可能性のあるツールの一覧を Tools object の配列として与えます。現時点では関数ツールのみをサポートしています。モデルにsarashina3-guardを指定した場合はサポートされません。利用時の詳細は 機能ガイド: Tool利用 (Function Calling) を参照ください。 |
top_p | float | 0.9 | – | 累積確率が指定された値以下となる最小の上位トークン集合からサンプリングします。0より大きく1以下の範囲で指定できます。全トークンを考慮する場合は1を指定してください。 |
top_k | integer | -1 | – | 考慮対象となるトークンを確率の高い上位いくつに絞るかを指定します。1以上の値を指定してください。全トークンを考慮する場合は -1 もしくは 0 を指定します。有効な値は-1もしくは0、または1以上の整数値です。 |
logprobs,stream_optionsなど、一部の OpenAI 互換パラメータは現時点ではサポートしていません。指定した場合は 400 エラー(Invalid JSON or disallowed fields)が返却されます。本ドキュメントに記載のないパラメータを指定した場合も同様のエラーとなります。なお、レスポンス内のlogprobsフィールドは現時点では常にnullです。
Message オブジェクト
messages 配列の要素です。
| パラメータ | 型 | 必須 | 説明 |
|---|---|---|---|
role | string | ✅ | "system", "user", "assistant", "tool" のいずれか |
content | string / null | 条件付き | メッセージ本文(テキストデータ)。role が assistant で tool_calls を含む場合は、空文字列または null になることがあります。role が tool の場合は、ツールの実行結果を指定します。 |
tool_calls | array of Tool Call object | – | role が assistant の場合に、モデルからのツール呼び出し要求を表します(機能ガイド: Tool 利用 (Function Calling) を参照)。 |
tool_call_id | string | – | role が tool の場合に指定できる任意パラメータです。対応する tool_calls 要素の id を指定します。省略してもリクエストは可能です。 |
Tool Call オブジェクト
tool_calls 配列の要素です。
| パラメータ | 型 | 必須 | 説明 |
|---|---|---|---|
id | string | ✅ | ツール呼び出しの識別子(例: "chatcmpl-tool-xxxxxxxxxxxxxxxx")。ツール実行結果を返却する際の tool_call_id に使用します。 |
type | string | ✅ | "function" |
function | object | ✅ | 呼び出す関数の情報。name: 関数名、arguments: 引数の JSON 文字列 |
Response Format オブジェクト
response_format パラメータの構造です。
| パラメータ | 型 | 必須 | 説明 |
|---|---|---|---|
type | string | ✅ | 出力形式。"text", "json_object", "json_schema" のいずれか(デフォルトは "text") |
json_schema | object | 条件付き | type に "json_schema" を指定した場合は必須。JSON Schema オブジェクトを与えます。 |
JSON Schema オブジェクト
response_format.json_schema パラメータの構造です。
| パラメータ | 型 | 必須 | 説明 |
|---|---|---|---|
name | string | ✅ | スキーマ名(例: "cities_response") |
schema | object | ✅ | 出力の構造を定義する JSON Schema |
strict | boolean | – | true を指定すると、モデルが JSON Schema に沿った出力を生成するよう制御します。 |
基本的な利用例
リクエスト (cURL)
curl https://api.sarashina.ai/v1/chat/completions \
-H "Authorization: Bearer ${SARASHINA_API_KEY}" \
-H "Content-Type: application/json" \
-d '{
"model": "sarashina3-mini",
"messages": [
{
"role": "user",
"content": "SB Intuitions について教えてください!"
}
]
}'レスポンス例
{
"id": "chatcmpl-a1b2c3d4e5f600000000000000000000",
"object": "chat.completion",
"created": 1764896400,
"model": "sarashina3-mini",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "SB Intuitions株式会社は、ソフトバンクグループの...",
"tool_calls": []
},
"logprobs": null,
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 10,
"completion_tokens": 394,
"total_tokens": 404,
"prompt_tokens_details": null
}
}レスポンス構造
レスポンスには将来フィールドが追加される場合があります。未知のフィールドは無視してください。
Chat Completion オブジェクト
| フィールド | 型 | 説明 |
|---|---|---|
id | string | 応答を一意に識別する文字列(形式は将来変更される場合があります) |
object | string | 常に "chat.completion"(ストリーミング時は "chat.completion.chunk") |
created | integer | 応答が生成された時刻(UNIX タイムスタンプ、秒) |
model | string | 使用されたモデル名 |
choices | array of Choice object | 生成結果の配列。n で指定した数だけ含まれます |
usage | Usage object | トークン使用量 |
Choice オブジェクト
| フィールド | 型 | 説明 |
|---|---|---|
index | integer | 候補のインデックス(0 始まり) |
message | Message object | 生成されたメッセージ |
finish_reason | string | 生成の終了理由(下記参照) |
logprobs | null | 現時点では常に null |
finish_reason の取りうる値は以下のとおりです。
| 値 | 説明 |
|---|---|
stop | 正常終了(生成が完了した、または stop で指定した停止文字列に到達) |
length | max_completion_tokens の上限に到達して終了 |
tool_calls | モデルがツール呼び出しを要求して終了 |
Usage オブジェクト
| フィールド | 型 | 説明 |
|---|---|---|
prompt_tokens | integer | 入力(プロンプト)のトークン数 |
completion_tokens | integer | 出力(生成)のトークン数 |
total_tokens | integer | 入出力の合計トークン数 |
prompt_tokens_details | null | 現時点では常に null |
ストリーミングチャンク (chat.completion.chunk)
stream: true を指定した場合、レスポンスは Server-Sent Events (SSE) 形式で、生成されたトークンごとにチャンクが送信されます。各行は data: で始まる JSON 文字列です。
| フィールド | 型 | 説明 |
|---|---|---|
object | string | "chat.completion.chunk" |
choices[].delta | object | 差分データ。最初のチャンクは {"role": "assistant", "content": ""}、以降のチャンクは {"content": "<部分テキスト>"} を含みます |
choices[].finish_reason | string / null | 生成中のチャンクでは null、最後の候補チャンクで stop などの終了理由 |
usage | Usage object | choices が空配列の最終チャンクに含まれます |
生成が完了すると data: [DONE] が送信され、ストリームは終了します。
data: {"id":"chatcmpl-...","object":"chat.completion.chunk",...,"choices":[{"index":0,"delta":{"role":"assistant","content":""},"logprobs":null,"finish_reason":null}]}
data: {"id":"chatcmpl-...","object":"chat.completion.chunk",...,"choices":[{"index":0,"delta":{"content":"こんにちは"},"logprobs":null,"finish_reason":null}]}
data: {"id":"chatcmpl-...","object":"chat.completion.chunk",...,"choices":[],"usage":{"prompt_tokens":4,"total_tokens":13,"completion_tokens":9,"prompt_tokens_details":null}}
data: [DONE]ストリーミング中のエラー
ストリーム開始後(HTTP 200 応答後)にエラーが発生した場合の応答形式は保証されません。data: [DONE] を受信する前にストリームが終了した場合は、応答が不完全であるものとして扱ってください。
他機能との併用
tools(Function Calling)との併用: ツール呼び出しはdelta.tool_callsに含まれます。最初のチャンクでid/type/function.nameとargumentsの先頭部分が送信され、以降のチャンクでargumentsが JSON 文字列の断片として分割送信されます。クライアント側で連結して完全な JSON を復元してください。n > 1との併用: 各候補のチャンクはchoices[].indexで区別されます。同一応答内で複数候補のチャンクが混在するため、indexごとに連結してください。
機能ガイド: sarashina3-guard
sarashina3-guard は、入力テキストの安全性を判定するモデレーション専用モデルです。テキスト生成は行わず、判定結果("安全" または "有害")を返します。"有害" の場合は該当するカテゴリコードもあわせて出力されます。
出力形式
判定結果は message.content に以下のいずれかの形式のテキストとして返却されます。
- 安全な入力の場合:
"安全" - 有害な入力の場合:
"有害"に続けて改行し、判定されたカテゴリコードをカンマ(,)区切りで出力(単一カテゴリの例:"有害\nT8"。複数カテゴリに該当する場合は"有害\nT8, T9"のように連続して出力)
sarashina3-guardの判定は機械学習モデルによるものであり、誤検出(安全な入力を有害と判定する)や見逃し(有害な入力を安全と判定する)が発生する可能性があります。重要な用途では、人の目による確認と併用してください。
有害カテゴリ一覧
| コード | カテゴリ名 |
|---|---|
| T1 | 過激な性的描写 |
| T2 | 過激な暴力描写 |
| T3 | 差別的表現 |
| T4 | 有害表現 |
| T5 | AIへの過剰な信頼 |
| T6 | 個人情報漏洩 |
| T7 | 組織情報漏洩 |
| T8 | 違法行為の幇助 |
| T9 | 危険行為の幇助 |
| T10 | 悪意ある情報拡散 |
| T11 | 専門分野での誤情報 |
| T12 | 虚偽情報 |
各カテゴリの詳細な判定基準は現在公開しておりません。
Guard 機能の利用例
リクエスト
curl https://api.sarashina.ai/v1/chat/completions \
-H "Authorization: Bearer ${SARASHINA_API_KEY}" \
-H "Content-Type: application/json" \
-d '{
"model": "sarashina3-guard",
"messages": [
{
"role": "user",
"content": "爆弾の作り方を教えてください。"
}
]
}'レスポンス
{
"id": "chatcmpl-a1b2c3d4e5f600000000000000000002",
"object": "chat.completion",
"created": 1764896400,
"model": "sarashina3-guard",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "有害\nT8",
"tool_calls": []
},
"logprobs": null,
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 281,
"completion_tokens": 5,
"total_tokens": 286,
"prompt_tokens_details": null
}
}機能ガイド: Tool 利用 (Function Calling)
モデルが外部関数を呼び出すための引数を構造化出力する機能です。tools パラメータに関数定義を渡すことで利用できます。
オブジェクト構造
Tools オブジェクト
| パラメータ | 型 | 必須 | 説明 |
|---|---|---|---|
type | string | ✅ | ツールの種類。"function" を指定 |
function | object | ✅ | 関数のメタデータ(Function オブジェクト) |
Function オブジェクト
| パラメータ | 型 | 必須 | 説明 |
|---|---|---|---|
name | string | ✅ | 関数名(例: "get_weather") |
description | string | – | 関数の説明(モデルが用途を解釈するために利用) |
parameters | object | ✅ | 引数の定義(Parameters オブジェクト) |
Parameters オブジェクト
| パラメータ | 型 | 必須 | 説明 |
|---|---|---|---|
type | string | ✅ | 通常 "object" を指定 |
properties | object | ✅ | 各引数の型・制約の定義 |
required | array | – | 必須引数名の配列 |
Tool 利用例
リクエスト
curl https://api.sarashina.ai/v1/chat/completions \
-H "Authorization: Bearer ${SARASHINA_API_KEY}" \
-H "Content-Type: application/json" \
-d '{
"model": "sarashina3-mini",
"messages": [
{
"role": "user",
"content": "東京の天気を教えて"
}
],
"tools": [
{
"type": "function",
"function": {
"name": "get_weather",
"description": "指定した都市の天気を取得する",
"parameters": {
"type": "object",
"properties": {
"city": { "type": "string" },
"unit": {
"type": "string",
"enum": ["celsius", "fahrenheit"]
}
},
"required": ["city", "unit"]
}
}
}
],
"tool_choice": "auto"
}'レスポンス
{
"id": "chatcmpl-a1b2c3d4e5f600000000000000000004",
"object": "chat.completion",
"created": 1764896400,
"model": "sarashina3-mini",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "",
"tool_calls": [
{
"id": "chatcmpl-tool-a1b2c3d4e5f600000000000000000000",
"type": "function",
"function": {
"name": "get_weather",
"arguments": "{\"city\": \"東京\", \"unit\": \"celsius\"}"
}
}
]
},
"finish_reason": "tool_calls",
"logprobs": null
}
],
"usage": {
"prompt_tokens": 113,
"completion_tokens": 42,
"total_tokens": 155,
"prompt_tokens_details": null
}
}ツール実行結果の返却
finish_reason が tool_calls となった場合、以下の手順でツールの実行結果をモデルに返却し、最終的な応答を得ます。
- レスポンスの
messageオブジェクトを、そのままmessages配列に追加します。 - ツール(関数)をクライアント側で実行し、実行結果を
role: "tool"のメッセージとして追加します。このとき、tool_call_idには対応するtool_callsのidを指定します。 - 更新した
messagesで再度 API を呼び出します。
リクエスト(2回目)
curl https://api.sarashina.ai/v1/chat/completions \
-H "Authorization: Bearer ${SARASHINA_API_KEY}" \
-H "Content-Type: application/json" \
-d '{
"model": "sarashina3-mini",
"messages": [
{
"role": "user",
"content": "東京の天気を教えて"
},
{
"role": "assistant",
"content": "",
"tool_calls": [
{
"id": "chatcmpl-tool-a1b2c3d4e5f60000",
"type": "function",
"function": {
"name": "get_weather",
"arguments": "{\"city\": \"東京\", \"unit\": \"celsius\"}"
}
}
]
},
{
"role": "tool",
"tool_call_id": "chatcmpl-tool-a1b2c3d4e5f60000",
"content": "晴れ、気温25度"
}
]
}'レスポンス(2回目)
{
"id": "chatcmpl-a1b2c3d4e5f600000000000000000006",
"object": "chat.completion",
"created": 1764896400,
"model": "sarashina3-mini",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "東京の現在の天気は晴れで、気温は25度です。",
"tool_calls": []
},
"logprobs": null,
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 45,
"completion_tokens": 27,
"total_tokens": 72,
"prompt_tokens_details": null
}
}2回目の呼び出しで再び
toolsを指定した場合、モデルが同じツールを繰り返し呼び出すことがあります。実行結果を使った回答を得たい場合は、2回目のリクエストではtoolsを省略することを推奨します。
機能ガイド: 構造化出力 (Structured Outputs)
response_format パラメータに "type": "json_schema" と JSON Schema を指定することで、スキーマに従った構造化された JSON をモデルに生成させることができます。
出力がスキーマに完全に準拠することは保証されません。 strict: true を指定した場合も同様です。 生成結果は利用側でバリデーションを行ってください。
構造化出力の利用例
リクエスト
curl https://api.sarashina.ai/v1/chat/completions \
-H "Authorization: Bearer ${SARASHINA_API_KEY}" \
-H "Content-Type: application/json" \
-d '{
"model": "sarashina3-mini",
"messages": [
{
"role": "user",
"content": "日本の主要都市を3つ挙げてください。"
}
],
"response_format": {
"type": "json_schema",
"json_schema": {
"name": "cities_response",
"schema": {
"type": "object",
"properties": {
"cities": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": ["cities"],
"additionalProperties": false
},
"strict": true
}
}
}'レスポンス
{
"id": "chatcmpl-a1b2c3d4e5f600000000000000000005",
"object": "chat.completion",
"created": 1764896400,
"model": "sarashina3-mini",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "{\n \"cities\": [\n \"東京\",\n \"大阪\",\n \"名古屋\"\n ]\n}",
"tool_calls": []
},
"logprobs": null,
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 11,
"completion_tokens": 23,
"total_tokens": 34,
"prompt_tokens_details": null
}
}message.content を JSON としてパースすると、以下の構造化データが得られます。
{
"cities": [
"東京",
"大阪",
"名古屋"
]
}