1. APIリクエストの構築

1.1 CURLを使用したリクエストの送信

CURLは、HTTPやHTTPSなど、さまざまなプロトコルを使用してデータの送受信をサポートするコマンドラインツールです。OpenAI APIに対してCURLを使用してリクエストを送信するには、まず有効なAPIキーが必要であり、それをリクエストヘッダーに追加する必要があります。

以下は、OpenAI APIにリクエストを送信するために使用されるCURLコマンドの例です:

curl https://api.openai.com/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -d '{
     "model": "gpt-3.5-turbo",
     "messages": [{"role": "user", "content": "Say this is a test!"}],
     "temperature": 0.7
   }'

$OPENAI_API_KEYをAPIキーに置き換える必要があります。セキュリティ上の理由から、APIキーを公開される場所には表示しないでください。

1.2 リクエストヘッダーの解析

上記のCURLコマンドでは、2つの重要なリクエストヘッダーを使用しました: Content-TypeAuthorization

  • Content-Type: これは、データをJSON形式で送信していることをサーバーに通知するものです。その値は通常application/jsonです。
  • Authorization: これは、APIリクエストを認証するために使用される資格情報であり、そのフォーマットは常にBearer(あなたのAPIキー)です。

これら2つのヘッダーの正確性を確保することは、リクエストの成功にとって重要です。

1.3 リクエストボディの構築

リクエストボディは、OpenAIに私たちの意図を伝えるJSON形式の文字列です。このリクエストでは、使用するモデルを指定するmodel、ユーザーの入力を定義するmessages配列、および応答の変動性を調整するtemperatureを設定します。

JSONは次のようになります:

{
  "model": "gpt-3.5-turbo",
  "messages": [{"role": "user", "content": "Say this is a test!"}],
  "temperature": 0.7
}

この例では、入力メッセージに基づいてテスト応答を生成するようにモデルにリクエストしています。

1.4 リクエストパラメータの詳細な説明

リクエストボディ内では、いくつかの重要なパラメータに注意する必要があります:

  • model: 使用するAIモデルを指定します。OpenAIは複数のモデルを提供しており、それぞれが異なる機能と効果を持っています。
  • messages: これは、1つ以上のメッセージオブジェクトを含む配列で、各メッセージはメッセージの役割を提供するroleとメッセージの内容を表すcontentから構成されています。
  • temperature: 応答の確実性を制御します。低いtemperatureはより確実な回答を生成し、高い値はよりランダムな回答を導きます。

2. API応答の解析

2.1 応答の理解

リクエストを送信すると、サーバーはHTTPステータスコードと応答ボディを返します。通常、成功したリクエストは、200番台のステータスコードを受け取ります。返されたJSONデータにはリクエストの結果が含まれ、例の応答は次のようになります:

{
    "id": "chatcmpl-abc123",
    "object": "chat.completion",
    "created": 1677858242,
    "model": "gpt-3.5-turbo-1106",
    "usage": {
        "prompt_tokens": 13,
        "completion_tokens": 7,
        "total_tokens": 20
    },
    "choices": [
        {
            "message": {
                "role": "assistant",
                "content": "\n\nThis is a test!"
            },
            "logprobs": null,
            "finish_reason": "stop",
            "index": 0
        }
    ]
}

この応答では、完了ID、作成タイムスタンプ、使用されたモデル、トークンの使用状況、応答の実際の内容(choicesフィールド内)が確認できます。

2.2 完全性とエラーハンドリング

finish_reasonフィールドは、APIがなぜ内容の出力を停止したかを示しています。一般的な完了理由には、stoplengthidleなどがあります。トークン制限を超えたり、誤ったAPIキーを使用したりするなど、エラーが発生した場合は、対応するエラーメッセージとステータスコードが返されます。これらのエラーを適切に処理して、ユーザーエクスペリエンスの継続性とアプリケーションの安定性を確保することが重要です。エラーハンドリングでは、返されたステータスコードとエラーメッセージに基づいて適切なエラーハンドリング戦略を決定することができます。これには、リクエストの再試行や、エラーの理由を説明するユーザーへのフィードバックの提供などが含まれます。

2.3 Python SDKを使用してAPIリクエストを送信する

以下は、公式のOpenAI Python SDKを使用してAPI呼び出しを行う例です。

まず、pipを使用してopenaiライブラリをインストールする必要があります:

pip install --upgrade openai

次に、以下のPythonコードを使用して、上記の例と同様のAPIリクエストを行うことができます。YOUR_OPENAI_API_KEYを自分のAPIキーで置き換えることを忘れないでください。

from openai import OpenAI

client = OpenAI(
   api_key="YOUR_OPENAI_API_KEY",
)

completion = client.chat.completions.create(
  model="gpt-3.5-turbo",
  messages=[
    {"role": "system", "content": "あなたはプログラミングの様々な問題を解決するのが得意なプロの開発アシスタントです。"},
    {"role": "user", "content": "Go言語でクイックソートの関数を書いてください。"}
  ]
)

print(completion.choices[0].message)