Chat Completions API
最もよく使われる対話 API で、OpenAI Chat Completions インターフェースと完全互換です。
/v1/chat/completionsチャット対話を作成POST https://hub.lurus.cn/v1/chat/completionsSSE でトークンを逐次返却
モデルにあなたの関数を呼び出させる
テキストと画像を混在させて入力
温度 / System Prompt / マルチターン
リクエストパラメータ
必須
| パラメータ | 型 | 説明 |
|---|---|---|
model | string | モデル名。例: deepseek-chat、gpt-4o |
messages | array | 対話メッセージの配列。下記の形式を参照 |
よく使うオプションパラメータ
| パラメータ | 型 | デフォルト値 | 説明 |
|---|---|---|---|
temperature | number | 1.0 | ランダム性(0–2)。コード/数学は 0.1、創作は 0.9 |
max_tokens | integer | — | 生成する最大トークン数。未設定の場合はモデルが決定 |
stream | boolean | false | ストリーミング出力Streamingストリーミング応答。AI モデルが結果を Token 単位で逐次返す(全生成を待たない)方式で、最初の文字までの遅延を低減します。(SSE)。ストリーミング応答を参照 |
top_p | number | 1.0 | 核サンプリング。通常 temperature とどちらか一方を調整 |
stop | string/array | — | この文字列に達したら生成を停止 |
n | integer | 1 | 同時に生成する候補返信の数 |
user | string | — | ユーザー識別子。監査ログに使用 |
Messages 形式
[
{"role": "system", "content": "你是一位专业的技术顾问。"},
{"role": "user", "content": "什么是 RESTful API?"},
{"role": "assistant", "content": "RESTful API 是…"},
{"role": "user", "content": "能举个例子吗?"}
]| ロール | 用途 |
|---|---|
system | AI の振る舞い、口調、制約を設定。配列の先頭に置く |
user | ユーザーの入力 |
assistant | AI の返信。マルチターン対話では過去の返信も含める必要がある |
リクエストボディ(ChatCompletionRequest)とメッセージ(Message)の全フィールド定義は データ構造リファレンス を参照してください。
基本例
ストリーミング応答
stream: true を設定すると、応答は Server-Sent Events を介してトークンを逐次返却します。チャット系アプリケーションに適しています。
ストリーミングデータ形式
data: {"id":"chatcmpl-abc","choices":[{"delta":{"content":"落"},"index":0}]}
data: {"id":"chatcmpl-abc","choices":[{"delta":{"content":"叶"},"index":0}]}
...
data: [DONE]TIP
最後の data: [DONE] はストリームの終了を示します。このとき delta.content は空です。
Function Calling
提供した関数をいつ呼び出すかを AI に判断させ、構造化されたパラメータ(Tool CallTool CallAI モデルが推論の過程で外部ツール(検索やデータベースクエリなど)の呼び出しを決定し、構造化された呼び出しパラメータを返すことです。)を返します。検索、データベースのクエリ、外部 API の呼び出しなどのシナリオに適しています。
ワークフロー
graph LR; A[あなたのリクエスト<br/>tools 定義を含む] --> B[モデルが返却<br/>finish_reason: tool_calls]; B --> C[あなたが関数を実行<br/>結果を role: tool で返送]; C --> D[モデルが結果を統合<br/>最終回答を生成]完全な例: 天気の照会
モデルのサポート
Function Calling にはモデルのサポートが必要です。gpt-4o、gpt-4o-mini、claude-3-5-sonnet の使用を推奨します。 DeepSeek 系列もサポートしていますが、パラメータ形式にわずかな差異があるため、テスト時には検証に注意してください。
マルチモーダル入力(Vision)
一部のモデルは画像の内容を理解でき、content の中にテキストと画像を混在させて入力できます。
Vision をサポートするモデル
gpt-4o、gpt-4o-mini、gemini-3-pro-preview、gemini-3-pro-image-preview
画像サイズの制限: URL 画像は公開ネットワークからアクセス可能である必要があります。Base64 は 1 枚あたり 5 MB を超えないことを推奨します。
ベストプラクティス
System Prompt の書き方
{
"role": "system",
"content": "你是一位专业客服。请用友好简洁的语气回答,每条回复不超过 150 字。如遇无法回答的问题,引导用户联系 support@lurus.cn。"
}良い System Prompt は次を含みます: 役割定義 + 口調の要求 + 長さの制限 + 境界の処理。
温度設定の参考
| シナリオ | temperature | 説明 |
|---|---|---|
| コード生成、数学計算 | 0.0–0.2 | 決定性が高く、ランダム性を抑える |
| 質問応答、要約、分類 | 0.3–0.6 | 正確だが一定の柔軟性がある |
| 創作、ブレインストーミング | 0.7–1.0 | 多様性が強い |
| ランダムなストーリー、ロールプレイ | 1.0–1.5 | 高い創造性、不安定になる可能性あり |
マルチターン対話の管理
conversation = [
{"role": "system", "content": "你是一位历史老师。"}
]
def chat(user_input: str) -> str:
conversation.append({"role": "user", "content": user_input})
response = client.chat.completions.create(
model="deepseek-chat",
messages=conversation,
max_tokens=500
)
reply = response.choices[0].message.content
conversation.append({"role": "assistant", "content": reply})
return reply
print(chat("秦始皇是谁?"))
print(chat("他有哪些重要成就?")) # 模型能记住上文的"秦始皇"コンテキストウィンドウの管理
各モデルのコンテキスト長には上限があります(例: deepseek-chat は 64K tokens)。対話が長すぎる場合は、次のようにできます:
- 最も古いメッセージを切り詰める(system + 直近 N ターンを保持)
- 過去の対話を定期的に要約し、トークン使用量を圧縮する
エラー処理
よくあるステータスコード: 400 リクエスト形式エラー → JSON 構造と必須パラメータを確認;401 Key が無効/期限切れ;403 このモデルへのアクセス権がない → 管理者に連絡;429 レート制限超過 → 指数バックオフでリトライ;500/502 上流モデルの異常 → リトライまたは予備モデルへ切り替え。完全なエラーコードとリトライ戦略は エラー処理 を参照してください。