OpenAI Python SDK(PyPI の openai)は、OpenAI の API 向けの公式 Python クライアントです。認証、リクエストのフォーマット、レスポンスのパース、ストリーミング、リトライ処理を自動で行うため、それらを自分で実装する必要はありません。このガイドでは、インストール、コアとなる OpenAI クラス、チャット補完、ストリーミング、関数呼び出し、非同期の使い方、JavaScript SDK 相当、Azure OpenAI 統合、さらに同じ SDK を Novita AI の OpenAI 互換エンドポイントに向けてコードを変更せずにオープンウェイトモデルを使用する方法をカバーします。
OpenAI Python パッケージのインストール
Python 3.8 以降が必要です:
pip install openai
開発用に、requirements.txt または pyproject.toml に追加します:
pip install openai>=1.0.0
1.x リリース(2023 年後半にリリース)では、0.x API からインターフェースが大幅に変更されました。古いコードを移行する場合は、openai.ChatCompletion.create() は廃止され、代わりに client.chat.completions.create() を使用してください。
API キーは環境変数に設定してください。ソースコードに直接記述しないでください:
export OPENAI_API_KEY="sk-..."
OpenAI クライアントクラス
OpenAI クラスが主要なエントリーポイントです。デフォルトでは環境変数 OPENAI_API_KEY から API キーを読み取りますが、明示的に渡すこともできます:
import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ["OPENAI_API_KEY"],
)
クライアントは接続プール、リトライ、タイムアウトを管理します。アプリケーション全体で 1 つのインスタンスを作成し再利用するべきで、リクエストごとにインスタンス化しないでください。
初期化時に設定可能なオプション:
| パラメータ | デフォルト | 説明 |
|---|---|---|
api_key |
OPENAI_API_KEY 環境変数 |
認証資格情報 |
base_url |
https://api.openai.com/v1 |
プロキシや互換 API 向けの上書き |
timeout |
600s | リクエストごとのタイムアウト |
max_retries |
2 | レート制限エラー時の自動リトライ |
http_client |
None | プロキシや証明書設定用のカスタム httpx クライアント |
チャット補完:基本リクエスト
チャット補完が最も一般的なユースケースです。messages リストは API と同じ形式で、会話を表すロールとコンテンツの辞書のリストです:
import os
from openai import OpenAI
client = OpenAI(api_key=os.environ["OPENAI_API_KEY"])
response = client.chat.completions.create(
model="gpt-4o",
messages=[
{"role": "system", "content": "あなたは親切なコーディングアシスタントです。"},
{"role": "user", "content": "Python におけるリストとタプルの違いは何ですか?"},
],
temperature=0.3,
max_tokens=512,
)
print(response.choices[0].message.content)
レスポンスは ChatCompletion オブジェクトです。主要なフィールド:
response.choices[0].message.content— テキスト応答response.usage.prompt_tokens— 入力で消費されたトークン数response.usage.completion_tokens— 出力で消費されたトークン数response.model— リクエストを処理したモデルバージョン
本番環境では、生成コストの暴走を防ぐために max_tokens を指定し、決定論的な出力が必要な場合は temperature=0 または低い値を使用してください。
ストリーミングレスポンス
ユーザーがトークンが到着するのを確認できるインタラクティブなインターフェースには、stream=True を使用します:
import os
from openai import OpenAI
client = OpenAI(api_key=os.environ["OPENAI_API_KEY"])
with client.chat.completions.stream(
model="gpt-4o",
messages=[
{"role": "user", "content": "Python のジェネレーターをわかりやすく説明してください。"},
],
) as stream:
for text in stream.text_stream:
print(text, end="", flush=True)
コンテキストマネージャー(with 文)を使用すると、イテレーション後に接続が適切に閉じられます。.text_stream 属性はプレーンな文字列を返します。.stream は、チャンクごとの使用統計などのメタデータが必要な場合に生のイベントオブジェクトを返します。
コンテキストマネージャーを使わずにストリーミングする場合:
stream = client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": "Python のベストプラクティスを 5 つ挙げてください。"}],
stream=True,
)
for chunk in stream:
delta = chunk.choices[0].delta
if delta.content:
print(delta.content, end="", flush=True)
関数呼び出し
関数呼び出しを使用すると、モデルが関数を呼び出すタイミングを判断し、JSON 引数オブジェクトを返すことができます。アプリケーションが関数を実行し、その結果をモデルに返して応答に組み込ませます:
import os
import json
from openai import OpenAI
client = OpenAI(api_key=os.environ["OPENAI_API_KEY"])
tools = [
{
"type": "function",
"function": {
"name": "get_weather",
"description": "指定された都市の現在の天気を返します。",
"parameters": {
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "都市名(例:「東京」)",
}
},
"required": ["city"],
},
},
}
]
messages = [{"role": "user", "content": "東京の天気はどうですか?"}]
response = client.chat.completions.create(
model="gpt-4o",
messages=messages,
tools=tools,
tool_choice="auto",
)
choice = response.choices[0]
if choice.finish_reason == "tool_calls":
tool_call = choice.message.tool_calls[0]
args = json.loads(tool_call.function.arguments)
# ここで実際の関数を実行
result = {"city": args["city"], "temperature": "18°C", "condition": "曇り"}
messages.append(choice.message)
messages.append({
"role": "tool",
"tool_call_id": tool_call.id,
"content": json.dumps(result),
})
final = client.chat.completions.create(
model="gpt-4o",
messages=messages,
)
print(final.choices[0].message.content)
モデルは関数を呼び出したいときに finish_reason="tool_calls" を返します。関数を実行し、結果をメッセージリストに追加して、2 回目のリクエストを行います。この 2 ステップのループが標準的なパターンです。
AsyncOpenAI を使った非同期使用法
FastAPI、asyncio ベースのサービス、またはノンブロッキング I/O が有効なコードには AsyncOpenAI を使用します:
import os
import asyncio
from openai import AsyncOpenAI
client = AsyncOpenAI(api_key=os.environ["OPENAI_API_KEY"])
async def get_response(prompt: str) -> str:
response = await client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": prompt}],
max_tokens=256,
)
return response.choices[0].message.content
async def main():
result = await get_response("Python の asyncio とは何ですか?")
print(result)
asyncio.run(main())
AsyncOpenAI はドロップインで使える非同期版です。すべてのメソッドが awaitable です。同期クライアントを asyncio.to_thread でラップするよりもこちらを推奨します。
OpenAI JavaScript SDK
OpenAI JavaScript SDK(npm の openai)は、Python のインターフェースとほぼ同じです。インストール:
npm install openai
Node.js での基本的なチャット補完:
import OpenAI from "openai";
const client = new OpenAI({
apiKey: process.env.OPENAI_API_KEY,
});
const response = await client.chat.completions.create({
model: "gpt-4o",
messages: [
{ role: "system", content: "You are a helpful assistant." },
{ role: "user", content: "Explain promises vs async/await in JavaScript." },
],
max_tokens: 512,
});
console.log(response.choices[0].message.content);
JavaScript でのストリーミング:
import OpenAI from "openai";
const client = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });
const stream = await client.chat.completions.stream({
model: "gpt-4o",
messages: [{ role: "user", content: "Summarize the fetch API in 3 sentences." }],
});
for await (const chunk of stream) {
const text = chunk.choices[0]?.delta?.content ?? "";
process.stdout.write(text);
}
JavaScript SDK は Node.js 18+、Deno、ブラウザ環境をサポートします(ただし、ブラウザで API キーを公開するのは危険です。代わりにサーバーサイドプロキシを使用してください)。互換 API を指すための base_url オプションは Python とまったく同じように機能します。
Azure OpenAI Python 統合
直接の OpenAI API ではなく Azure OpenAI サービスを使用している場合は、同じパッケージの AzureOpenAI クライアントを使用します:
import os
from openai import AzureOpenAI
client = AzureOpenAI(
api_key=os.environ["AZURE_OPENAI_API_KEY"],
azure_endpoint=os.environ["AZURE_OPENAI_ENDPOINT"],
api_version="2024-02-01",
)
response = client.chat.completions.create(
model="gpt-4o", # Azure 上のデプロイ名
messages=[
{"role": "user", "content": "Azure OpenAI を Python で使う方法は?"},
],
)
print(response.choices[0].message.content)
Azure に必要な環境変数:
AZURE_OPENAI_API_KEY:Azure リソースの API キーAZURE_OPENAI_ENDPOINT:エンドポイント URL(例:https://your-resource.openai.azure.com/)
Azure OpenAI の model パラメータは、基盤となるモデル名ではなく デプロイ名 を指します。api_version はデプロイで使用する Azure API バージョンに合わせて設定します(現在サポートされているバージョンは Azure OpenAI ドキュメント を確認してください)。
API キーの代わりに Microsoft Entra ID(旧 Azure AD)を使用した認証:
from azure.identity import DefaultAzureCredential, get_bearer_token_provider
from openai import AzureOpenAI
token_provider = get_bearer_token_provider(
DefaultAzureCredential(),
"https://cognitiveservices.azure.com/.default",
)
client = AzureOpenAI(
azure_ad_token_provider=token_provider,
azure_endpoint=os.environ["AZURE_OPENAI_ENDPOINT"],
api_version="2024-02-01",
)
Novita AI の OpenAI 互換 API への切り替え
Novita AI は、https://api.novita.ai/openai で OpenAI 互換のエンドポイントを公開しています。同じ openai Python SDK または JavaScript SDK を使用し、base_url と api_key を変更するだけで、他のコード変更は一切不要です:
import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ["NOVITA_API_KEY"],
base_url="https://api.novita.ai/openai",
)
response = client.chat.completions.create(
model="deepseek/deepseek-v4-pro",
messages=[
{"role": "system", "content": "あなたは親切なコーディングアシスタントです。"},
{"role": "user", "content": "Python の GIL がマルチスレッドにどのような影響を与えるか説明してください。"},
],
temperature=0.3,
max_tokens=512,
)
print(response.choices[0].message.content)
Novita AI の API キーは novita.ai/settings/key-management から取得できます。同じキーが OpenAI 互換エンドポイントを含むすべての Novita AI API で使用できます。
JavaScript での Novita AI 使用例:
import OpenAI from "openai";
const client = new OpenAI({
apiKey: process.env.NOVITA_API_KEY,
baseURL: "https://api.novita.ai/openai",
});
const response = await client.chat.completions.create({
model: "qwen/qwen3-coder-30b-a3b-instruct",
messages: [{ role: "user", content: "Write a Python type annotation cheatsheet." }],
max_tokens: 600,
});
console.log(response.choices[0].message.content);
ストリーミング、関数呼び出し、非同期使用法、response_format、temperature、max_tokens など、後続のすべてが同じように動作します。Novita AI エンドポイントは OpenAI Chat Completions API 仕様に従っています。
Novita AI によるオープンソースモデル
base_url を変更するだけで、特定のタスクでクローズドソースの最先端モデルに匹敵するようになったオープンウェイトモデルのカタログにアクセスできます。コーディングワークフロー、関数呼び出し、長文脈推論において、実用的な差は大幅に縮まっています。
Novita AI の OpenAI 互換エンドポイントを通じて利用可能で、評価に値するモデル:
DeepSeek V4 Pro (deepseek/deepseek-v4-pro):大規模 MoE モデル(MIT 類似ライセンス)で、SWE-Bench や関数呼び出しベンチマークでトップクラスにランクイン。GPT-4o や Claude Opus を使っていたコーディングエージェント、コードレビュー、マルチステップツール使用タスクに強力。
Qwen3 Coder 30B A3B Instruct (qwen/qwen3-coder-30b-a3b-instruct):Qwen Coder ファミリーの 30B スパース MoE モデル。コード生成、バグトリアージ、プルリクエストレビューに最適化。Novita AI では入力 100 万トークンあたり $0.07、出力 100 万トークンあたり $0.27 と、日常のコーディング支援においてほとんどのクローズド API よりも大幅に安価。
Qwen3 235B A22B Instruct (qwen/qwen3-235b-a22b-instruct-2507):大規模 MoE モデル(Apache 2.0)。優れた推論能力と多言語コーディング性能を持つ。現在 GPT-4o を創造的または複雑な応答に使用しているが、ボリュームあたりのトークンコストを削減したいタスクに適している。
Novita AI でのモデル ID 形式は provider/model-name です。SDK の model パラメータに直接渡します。
オープンモデルとクローズドモデルを混在させたいチーム向けのシンプルなルーティングパターン:
def get_client(use_novita: bool = False) -> OpenAI:
if use_novita:
return OpenAI(
api_key=os.environ["NOVITA_API_KEY"],
base_url="https://api.novita.ai/openai",
)
return OpenAI(api_key=os.environ["OPENAI_API_KEY"])
# コスト重視、高ボリュームのコーディングタスクにはオープンウェイトを使用
coding_client = get_client(use_novita=True)
# クローズドモデルが本当に優れているタスクには OpenAI を使用
openai_client = get_client(use_novita=False)
これにより、出力品質の A/B テスト、タスクごとのパフォーマンスベンチマーク、リクエストロジックに触れずに安価なモデルへのボリュームシフトが可能になります。
FAQ
OpenAI Python パッケージの名前は何ですか?
PyPI 上のパッケージ名は openai です。pip install openai でインストールします。
OpenAI クライアントの Python クラス名は何ですか?
同期使用には OpenAI、非同期使用には AsyncOpenAI が主要なクラスです。どちらも openai モジュールにあります:from openai import OpenAI, AsyncOpenAI。
OpenAI Python SDK はストリーミングをサポートしていますか?
はい。コンテキストマネージャーとして client.chat.completions.stream() を使用するか、client.chat.completions.create() に stream=True を渡してチャンクをイテレートします。
OpenAI JavaScript SDK のパッケージ名は何ですか?
npm パッケージは openai です。npm install openai でインストールします。クラスとメソッドのシグネチャは Python SDK とほぼ同じです。
Azure OpenAI を Python で使用するにはどうすればよいですか?
openai パッケージの AzureOpenAI クラスを使用します。azure_endpoint、api_key、api_version を渡します。model パラメータは基盤モデルではなく Azure のデプロイ名を指します。
OpenAI Python SDK を他のプロバイダーでも使用できますか?
はい。OpenAI Chat Completions API 形式を実装しているプロバイダーであれば、クライアントの base_url を設定することで使用できます。Novita AI のエンドポイント https://api.novita.ai/openai はその一例で、ストリーミング、関数呼び出し、非同期などの SDK の全機能が変更なしで動作します。
OpenAI API キーを安全に保つにはどうすればよいですか?
キーを環境変数(OPENAI_API_KEY)に保存し、os.environ["OPENAI_API_KEY"] で読み取ります。ソースコード、公開リポジトリ、ビルドログ、クライアントサイド JavaScript に決して記述しないでください。
おすすめ記事
- Novita AI が OpenAI Agents SDK をサポート! — Novita AI モデルを OpenAI Agents SDK に接続して、マルチエージェントオーケストレーション、ガードレール、トレーシングを実現。
- Qwen3 Coder 30B A3B Instruct クイックスタート — モデル ID、料金、コンテキストウィンドウ、Novita AI 上のこのコスト効率の良いコーディングモデルの API 例。
- Vercel AI SDK:AI アプリケーション構築のための完全開発者ガイド — Novita AI の OpenAI 互換エンドポイントで Vercel AI SDK を使用し、ストリーミング、ツール呼び出し、エージェントループを TypeScript で実現。
