OpenAI Python SDKの使い方|インストールから最新クライアント・Responses APIまで
OpenAI Python SDKは、GPTなどのモデルをPythonから呼び出すためにOpenAIが公式提供するライブラリ(PyPI上のパッケージ名はopenai)です。注意したいのは書き方が一度大きく変わった点で、2023年11月のv1.0以降はopenai.ChatCompletion.create()のような旧記法が廃止され、client = OpenAI()というクライアント方式に統一されました。ネット上に残る古いサンプルをそのまま貼ると動きません。本記事はインストールからクライアント初期化、Chat CompletionsとResponses APIの呼び出し、旧v0.xコードの移行、画像・埋め込み・音声APIまで、現行版で動く実コードで解説します。
目次
まとめ:OpenAI Python SDKの要点(先に結論)
- インストールは
pip install openaiの1コマンド。2026年時点の最新はv2系(正確なバージョンは公式PyPIで確認)。 - v1.0(2023年11月)で記法が刷新され、
openai.api_keyやopenai.ChatCompletionを使う旧v0.xコードは動かない。現行はclient = OpenAI()+client.chat.completions.create()。 - 新規開発ではResponses API(
client.responses.create())が推奨。従来のChat Completionsも引き続き利用できる。 - APIキーは環境変数
OPENAI_API_KEYに置くのが基本。コードへの直書きは避ける。 - 旧記事のコードで詰まったら、本記事の移行対応表で旧メソッドを現行メソッドに置き換える。
以下、定義とバージョンの現状を押さえたうえで、インストール・初期化・API別の使い方の順に見ていきます。
OpenAI Python SDKとは|役割と現在のバージョン
SDK(Software Development Kit)は、APIを直接HTTPで叩く代わりに、認証・リクエスト組み立て・レスポンス解析をPythonの関数呼び出しに置き換えてくれる開発キットです。OpenAIのSDKを使えば、テキスト生成・画像生成・埋め込み・音声認識といったモデル機能を、数行のコードから同じ作法で呼び出せます。GitHubの公式リポジトリopenai/openai-pythonで開発され、型付きのリクエスト・レスポンスによりエディタ補完が効くのが素のHTTP実装との違いです。
SDKで呼び出せる主なモデル機能
1つのクライアントから、用途の異なるエンドポイントを共通の書き方で扱えます。代表的なものは次の4系統です。
- テキスト・対話生成:
client.chat.completions/client.responses - 画像生成:
client.images(DALL·E 3、gpt-image-1 など) - ベクトル埋め込み:
client.embeddings(検索・分類・RAGの基盤) - 音声認識・音声合成:
client.audio(Whisper など)
指定するモデル名(gpt-4o-miniなど)を変えるだけで同じコードのまま別モデルへ切り替えられるため、コストと精度のバランスを後から調整しやすい構造です。
バージョンの現状:v1.0の破壊的変更とv2系
バージョンの理解がこのSDKで最初につまずく点です。2023年11月のv1.0で内部設計が刷新され、モジュール直下に関数を生やす旧方式(openai.api_key、openai.ChatCompletion.create())から、クライアントオブジェクトを起点にする現行方式へ移りました。2026年時点ではpip install openaiで入るのはv2系(例:2.44.0、2026年6月)で、v1系と同じクライアント方式が継続しています。つまり分岐点は「v1.0より前か後か」で、v1系とv2系の書き方は基本的に共通です。古いQiita記事やSDK v0.26系のドキュメントを参照すると旧記法に出会うため、動かないときはまずバージョンを疑ってください。
インストールとセットアップ手順
導入はpip1コマンドで済みますが、バージョン確認・仮想環境・APIキー設定の3点を最初に押さえておくと後のトラブルを避けられます。
pipでのインストールとアップグレード
公式パッケージ名はopenaiです。新規インストールと、旧版が入っている環境のアップグレードは次のとおりです。
# 新規インストール(最新版)
pip install openai
# すでに入っている場合は最新へ更新(v0.x → 現行版の移行で必須)
pip install --upgrade openai
# 入っているバージョンを確認
pip show openai
python -c "import openai; print(openai.__version__)"
旧v0.x環境から更新した直後は、コード側も現行の書き方に直さないとAttributeErrorで止まります。バージョンを固定して再現性を確保したい場合はpip install openai==2.44.0のようにバージョンを明示し、実運用ではrequirements.txtに記載します。GitHubの開発版を試すならpip install git+https://github.com/openai/openai-python.gitも使えますが、通常はPyPIの安定版で十分です。
動作要件と仮想環境の準備
必要なのはPython 3.9以上(3.14まで対応)です。プロジェクトごとに依存関係を分離するため、仮想環境の中へインストールするのが安全です。標準のvenvを使う例を示します。
python -m venv venv
source venv/bin/activate # Windows は venv\Scripts\activate
pip install openai
仮想環境を分けておくと、別プロジェクトで古いopenaiを使っていても影響を受けません。バージョン起因の不具合切り分けが楽になるため、実質必須の準備と考えてください。
APIキーの発行と環境変数への設定
APIキーはOpenAIのダッシュボード(API keys画面)で発行します。SDKは既定で環境変数OPENAI_API_KEYを自動で読み込むため、キーはコードに書かず環境変数に置くのが基本です。
# macOS / Linux
export OPENAI_API_KEY="sk-あなたのAPIキー"
# Windows (PowerShell)
setx OPENAI_API_KEY "sk-あなたのAPIキー"
こうしておけば、後述のOpenAI()は引数なしでキーを読み込みます。キーはアカウント単位で課金に直結するため、GitHubへ誤ってpushしないよう.envを.gitignoreに加える運用まで含めて設定しておきましょう。
クライアントの初期化と最初のリクエスト(Chat Completions)
ここからが現行SDKの中心です。まずクライアントを作り、Chat Completionsでテキストを生成する最短経路を通します。
client = OpenAI() でクライアントを作る
すべての呼び出しはOpenAIクラスのインスタンス(クライアント)から始まります。環境変数にキーを設定済みなら引数は不要です。
from openai import OpenAI
# OPENAI_API_KEY を環境変数から自動読み込み
client = OpenAI()
# 明示的に渡すこともできる(非推奨:直書きは避ける)
# client = OpenAI(api_key="sk-...")
# 利用可能なモデル一覧を確認
for m in client.models.list().data[:5]:
print(m.id)
旧v0.xのopenai.api_key = "..."やopenai.Model.list()はこのクライアント方式に置き換わりました。以降のChat・画像・埋め込みはすべてこのclientを起点に呼び出します。
chat.completions.create でテキストを生成する
対話・テキスト生成の基本はclient.chat.completions.create()です。messagesに役割(system/user/assistant)付きのメッセージを渡し、応答はchoices[0].message.contentで属性アクセスします。旧版のmessage["content"]のような辞書アクセスではない点に注意してください。
from openai import OpenAI
client = OpenAI()
resp = client.chat.completions.create(
model="gpt-4o-mini",
messages=[
{"role": "system", "content": "あなたは簡潔に答えるアシスタントです。"},
{"role": "user", "content": "OpenAI Python SDKとは何か1文で説明して。"},
],
)
print(resp.choices[0].message.content)
モデル名は用途で選びます。軽量・低コストなgpt-4o-miniを既定にし、精度が要る場面でgpt-4oや推論特化のoシリーズ、最新のGPT-5系へ上げる、という使い分けが実務的です(モデル世代名は2026年時点の目安)。どのモデルを選ぶべきかはGPT-4.5とGPT-4oの違い:性能や用途の比較分析も判断材料になります(利用可能なモデル名と料金は変動するため公式で最新を確認してください)。
ストリーミングと主要パラメータ
回答を1トークンずつ逐次表示したい場合はstream=Trueを付け、届いた差分をdelta.contentで受け取ります。チャットUIの体感速度を上げる定番です。
stream = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": "俳句を1つ作って"}],
stream=True,
temperature=0.7, # 出力のばらつき(0〜2、既定1)
max_tokens=200, # 生成上限トークン数
)
for chunk in stream:
print(chunk.choices[0].delta.content or "", end="")
temperatureは値を上げるほど多様に、下げるほど決定的になります。事実回答や分類では低め、創作では高めが目安です。非同期処理が必要ならfrom openai import AsyncOpenAIでAsyncOpenAIクライアントを使い、各メソッドをawaitで呼び出します。
Responses API|新規開発で推奨される新インターフェース
2025年に追加されたResponses APIは、OpenAIがChat Completionsの進化版と位置づける新しい基本APIです。OpenAI自身が「新規プロジェクトにはResponsesを推奨」としており、Chat Completionsも従来どおり使えます。両者の性格の違いを押さえておくと選択で迷いません。
responses.create の基本と output_text
Responsesではmessages配列の代わりにinputへ文字列やアイテムを渡し、生成テキストはoutput_textヘルパーで一発で取り出せます。Chat Completionsにはこのヘルパーがありません。
from openai import OpenAI
client = OpenAI()
resp = client.responses.create(
model="gpt-4o-mini",
input="OpenAI Python SDKの使いどころを3つ挙げて。",
)
print(resp.output_text)
Responses APIはWeb検索・ファイル検索・コード実行といった組み込みツールを標準で扱える点も特徴で、エージェント的な処理を1回の呼び出しに寄せやすくなっています。
会話を継続する(previous_response_id)
「前の回答を踏まえて次の質問を投げたい」という多ターン対話は、Chat Completionsではmessagesに履歴を毎回全部積み直す必要がありました。Responsesでは直前の応答IDをprevious_response_idに渡すだけで文脈がつながり、履歴管理をサーバ側に任せられます。
first = client.responses.create(
model="gpt-4o-mini",
input="Pythonの内包表記を一言で説明して。",
)
# 直前の応答IDを渡すだけで会話が続く
second = client.responses.create(
model="gpt-4o-mini",
input="では具体例を1つ。",
previous_response_id=first.id,
)
print(second.output_text)
履歴を配列で自前管理しなくてよいため、チャットボットの実装が短くなります。旧記事にあった「回答に続けて次のメッセージを送る方法」は、現行ではこのprevious_response_idが最も簡潔な答えです。
Chat Completions と Responses のどちらを使うか
結論として、これから作るものはResponses API、既存資産や他社SDK互換を優先するならChat Completions、が実務的な指針です。判断軸を表にまとめます。
| 観点 | Chat Completions | Responses API |
|---|---|---|
| 入力 | messages配列 | input(文字列/アイテム) |
| テキスト取得 | choices[0].message.content | output_text |
| 会話の継続 | 履歴を毎回渡す | previous_response_id |
| 組み込みツール | なし | Web検索・コード実行等 |
| 新規推奨 | 継続サポート | 推奨 |
すでにChat Completionsで動くコードを急いで移す必要はありません。新機能や組み込みツールが欲しくなった時点でResponsesへ寄せる、という段階移行が現実的です。
旧v0.xコードからの移行対応表
ネット上のOpenAI Python記事の多くはv1.0より前に書かれており、そのままでは現行SDKで動きません。旧メソッドと現行メソッドの対応を一覧にします。openai.〜.create()という「モジュール直下」の呼び出しを見たら旧記法だと判断してください。
| 旧 v0.x | 現行 v1系以降 |
|---|---|
| openai.api_key = “…” | client = OpenAI()(環境変数推奨) |
| openai.ChatCompletion.create() | client.chat.completions.create() |
| openai.Completion.create() | client.chat.completions.create() |
| openai.Image.create() | client.images.generate() |
| openai.Embedding.create() | client.embeddings.create() |
| openai.Audio.transcribe() | client.audio.transcriptions.create() |
| openai.Model.list() | client.models.list() |
| res[“choices”][0][“message”] | res.choices[0].message(属性アクセス) |
あわせて廃止・非推奨になったモデルにも注意が必要です。旧チュートリアルで多用されたtext-davinci-003(Completions系)は提供終了しており、テキスト生成はgpt-4o-miniなどのChatモデルへ置き換えます。埋め込みもtext-embedding-ada-002からtext-embedding-3-small/text-embedding-3-largeが現行の選択肢です。手作業での書き換えが多い場合、OpenAIが配布する移行ツールキットの利用も検討できます。
画像・埋め込み・音声など主なAPIの呼び出し方
テキスト以外のモダリティも同じclientから呼び出します。代表的な3系統と応用例を示します。
画像生成(images.generate)
画像生成はclient.images.generate()です。旧openai.Image.create()から名称が変わり、結果はdata[0].url(またはb64_json)で取り出します。
img = client.images.generate(
model="dall-e-3",
prompt="夏のビーチでくつろぐ猫のイラスト",
size="1024x1024",
n=1,
)
print(img.data[0].url)
より新しいgpt-image-1モデルも指定でき、こちらは既定でBase64データを返します。用途に応じてURL方式かデータ方式かを選びます。画像系はモデル名やスナップショットの更新が速いため、最新の対応モデルは公式で確認してください。
埋め込み(embeddings)とベクトル検索
テキストを数値ベクトル化する埋め込みは、類似度計算や社内文書の検索(RAG)の基盤になります。現行モデルはtext-embedding-3-small/text-embedding-3-largeです。
emb = client.embeddings.create(
model="text-embedding-3-small",
input=["機械学習が好きです", "私はAIに興味があります"],
)
vec1 = emb.data[0].embedding
vec2 = emb.data[1].embedding
得たベクトルをベクトルデータベースに格納し、質問文のベクトルと近いものを引く仕組みを組めば、社内ナレッジ検索が作れます。SDK単体から一歩進んだ実装はLangChainを使ったRAG(検索拡張生成)の概要と実践方法が参考になります。
音声認識(audio.transcriptions)
音声の文字起こしはclient.audio.transcriptions.create()です。Whisperモデルにファイルを渡すと文字列が返ります。
with open("sample.mp3", "rb") as f:
transcript = client.audio.transcriptions.create(
model="whisper-1",
file=f,
)
print(transcript.text)
より高精度・低遅延を狙うgpt-4o-transcribe系モデルも選べます。双方向の音声対話をリアルタイムに扱いたい場合は、別系統のRealtime APIが向いており、Realtime APIとLangChainによる次世代音声対話システムの構築方法で構成例を確認できます。
チャットボットなどの応用
ここまでの部品を組み合わせると、実務アプリになります。カスタマーサポートの自動応答ならChat CompletionsまたはResponsesで問い合わせに回答し、社内文書に基づく回答が必要なら埋め込み検索を前段に挟んでヒットした文書をプロンプトへ渡します(RAG)。文章生成アシスタントや長文レポートの要約も、モデルに指示文を渡すだけで組めます。どの応用でも、モデル名を差し替えるだけで精度とコストを調整できるのがSDKの利点です。
エラー対処とAPIキー管理のベストプラクティス
本番運用で必ず当たるのがエラー処理とキー管理です。最低限押さえるべき点をまとめます。
よくあるエラーと例外処理
SDKは失敗の種類ごとに専用の例外クラスを用意しています。認証エラー・レート制限・接続エラーを個別に捕まえて対処します。
from openai import OpenAI, AuthenticationError, RateLimitError, APIError
client = OpenAI()
try:
resp = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": "こんにちは"}],
)
print(resp.choices[0].message.content)
except AuthenticationError:
print("APIキーが不正です。環境変数を確認してください。")
except RateLimitError:
print("レート制限。少し待って再試行してください。")
except APIError as e:
print("APIエラー:", e)
特に多いのが、旧記法のまま実行して出るAttributeErrorや、module 'openai' has no attribute 'ChatCompletion'です。これはバージョン不整合が原因なので、前述の移行対応表に沿ってコードを現行方式へ直します。レート制限には指数バックオフでの再試行を入れると安定します。
APIキーの安全な管理
APIキーは料金と権限に直結する秘匿情報です。コードへの直書きは避け、環境変数か.envで管理し、リポジトリには含めません。チーム開発では各自にキーを配るより、Organization(組織)機能で請求と権限を一元管理するほうが漏洩時の影響を抑えられます。
運用面では、定期的なローテーション(再発行と旧キー無効化)と、キーごとの利用上限設定が有効です。クラウド運用ならCI/CDのシークレット機能やシークレットマネージャに格納し、平文で残さない運用を徹底してください。
なお、Microsoft AzureのインフラでOpenAIモデルを使う場合は、認証やエンドポイントの扱いが本家APIと異なります。違いはAzure OpenAI Serviceとは?ChatGPT・OpenAI APIとの違いをわかりやすく解説で整理しています。
よくある質問(FAQ)
OpenAI Python SDKのインストールコマンドは?
pip install openaiです。既に古い版が入っている環境ではpip install --upgrade openaiで現行版へ更新し、python -c "import openai; print(openai.__version__)"でバージョンを確認します。公式パッケージ名はopenaiで、これ以外の類似名パッケージは非公式です。
openai.ChatCompletionのコードが動かないのはなぜ?
v1.0(2023年11月)で旧記法が廃止されたためです。現行ではclient = OpenAI()を作りclient.chat.completions.create()を呼びます。module 'openai' has no attribute 'ChatCompletion'が出たら、本記事の移行対応表に沿って書き換えてください。
Chat CompletionsとResponses APIはどちらを使うべき?
新規開発はResponses API(client.responses.create())が推奨です。組み込みツールやprevious_response_idによる会話継続が使えます。既に動いているChat Completionsのコードはそのまま利用でき、急ぎ移行する必要はありません。
どのモデルを指定すればいい?
コスト重視ならgpt-4o-mini、精度重視ならgpt-4oや最新のGPT-5系、複雑な推論にはoシリーズが目安です。text-davinci-003など旧Completions系モデルは提供終了しています。利用可能なモデルと料金は変わるため、公式のモデル一覧で最新を確認してください。
前の回答を踏まえて会話を続けるには?
Responses APIなら、直前の応答のidを次の呼び出しのprevious_response_idに渡すだけで文脈がつながります。Chat Completionsを使う場合は、messages配列に過去のuser/assistantのやり取りを積み重ねて毎回送信します。