Chat Completion APIの仕組みと使い方

Chat Completion APIの仕組みを確認し、Pythonとの統合方法、主要なパラメータ、ストリーミング、ツール呼び出しについて学びましょう。また、Kimi APIのようなOpenAI互換プロバイダーが、柔軟なAIアプリケーション開発をどのように支援するかも紹介します。

9分読む更新日:2026-11-14
Chat Completion APIのリクエストとレスポンスの流れ

AIチャットボットを構築する場合も、アプリケーションに会話機能を追加する場合も、AIが会話をどのように処理するかを理解することが重要です。Chat Completion APIは、アプリケーションをAIモデルに接続し、文脈に合った人間らしい応答を生成できるようにします。Pythonとの統合、ストリーミング、ツール呼び出しといった機能により、開発者はより対話的なアプリケーションを構築できます。ここでは、その仕組みや使い方、Kimi APIのようなプロバイダーが柔軟なAI開発をどのように支援するかを説明します。

Chat Completions APIとは

Chat Completions APIは、アプリケーションが一連のメッセージをAIモデルに送信し、アシスタントの応答を受け取るためのインターフェースです。1ターンの会話と複数ターンの会話の両方に対応しています。たとえば、Kimi K3.1 ProにPythonのデコレータについて質問し、その後に追加の質問をすることができます。

  • 最初のリクエスト: ユーザーメッセージ「Pythonのデコレータとは何ですか?」を送信します。Kimiは、この概念を説明するアシスタントメッセージを返します。

  • 2回目のリクエスト: 会話を続けるには、前のユーザーメッセージ、Kimiからの完全なアシスタントメッセージ、新しいユーザーメッセージ「例を教えてもらえますか?」を送信します。

messages配列には、各リクエストに必要なコンテキストが含まれます。このインターフェースが広く採用されている理由は、主に次の3つの設計にあります。

  • アプリケーション側での履歴管理: アプリケーションが会話履歴を管理し、各リクエストに関連するコンテキストを含めます。これにより、モデルに何を見せるかを開発者が制御できます。

  • 共通のメッセージロール: 一般的なロールには、system(指示)、user(入力)、assistant(モデル出力。複数ターンのコンテキストとして再送される)、tool(関数呼び出しの結果)があります。これらを組み合わせることで、指示、対話、ツールとのやり取りを表現できます。

  • 柔軟な機能: モデルの対応状況に応じて、このインターフェースではストリーミング、ツール呼び出し、画像入力、構造化出力を扱えます。Kimi K3.1 Proはこれらの機能に対応しています。

KimiでChat Completions APIを使用する方法

以下の例では、Kimi K3.1 ProとOpenAI Python SDKを使用して、クライアントの設定、リクエストの送信、レスポンスの処理、ツール呼び出しの実装方法を説明します。

クイックスタート:OpenAI Python SDKでKimiを呼び出す

OpenAI Python SDKをインストールします。

pip install --upgrade openai

Kimi APIキーを環境変数として設定します。

export MOONSHOT_API_KEY="sk-your-kimi-key"

OpenAI APIキーは必要ありません。OpenAI Python SDKはクライアントライブラリとして機能し、Kimi APIキーとベースURLによってリクエストの認証とKimiへの転送が行われます。

クライアントを初期化し、最初のリクエストを送信します。

import os from openai import OpenAI client = OpenAI( api_key=os.environ["MOONSHOT_API_KEY"], base_url="https://api.moonshot.ai/v1", ) resp = client.chat.completions.create( model="kimi-k3.1-pro", messages=[ {"role": "user", "content": "Explain REST in one paragraph."} ], ) print(resp.choices[0].message.content)

この例では、Kimiの国際APIエンドポイントを使用しています。正式な設定手順とモデルの詳細については、Kimi K3.1 Pro Quickstartを参照してください。

主要なパラメータ

これらのパラメータは、Chat Completions APIを通じてKimi K3.1 Proを呼び出す際に利用できる主なオプションです。

パラメータ用途
modelkimi-k3.1-proなど、モデルIDを指定します。
messages過去のユーザー入力やアシスタントの応答を含む会話メッセージを指定します。テキストとマルチモーダルコンテンツに対応しています。
reasoning_effort推論の深さを制御します。low、high、max(デフォルト)を指定できます。
max_completion_tokens推論tokenと最終回答のtokenを含む、生成の最大予算を設定します。入力tokenは別途カウントされますが、入力tokenと生成tokenの合計はモデルのコンテキストウィンドウ内に収める必要があります。
stream完全な出力を待たずに応答を段階的に受け取るには、trueに設定します。
toolsモデルがアプリケーションに実行を要求できる関数を定義します。
response_format出力形式を制御します。JSONモード用のjson_objectと、スキーマで制約された構造化出力用のjson_schemaに対応しています。

注: Kimi K3.1 Proは固定のサンプリング設定を使用します。リクエストにtemperatureやtop_pを追加しないでください。パラメータの詳細と対応する値については、Chat Completions APIリファレンスを参照してください。

レスポンスの読み取り

リクエストが成功すると、返されたcompletionオブジェクトを通じて主要なレスポンスフィールドにアクセスできます。

  • choices[0].message:アシスタントの応答が含まれます。モデルが関数を要求した場合は、contentまたはtool_callsも含まれます。

  • choices[0].finish_reason:stop、length、tool_callsなど、生成が停止した理由を示します。

  • usage:入力、出力、利用可能な場合はキャッシュ済みtoken数を含むtoken使用量の情報を提供します。

基本的なテキスト応答では、choices[0].message.contentを読み取ります。モデルがtool_callsを返した場合、アプリケーションは要求された関数を実行し、その結果を後続のリクエストで送信する必要があります。

ストリーミングの例

stream=Trueを設定すると、Kimiの応答を段階的なチャンクで受け取れます。次の例では、上で設定したclientを再利用し、最終回答を受信しながら出力します。

stream = client.chat.completions.create( model="kimi-k3.1-pro", messages=[ {"role": "user", "content": "Write a haiku about autumn."} ], stream=True, ) for chunk in stream: if not chunk.choices: continue delta = chunk.choices[0].delta if delta.content: print(delta.content, end="", flush=True)

Kimi K3.1 Proは、推論内容を最終回答とは別に返します。この例ではdelta.contentのみを出力するため、別途返されるreasoning_contentフィールドは処理せず、最終応答だけを表示します。

ツール呼び出しの概要

ツール呼び出しを使うと、モデル単体の応答では対応できない情報や操作が必要なタスクに対して、Kimiが外部関数の実行をリクエストできます。たとえば、ユーザーが「今日、東京で傘は必要ですか?」と尋ねた場合、Kimiは予報を取得するget_weather関数をリクエストできます。

ワークフローは次の3ステップです。

  1. 関数を宣言する: toolsパラメータでget_weatherと想定する引数を定義します。

  2. ツールを実行する: Kimiは、関数名と引数を含むtool_callsエントリを返します。アプリケーションで対応する関数を実行し、天気データを取得します。

  3. 結果を返す: Kimiの完全なアシスタントメッセージとツールの結果(対応するtool_call_idを使用)を会話に追加し、Kimiを再度呼び出してユーザー向けの回答を生成します。

次の例では、上で設定したclientを再利用します。実行前に、JSONとしてシリアライズ可能な天気データを返すget_weather(city)関数を実装しておいてください。この関数を実行するのはKimiではなく、アプリケーションです。

import json tools = [ { "type": "function", "function": { "name": "get_weather", "description": "Get the weather forecast for a city.", "parameters": { "type": "object", "properties": { "city": {"type": "string"} }, "required": ["city"] } } } ] messages = [ {"role": "user", "content": "Should I bring an umbrella in Tokyo today?"} ] # Ask Kimi whether it needs to call a tool resp = client.chat.completions.create( model="kimi-k3.1-pro", messages=messages, tools=tools, ) assistant_message = resp.choices[0].message # Preserve the complete assistant message, including tool_calls messages.append(assistant_message) # Execute the requested function in your application for tool_call in assistant_message.tool_calls or []: if tool_call.function.name == "get_weather": args = json.loads(tool_call.function.arguments) # Call your own weather service or API weather_result = get_weather(city=args["city"]) messages.append({ "role": "tool", "tool_call_id": tool_call.id, "content": json.dumps(weather_result) }) # Let Kimi interpret the tool result and answer the user final_resp = client.chat.completions.create( model="kimi-k3.1-pro", messages=messages, tools=tools, ) print(final_resp.choices[0].message.content)

ここでのget_weather()は、Kimiが直接実行する関数ではなく、アプリケーションに実装する関数を表します。Kimiがリクエストのタイミングを判断して引数を渡し、実際の処理と結果の返却はアプリケーションが行います。

本番環境では、各ツール呼び出しを処理し、対応する結果を会話に追加して、更新後のメッセージをKimiに送信するループを実装してください。モデルが追加のツールをリクエストせず最終回答を返すまで、このサイクルを繰り返します。

プロバイダー選定で「OpenAI互換」が重要な理由

多くのプロバイダーがOpenAI Chat Completions形式をサポートしており、開発者は使い慣れたSDKやリクエスト構造を再利用できます。通常は、ベースURL、APIキー、モデルIDを更新したうえで、対応パラメータと応答処理を確認すれば切り替えられます。プロバイダーを比較する際は、次の要素を考慮してください。

  1. 互換性の精度: ストリーミング、ツール呼び出し、構造化出力、usageのレポートが、アプリケーションの想定どおりに機能することを確認してください。同じAPI形式と互換性があっても、プロバイダー間で機能の対応範囲や応答の挙動が同一であるとは限りません。

  2. 用途に対するモデル品質: 一般的なベンチマークよりも、使用する言語の構成やタスクの種類が重要です。

  3. コンテキストウィンドウ: 長いコンテキストを扱えるモデルなら、1回のリクエストでより多くのソース資料を処理でき、一部のドキュメントワークフローを簡素化できます。

  4. コストの仕組み: キャッシュやバッチ割引は、表示上のtokenあたりの価格よりも影響が大きいことがよくあります。

  5. エコシステムの広さ: ResponsesやAnthropic Messagesなど、追加の互換エンドポイントがあれば、アプリケーションの進化に応じて統合の選択肢と柔軟性が広がります。

Kimi API:注目すべきOpenAI互換プロバイダー

Moonshot AIが開発したKimi APIは、OpenAI互換のプロバイダーを探している場合、特に中国語アプリケーション、長文書の処理、コーディングエージェント向けに検討する価値があります。使い慣れたAPI統合パターンに、Kimiの長文コンテキスト処理と推論機能を組み合わせています。

そのまま置き換え可能

アプリケーションですでにOpenAI Python SDKを使用している場合、リクエストワークフロー全体を書き直さずにKimiを統合できます。使い慣れたChat Completionsインターフェースを維持したまま、base_url、api_key、モデルIDを含むAPI設定を更新するだけです。

たとえば、次のコードはローカルのreport.txtからレポートを読み込み、その内容を要約のためにKimi K3.1 Proへ送信し、生成された応答をストリーミングします。

from pathlib import Path report_text = Path("report.txt").read_text(encoding="utf-8") resp = client.chat.completions.create( model="kimi-k3.1-pro", messages=[ { "role": "user", "content": f"Summarize the following report:\n\n{report_text}" } ], stream=True, ) for chunk in resp: if not chunk.choices: continue content = chunk.choices[0].delta.content if content: print(content, end="", flush=True)

ここでのclientは、環境変数から読み取ったAPIキーで先ほど初期化したKimiクライアントを再利用しています。ベースURLは地域に応じて選択してください。国際プラットフォームではhttps://api.moonshot.ai/v1、中国本土からAPIにアクセスするユーザー向けにはhttps://api.moonshot.cn/v1を使用します。

この方法なら、既存のOpenAI SDKワークフローを維持したまま、ドキュメントの要約などのAPIを利用するアプリケーションでKimiモデルを使用できます。

Kimiの特長

  • 100万tokenのコンテキストウィンドウを備えたフラッグシップモデル: Kimi K3.1 Proは最大100万tokenのコンテキストウィンドウと、ネイティブの視覚理解をサポートします。大規模なコードベース、書籍1冊分の文書、画像入力を1つのワークフローで扱えるため、複雑な推論、コーディング、マルチモーダルアプリケーションに適しています。

  • 柔軟なコスト最適化: Kimi APIは、繰り返し使用するリクエストプレフィックスの自動コンテキストキャッシュと、リアルタイム応答を必要としない大規模タスク向けのBatch API推論をサポートします。キャッシュの課金とBatchの料金は、モデルおよび適用される料金規則によって異なります。最新の料金と請求の詳細は、Kimi API公式料金表で確認してください。

  • APIエコシステムをまたぐ互換性: Kimiは、OpenAI互換のChat CompletionsおよびResponses APIエンドポイントに加え、Anthropic Messages互換エンドポイントを提供しています。開発者は、エンドポイントとサポート機能に応じて調整することで、使い慣れたSDKやAPI形式を利用し、既存のワークフローにKimi K3.1 Proを統合できます。

まとめ

Chat Completions APIの利用開始は簡単です。API認証情報を設定し、リクエストを送信して、choices[0].message.contentから生成されたレスポンスを読み取ります。最初のAPI呼び出しが動作したら、マルチターン会話、ストリーミングレスポンス、ツール呼び出しを追加するなど、アプリケーションのニーズに応じて連携を拡張できます。Kimiで開発を始める準備はできましたか?Kimi APIキーを取得して、APIリクエストの送信を始めましょう。

よくある質問

いいえ。Chat Completions APIはOpenAIモデル専用ではありません。Kimiを含む他のAIプロバイダーも、OpenAI互換のChat Completions形式に準拠したAPIを提供しています。これにより、開発者は使い慣れたSDKやリクエスト構造を再利用して、異なるプロバイダーが提供する対応モデルを利用できます。ただし、対応する機能はプロバイダーによって異なる場合があります。
どちらのAPIもアプリケーションからAIモデルとやり取りできますが、リクエストとレスポンスの構造は異なります。Chat Completionsはmessages配列を使用し、choices配列で応答を返します。Responses APIは、さまざまなコンテンツタイプとツール連携に対応する、より柔軟な入力・出力構造を採用しています。会話状態の管理方法はプロバイダーによって異なります。KimiのResponses APIでは、レスポンスIDの連鎖に依存せず、各リクエストに関連する会話履歴を含める必要があります。
アプリケーションでOpenAI SDKを使用している場合は、通常、base_urlをKimiのAPIエンドポイントに、api_keyをKimi APIキーに、modelを対応するKimiモデルIDに変更するだけでKimiへ切り替えられます。その後、ストリーミングやツール呼び出しなど、アプリケーションが利用するパラメータや機能がサポートされていることを確認するため、統合をテストしてください。
こちらもおすすめ
OpenAI Chat Completions API:完全ガイド
OpenAI Chat Completions API:完全ガイド
2026-11-14
AI開発向けの無料・有料LLM API 10選
AI開発向けの無料・有料LLM API 10選
2026-11-14
LLM APIガイド:機能、メリット、主な活用例
LLM APIガイド:機能、メリット、主な活用例
2026-11-14
モデルAPI:Kimi API開発者ガイド
モデルAPI:Kimi API開発者ガイド
2026-11-14
OpenAI互換API:開発者のための実践ガイド
OpenAI互換API:開発者のための実践ガイド
2026-11-14