本記事では、OpenAIの大規模言語モデル(LLM) をPythonコードから利用する方法について解説します。
具体的には、OpenAI API を使用して GPT-4 モデルと対話し、テキストを生成するサンプルコードを紹介し、その処理内容を詳しく説明します。
2025年3月現在の最新のAPIを使った解説になりますので、ぜひ試してみてください。
ライブラリのインストール
まず、OpenAI APIを利用するために必要なPythonライブラリをインストールします。
pip install openai
また、APIキーを安全に管理するために、環境変数を使う場合は python-dotenv
をインストールしておくと便利です。
pip install python-dotenv
Pythonコード解説
ここからは実装するコードの処理内容について解説します。
必要なライブラリとAPIキーの設定
import os
import openai
API_KEY = "YOUR_APIKEY"
openai.api_key = API_KEY
この部分では、OpenAI APIを使用するために、openai
ライブラリをインポートし、APIキーを設定します。
本番環境では、APIキーを直接コードに記述するのではなく、環境変数 (os.environ.get("OPENAI_API_KEY")
) などを利用して、セキュリティを確保することが推奨されます。
ChatCompletion APIを利用してテキストを生成
def generate_text(prompt):
response = openai.ChatCompletion.create(
model="gpt-4",
messages=[
{"role": "system", "content": "You are a helpful assistant who provides detailed and informative responses. Please elaborate on the latest technological trends with examples when possible. Ensure your response is complete and not empty."},
{"role": "user", "content": prompt}
],
max_tokens=300,
)
print("DEBUG:", response)
return response.choices[0].message["content"].strip()
この関数 generate_text(prompt)
は、OpenAIの ChatCompletion API を使ってプロンプト(入力文)に対するテキスト応答を生成するものです。
model="gpt-4"
- 利用するモデルとして GPT-4 を指定しています。
messages=[...]
- モデルに渡す対話履歴をリスト形式で定義します。
"role": "system"
のメッセージは、アシスタントの振る舞いを指定するためのシステムプロンプトです。"role": "user"
のメッセージが、ユーザーからの質問やリクエストにあたります。
max_tokens=300
- 生成するテキストの最大トークン数を300に制限しています。
- 1トークンは大体1単語または1文字程度に相当します。
また、print("DEBUG:", response)
により、APIのレスポンス全体をデバッグ表示する仕組みになっています。
main処理
if __name__ == "__main__":
sample_prompt = "LLMの最新の技術動向について300文字程度で教えてください。"
print("Prompt:", sample_prompt)
generated_text = generate_text(sample_prompt)
print("Generated Text:")
print(generated_text)
この部分では、スクリプトを直接実行したときに以下の動作を行います。
sample_prompt
に、実際にAIに質問する内容(プロンプト)を設定generate_text(sample_prompt)
を実行し、AIの応答を取得- 結果を
print()
でコンソールに出力
全体のソースコード
作成した全体のソースコードは以下の通りです。
import os
import openai
# APIキーを変数に格納します。セキュリティ上の理由から、本番環境では環境変数等を利用してください。
API_KEY = "YOUR_APIKEY"
openai.api_key = API_KEY
def generate_text(prompt):
# このコードは "GPT-4 i" チャットモデル用に設計されています。
# ChatCompletion APIを利用して、会話形式のレスポンスを生成します。
response = openai.ChatCompletion.create(
model="gpt-4", # 正式なGPT-4モデル名を指定
messages=[
{"role": "system", "content": "You are a helpful assistant who provides detailed and informative responses. Please elaborate on the latest technological trends with examples when possible. Ensure your response is complete and not empty."},
{"role": "user", "content": prompt}
],
max_tokens=300, # 公式ではこちらのパラメータを利用
)
print("DEBUG:", response)
return response.choices[0].message["content"].strip()
if __name__ == "__main__":
sample_prompt = "LLMの最新の技術動向について300文字程度で教えてください。"
print("Prompt:", sample_prompt)
generated_text = generate_text(sample_prompt)
print("Generated Text:")
print(generated_text)
実行結果
実行すると以下のようにLLMからの応答を得ることができます。
Prompt: LLMの最新の技術動向について300文字程度で教えてください。
DEBUG: {
"id": "xxxxxx",
"object": "chat.completion",
"created": 1742435787,
"model": "gpt-4-0613",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "LLM (Legal Tech)xxxxxx",
"refusal": null,
"annotations": []
},
"logprobs": null,
"finish_reason": "length"
}
],
"usage": {
"prompt_tokens": 70,
"completion_tokens": 300,
"total_tokens": 370,
"prompt_tokens_details": {
"cached_tokens": 0,
"audio_tokens": 0
},
"completion_tokens_details": {
"reasoning_tokens": 0,
"audio_tokens": 0,
"accepted_prediction_tokens": 0,
"rejected_prediction_tokens": 0
}
},
"service_tier": "default",
"system_fingerprint": null
}
Generated Text:
LLM (Legal Tech)は、法律業界で最新のテクノロジーを効果的に活用するためのもので、現在数々の新しいトレンドが生まれています。最も重要なトレンドの一つは、人工知能 (AI) です。法律業界では、AIが大量の法律文書を分析して情報を抽出する作業を自動化し、効率化を図ることが可能になりました。たとえば、ROSS Intelligenceは、AIを使用して法律的な質問に答え、法律文書を検索するツールを提供しています。
また、ブロックチェーン技術も注目されています。これは、スマートコントラクト(自動的に条項を履行するデジタル契約)を実行するためのもので、契約の作成や実施をより効率的かつ確実に行うことができます。例えば、OpenLawやClauseといった
最後のGenerated Text:
がLLMからの応答になります。
必要に応じて上限のトークン数を変更してください。
エラーの概要と対策
実装する際に私の環境で発生したエラーとその対処法をまとめました。
APIキーのエラーが発生する
APIをコールした際に以下のようなエラーが発生してしまいました。
"error": {
"message": "Incorrect API key provided: *******************************************************************************************************************************************************g4xw. You can find your API key at https://platform.openai.com/account/api-keys.",
"type": "invalid_request_error",
"param": null,
"code": "invalid_api_key"
}
対策としては、OpenAIのサイトのAPI管理画面に行き、新しいプロジェクトを作成してAPIキーを取り直したら解決しました。
Clineで使っているAPIキーは「Default project」のものでしたが、それと同じプロジェクト内でキーを作成しても動作しませんでした。
LLMからの応答が空になる
プロンプトをセットしてAPIをコールした際に以下のようにLLMからの応答が空になるという問題が発生しました。
デバッグモードでの情報もあわせて以下に掲載します。
Prompt: LLMの最新の技術動向について300文字程度で教えてください。
DEBUG: {
"id": "chatcmpl-xxx",
"object": "chat.completion",
"created": 1742435232,
"model": "o3-mini-2025-01-31",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "",
"refusal": null,
"annotations": []
},
"finish_reason": "length"
}
],
"usage": {
"prompt_tokens": 61,
"completion_tokens": 300,
"total_tokens": 361,
"prompt_tokens_details": {
"cached_tokens": 0,
"audio_tokens": 0
},
"completion_tokens_details": {
"reasoning_tokens": 300,
"audio_tokens": 0,
"accepted_prediction_tokens": 0,
"rejected_prediction_tokens": 0
}
},
"service_tier": "default",
"system_fingerprint": "fp_42bfad963b"
}
Generated Text:
- 発生したエラー:
OpenAI APIを使用してプロンプトを自動実行した際、生成された応答が空となっていました。ログを見ると、finish_reason
が"length"
となっており、想定外の動作が発生していたことが分かります。 - 原因の特定:
- パラメータ名の変更:
当初は生成トークン数の指定に公式パラメータmax_tokens
を使用していましたが、環境固有の理由からエラーとなり、max_completion_tokens
に変更していました。 - モデル仕様の影響:
「o3-mini」など実験的なモデルを利用していた場合、内部実装や仕様が標準APIと異なる可能性があり、結果として応答が空になっていました。
- パラメータ名の変更:
- 対策:
- 公式パラメータの採用:
公式ドキュメントに基づき、GPT-4などの安定したモデルを利用する際はmax_tokens
を使用する。 - モデルの変更:
アクセス権がある場合、実験モデルから正式な「gpt-4」モデルに変更することで、安定した応答が得られるようになりました。 - コードの最適化:
エラーハンドリングやログ出力の整備により、今後同様の問題発生時に迅速に原因を特定できるようにする。
- 公式パラメータの採用:
この対策により、GPT-4を利用した際に正常な応答が得られるようになりました。
まとめ
今回のサンプルコードでは、以下のポイントを解説しました。
✅ OpenAI APIの基本的な使い方:openai.ChatCompletion.create()
を使ってテキストを生成
✅ プロンプト設計:messages
に system
と user
のメッセージを設定
✅ Pythonでの基本的なLLM活用法:Pythonスクリプトとして簡単に動作可能
✅ APIキー管理の注意点:環境変数や .env
ファイルを利用してセキュリティを確保
今後は、ユーザーの入力を受け付けたり、より高度な応答制御を行う方法も検討すると、さらに便利なアプリケーションが作れるでしょう。
また、APIキーの管理には十分注意し、環境変数などを利用してセキュリティを強化 することを推奨します。
コメント