ChatGPT APIの使い方入門|Python実装からコスト管理まで
ChatGPT APIを使えば、OpenAIの言語モデルをプログラムから呼び出し、自動応答システムやコンテンツ生成ツールを構築できます。本記事では、APIキーの取得からPython実装、料金体系、実運用のベストプラクティスまでを解説します。
今すぐAPI開発を始めたい方へ
書籍で体系的に学びながら進めたい方には「ChatGPT/LangChainによるチャットシステム構築[Python]実践入門」がおすすめです。環境構築からデプロイまで、順を追って解説されています。
ChatGPT APIとは
ChatGPT APIは、OpenAIが提供する言語モデル(GPT-4、GPT-3.5など)をHTTP経由で利用できるサービスです。Web版ChatGPTとは異なり、プログラムに組み込んで自動化できる点が特徴です。
Web版との主な違い
- 料金体系: 月額課金ではなく、使用トークン数に応じた従量課金
- カスタマイズ性: システムプロンプト、温度パラメータなどを自由に設定可能
- レート制限: APIキーのティアに応じて1分あたりのリクエスト数に上限あり
- データ利用: APIの入出力は原則としてモデルの学習に使用されない(2023年3月以降)
APIキーの取得方法
1. OpenAIアカウント作成
platform.openai.comにアクセスし、アカウントを作成します。既にChatGPTのアカウントを持っている場合でも、API利用には別途クレジットカード登録が必要です。
2. APIキー発行
- ダッシュボードにログイン
- 左メニューから「API keys」を選択
- 「Create new secret key」をクリック
- キー名を入力(例: “development”)し、生成
- 表示されたキーを必ずコピーして保存(再表示不可)
3. 利用枠の設定
「Settings」→「Billing」から以下を設定します。
- クレジットカード登録: 従量課金の支払い方法
- Usage limits: 月間利用上限を設定(予期しない高額請求を防ぐ)
初回登録時は無料クレジットが付与される場合がありますが、期限や金額は時期により変動します。
Python実装の基本
環境構築
# OpenAI公式ライブラリのインストール
pip install openai
最小構成のコード例
from openai import OpenAI
# APIキーは環境変数から読み込む
client = OpenAI(api_key="your-api-key-here")
response = client.chat.completions.create(
model="gpt-3.5-turbo",
messages=[
{"role": "user", "content": "Pythonでリストを反転する方法を教えて"}
]
)
print(response.choices[0].message.content)
環境変数の利用(推奨)
APIキーをコードに直接書くのはセキュリティリスクです。環境変数を使いましょう。
# .bashrc or .zshrc に追加
export OPENAI_API_KEY="sk-..."
import os
from openai import OpenAI
# 環境変数から自動取得
client = OpenAI(api_key=os.environ.get("OPENAI_API_KEY"))
システムプロンプトの活用
systemロールでAIの振る舞いを制御できます。
response = client.chat.completions.create(
model="gpt-3.5-turbo",
messages=[
{"role": "system", "content": "あなたは初心者向けプログラミング講師です。分かりやすく丁寧に説明してください。"},
{"role": "user", "content": "変数とは何ですか?"}
]
)
会話履歴の管理
複数ターンの対話を実現するには、過去のメッセージを配列に蓄積します。
messages = [
{"role": "system", "content": "あなたは親切なアシスタントです。"}
]
# ユーザー入力を追加
messages.append({"role": "user", "content": "今日の天気は?"})
response = client.chat.completions.create(
model="gpt-3.5-turbo",
messages=messages
)
# AIの返答も履歴に追加
messages.append({
"role": "assistant",
"content": response.choices[0].message.content
})
# 次のターン
messages.append({"role": "user", "content": "傘は必要ですか?"})
主なパラメータ解説
temperature(温度)
生成結果のランダム性を制御します(0.0~2.0)。
- 0.0~0.3: 決定論的で一貫性のある出力(FAQ、技術文書)
- 0.7~1.0: バランス型(一般的な会話)
- 1.5~2.0: 創造的で多様な出力(ブレスト、小説)
response = client.chat.completions.create(
model="gpt-3.5-turbo",
messages=[{"role": "user", "content": "新商品のキャッチコピーを考えて"}],
temperature=1.5 # 創造性重視
)
max_tokens
生成する最大トークン数を制限します。
response = client.chat.completions.create(
model="gpt-3.5-turbo",
messages=[{"role": "user", "content": "AIとは"}],
max_tokens=100 # 簡潔な返答に制限
)
top_p(nucleus sampling)
出力候補の確率分布を制御します(0.0~1.0)。temperatureとの併用は推奨されません。
n(生成数)
1回のリクエストで複数の候補を生成します。
response = client.chat.completions.create(
model="gpt-3.5-turbo",
messages=[{"role": "user", "content": "ブログタイトル案を出して"}],
n=3 # 3つの候補を生成
)
for choice in response.choices:
print(choice.message.content)
料金体系とコスト管理
2024年時点の主なモデル料金
| モデル | 入力 | 出力 |
|---|---|---|
| GPT-4 Turbo | $10 / 1M tokens | $30 / 1M tokens |
| GPT-3.5 Turbo | $0.50 / 1M tokens | $1.50 / 1M tokens |
※料金は変更される可能性があります。最新情報は公式価格ページで確認してください。
トークン数の概算
- 日本語: 1文字あたり約1.5~2トークン
- 英語: 1単語あたり約1.3トークン
# トークン数を取得
response = client.chat.completions.create(
model="gpt-3.5-turbo",
messages=[{"role": "user", "content": "こんにちは"}]
)
print(f"入力トークン: {response.usage.prompt_tokens}")
print(f"出力トークン: {response.usage.completion_tokens}")
print(f"合計: {response.usage.total_tokens}")
コスト削減のテクニック
1. モデルの使い分け
単純なタスクにはGPT-3.5 Turboを使用し、GPT-4は複雑な推論が必要な場合のみ使用します。
2. 会話履歴の削減
長い会話では古いメッセージを削除し、直近のやり取りのみ保持します。
# 直近5ターンのみ保持
MAX_HISTORY = 10 # system + user/assistant x 5
if len(messages) > MAX_HISTORY:
messages = [messages[0]] + messages[-(MAX_HISTORY-1):]
3. max_tokensで出力を制限
不要に長い生成を防ぎます。
4. キャッシュとバッチ処理
同じ入力に対する結果をキャッシュし、複数リクエストをバッチ化します。
API開発を体系的に学ぶには
独学でのAPI開発に限界を感じている方には、プログラミングスクールも選択肢です。
| 特徴 | 内容 |
|---|---|
| 実践的カリキュラム | ChatGPT APIを使った実アプリ開発 |
| 現役エンジニア指導 | マンツーマンでの技術サポート |
| 転職・副業支援 | ポートフォリオ作成から案件獲得まで |
→ DMM WEBCAMP 無料カウンセリングに申し込む(5分で完了)
利用量モニタリング
import openai
from datetime import datetime, timedelta
# 過去30日間の利用量を取得
end_date = datetime.now()
start_date = end_date - timedelta(days=30)
# ダッシュボードで確認するのが確実
# APIでの取得は非推奨(レート制限の対象)
実際の利用量はOpenAIダッシュボードで確認するのが確実です。
実運用のベストプラクティス
エラーハンドリング
from openai import OpenAI, OpenAIError
import time
client = OpenAI()
def call_api_with_retry(messages, max_retries=3):
for attempt in range(max_retries):
try:
response = client.chat.completions.create(
model="gpt-3.5-turbo",
messages=messages
)
return response
except OpenAIError as e:
if attempt < max_retries - 1:
wait_time = 2 ** attempt # 指数バックオフ
print(f"エラー発生。{wait_time}秒後に再試行...")
time.sleep(wait_time)
else:
raise
レート制限への対応
APIキーのティアによってRPM(Requests Per Minute)とTPM(Tokens Per Minute)の上限があります。
import time
from collections import deque
class RateLimiter:
def __init__(self, max_requests_per_minute):
self.max_requests = max_requests_per_minute
self.requests = deque()
def wait_if_needed(self):
now = time.time()
# 1分以上前のリクエストを削除
while self.requests and self.requests[0] < now - 60:
self.requests.popleft()
if len(self.requests) >= self.max_requests:
sleep_time = 60 - (now - self.requests[0])
time.sleep(sleep_time)
self.requests.append(time.time())
# 使用例
limiter = RateLimiter(max_requests_per_minute=10)
for message in message_list:
limiter.wait_if_needed()
response = client.chat.completions.create(...)
セキュリティ対策
APIキーの管理
- .gitignoreに登録: 環境変数ファイル(.env)をGitにコミットしない
- 権限の最小化: 必要な権限のみ付与されたキーを使用
- 定期的なローテーション: 漏洩リスクに備えて定期的に再生成
入力のサニタイズ
ユーザー入力をそのままAPIに送る場合、プロンプトインジェクション対策が必要です。
def sanitize_input(user_input):
# 極端に長い入力を制限
if len(user_input) > 2000:
user_input = user_input[:2000]
# システムプロンプトの上書きを防ぐ
# (完全な対策ではないため、重要な用途では慎重に設計)
return user_input
messages = [
{"role": "system", "content": "あなたはカスタマーサポートです。"},
{"role": "user", "content": sanitize_input(user_input)}
]
ログ記録
import logging
import json
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
def log_api_call(messages, response):
logger.info(json.dumps({
"timestamp": time.time(),
"model": response.model,
"prompt_tokens": response.usage.prompt_tokens,
"completion_tokens": response.usage.completion_tokens,
"total_tokens": response.usage.total_tokens
}))
response = client.chat.completions.create(...)
log_api_call(messages, response)
ストリーミング応答
リアルタイムにテキストを受信する場合はストリーミングを使用します。
stream = client.chat.completions.create(
model="gpt-3.5-turbo",
messages=[{"role": "user", "content": "AIの歴史について説明して"}],
stream=True
)
for chunk in stream:
if chunk.choices[0].delta.content is not None:
print(chunk.choices[0].delta.content, end="")
Function Calling(関数呼び出し)
外部ツールやAPIと連携する際に有用です。
tools = [
{
"type": "function",
"function": {
"name": "get_weather",
"description": "指定都市の天気を取得",
"parameters": {
"type": "object",
"properties": {
"city": {"type": "string", "description": "都市名"}
},
"required": ["city"]
}
}
}
]
response = client.chat.completions.create(
model="gpt-3.5-turbo",
messages=[{"role": "user", "content": "東京の天気は?"}],
tools=tools,
tool_choice="auto"
)
# AIが関数呼び出しを判断した場合
if response.choices[0].message.tool_calls:
tool_call = response.choices[0].message.tool_calls[0]
function_name = tool_call.function.name
arguments = json.loads(tool_call.function.arguments)
# 実際の天気APIを呼び出す処理...
よくある質問
Q. APIキーが漏洩した場合、どうすればいいですか?
すぐにOpenAIダッシュボードでキーを無効化し、新しいキーを発行してください。漏洩した可能性がある場合は、念のため利用状況を確認し、不正利用がないかチェックしましょう。
Q. 無料枠はありますか?
初回登録時に無料クレジットが付与される場合がありますが、金額や期限は時期により変動します。基本的には従量課金制のため、クレジットカード登録が必要です。
Q. APIとChatGPT Plusの違いは何ですか?
APIは従量課金でプログラムから利用するもの、Plusは月額$20でWebやアプリから利用するものです。開発者以外の一般ユーザーにはPlusがおすすめです。
Q. エラーコード429が出た場合の対処法は?
レート制限に達した場合に表示されるエラーです。リクエストの頻度を下げるか、指数バックオフを実装してリトライしてください。頻繁に発生する場合は、より高いティアへのアップグレードを検討しましょう。
まとめ
ChatGPT APIを使えば、言語モデルの能力をプログラムに組み込めます。本記事で解説したポイントは以下の通りです。
- APIキーは環境変数で管理し、GitHubなどに公開しない
- システムプロンプトで振る舞いを制御
- temperatureやmax_tokensで出力を調整
- トークン数を監視してコストを管理
- エラーハンドリングとレート制限対策を実装
- セキュリティとログ記録を忘れずに
実際のプロダクション運用では、キャッシュ層の導入、マルチモデル対応、詳細な監視など、さらに高度な設計が求められます。まずは小規模な実装から始め、段階的に機能を拡充していくことをお勧めします。
おすすめ書籍
AIツールの活用スキルをさらに高めたい方におすすめの一冊です。
ChatGPTを仕事で本格的に使いこなすための実践テクニックが満載。プロンプト設計から業務自動化まで幅広くカバーしています。
関連記事
- 【2026年最新】ChatGPT使い方ガイド|初心者向けに始め方から活用術まで解説
- ChatGPTプロンプト完全ガイド
- ChatGPT無料版と有料版の違い
- GPT-4oの新機能
- GitHub Copilot活用術
- Cursor完全ガイド|AIコードエディタの使い方
さらに深く学ぶには
【PR】
📚 書籍で体系的に学ぶ
API開発を本格的に学びたい方には、以下の書籍がおすすめです。
入門者向け: 「面倒なことはChatGPTにやらせよう」
– Amazon ★4.5(800件以上のレビュー)
– プログラミング初心者でも分かりやすい
– 実践的なユースケースが豊富
実践者向け: 「ChatGPT/LangChainによるチャットシステム構築」
– 本格的なシステム構築を学べる
– LangChainとの連携も解説
– プロダクション運用のノウハウ
🎓 プロから直接学ぶ
独学に限界を感じたら、プログラミングスクールも選択肢です。
DMM WEBCAMP AIコース
– 現役エンジニアがマンツーマン指導
– チャットサポート付き
– 転職サポートあり
給付金で最大80%オフ(実質18万円〜) → DMM WEBCAMP 無料カウンセリングに申し込む
参考リンク
- OpenAI API公式ドキュメント: platform.openai.com/docs
- 料金計算ツール: OpenAI Tokenizer


コメント