ChatGPTでソースコードを生成するベストな方法(個人メモ)
最近、技術検証を目的としたアプリをPythonで作成する機会が多く、ChatGPTを活用してソースコードを生成しています。
試行錯誤を続けた結果、現時点(2025年4月29日時点)では、以下の方法が最も効果的だと感じています。
※ 本記事は、ChatGPT Plus契約者向けを前提としています。
ソースコード生成のポイント
ポイントは大きく2つです。
- いきなりコードを生成させず、まず「コード生成用プロンプト」を試行錯誤して作成する
- プロンプト生成には安価なモデル(
4o
)を、最終的なコード生成には高性能モデル(o4-mini-high
またはo3
)を使い分ける
この方法により、コストを抑えながらも高品質なソースコードを得ることができています。
ソースコード生成の流れ
全体の流れは以下の通りです。
- 「プロンプト」を試行錯誤しながら作成(モデル:
4o
) - 納得できるプロンプトが完成したら、高性能モデルでソースコード生成(モデル:
o4-mini-high
またはo3
) - 生成されたソースコードを実行
- エラーが出た場合は、エラーメッセージをそのままChatGPTに送信して対応
ソースコード生成の実例
ここでは、LangChainを使ったシンプルなOpenAI APIアプリを作成する流れを紹介します。
プロンプトの生成
試行錯誤を経て作成したプロンプトが以下です。
(補足事項)
- 生成されるプロンプトは複数のコードブロックに分かれることが多く、それを回避するための指示も記載
- LangChainはバージョンによって仕様が大きく変わっているため、最新版を使用するように指示
- 2025年4月29日時点、ChatGPTのデフォルトの仕様として、過去の会話を参照するようになっていますが、こちらもOFFに指示
LangChainを使ったソースコードを生成AIに生成してもらうためのプロンプトを出力して。
- 出力はMarkdown形式
- 出力は事前の説明は不要でプロンプトのみ
- 出力はprompt.mdという名称で1ファイル
- 私が過去に入力した内容は参考にしないで
### 生成するアプリケーションの前提条件や仕様
- OpenAIのAPIを使用
- dotenvを使って環境変数を管理
- OPENAIのキーは.envファイルで管理
- LangChainは最新のバージョンを使用
- 機能仕様は以下
* ユーザーは標準入力から質問をテキストで入力
* ユーザーが入力したテキストOpenAIのAPIを呼び出してAIに質問
* 結果はテキストとして出力
生成されたプロンプト例
(モデルは4o
を使用)
## LangChain + OpenAI API を使った Python プログラムの生成プロンプト
以下の条件を満たすPythonプログラムを作成してください。
### 使用ライブラリ
- langchain(最新バージョン)
- openai
- python-dotenv
### 使用するAPI
- OpenAI API(gpt-4o など最新モデルを使用可)
### 実装仕様
- .envファイルを読み込み、APIキーを取得して利用する
- ユーザーから標準入力でテキスト質問を受け取る
- OpenAIのAPI(LangChain経由)を呼び出して、入力した質問への回答を取得する
- 回答結果を標準出力に表示する
- 必要に応じてLangChainの`ChatOpenAI`、`PromptTemplate`、`LLMChain`を活用してもよい
- APIキーは「OPENAI_API_KEY」という環境変数名で管理する
### .envファイルの例
```env
OPENAI_API_KEY=your-openai-api-key-here
```
### 注意点
- コードはシンプルかつ読みやすく記述する
- 例外処理(エラーハンドリング)を適切に追加する
- 日本語でコメントをつける
- ファイルは`main.py`という名前で作成する
### 出力ファイル
- main.py
ソースコード生成
モデルをo4-mini-high
に切り替え、上記プロンプトでソースコードを生成させます。
生成されたソースコードはこちらです。
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
main.py
LangChain + OpenAI API を使ったシンプルなチャットプログラム
"""
import os
import sys
from dotenv import load_dotenv
from langchain.chat_models import ChatOpenAI
from langchain.prompts import PromptTemplate
from langchain.chains import LLMChain
from openai import OpenAIError
def main():
"""プログラムのエントリポイント"""
# .envファイルを読み込む
load_dotenv()
api_key = os.getenv("OPENAI_API_KEY")
if not api_key:
print("環境変数 OPENAI_API_KEY が設定されていません。", file=sys.stderr)
sys.exit(1)
try:
# ChatOpenAI インスタンスを作成
chat = ChatOpenAI(
model_name="gpt-4o-mini", # 必要に応じて最新モデルに変更可能
temperature=0.7,
openai_api_key=api_key
)
# プロンプトテンプレートを定義
template = (
"あなたは優秀なアシスタントです。以下のユーザーからの質問に対して、わかりやすく回答してください。\n"
"質問: {question}\n"
"回答:"
)
prompt = PromptTemplate(template=template, input_variables=["question"])
# LLMChain を作成
chain = LLMChain(llm=chat, prompt=prompt)
# ユーザーからの入力を受け取る
question = input("質問を入力してください: ")
# 回答を取得
answer = chain.run(question=question)
# 回答を出力
print("\n回答:")
print(answer)
except OpenAIError as e:
# OpenAI API に関するエラー処理
print(f"OpenAI API エラー: {e}", file=sys.stderr)
sys.exit(1)
except Exception as e:
# その他の予期せぬエラー処理
print(f"予期せぬエラーが発生しました: {e}", file=sys.stderr)
sys.exit(1)
if __name__ == "__main__":
main()
ソースコード実行
生成されたソースコードを実行してみます。
-
.env
ファイル作成
OPENAI_API_KEY=your-openai-api-key-here
- 生成されたソースコードを
main.py
ファイルとして作成 - 必要なライブラリをインストール
pip install langchain openai python-dotenv
python main.py
4.python main.py
で実行
エラー対応のコツ
エラーが発生したら、エラーメッセージをそのままChatGPTに送信します。
無理に状況を説明する必要はなく、メッセージをそのまま貼る方が正確な回答が得られやすいです。
例えば以下のエラー:
/Users/xxx/work/python/langchain_demo01/dev-env/lib/python3.9/site-packages/urllib3/__init__.py:35: NotOpenSSLWarning: urllib3 v2 only supports OpenSSL 1.1.1+, currently the 'ssl' module is compiled with 'LibreSSL 2.8.3'. See: https://github.com/urllib3/urllib3/issues/3020
warnings.warn(
Traceback (most recent call last):
File "/Users/xxx/work/python/langchain_demo01/main.py", line 11, in <module>
from langchain.chat_models import ChatOpenAI
File "/Users/xxx/work/python/langchain_demo01/dev-env/lib/python3.9/site-packages/langchain/chat_models/__init__.py", line 29, in __getattr__
from langchain_community import chat_models
ModuleNotFoundError: No module named 'langchain_community'
以下が最終的に生成されたソースコードです。
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
main.py
LangChain + OpenAI API を使ったシンプルなチャットプログラム(LangChain版)
"""
import os
import sys
from dotenv import load_dotenv
from langchain.chat_models import ChatOpenAI
from langchain.prompts import PromptTemplate
from langchain.chains import LLMChain
from openai import OpenAIError
def main():
"""プログラムのエントリポイント"""
# .env ファイルを読み込む
load_dotenv()
api_key = os.getenv("OPENAI_API_KEY")
if not api_key:
print("環境変数 OPENAI_API_KEY が設定されていません。", file=sys.stderr)
sys.exit(1)
try:
# ChatOpenAI インスタンスを生成
chat = ChatOpenAI(
openai_api_key=api_key,
model_name="gpt-4o-mini", # 必要に応じて最新モデルに変更
temperature=0.7
)
# プロンプトテンプレートを定義
template = (
"あなたは優秀なアシスタントです。\n"
"質問: {question}\n"
"回答:"
)
prompt = PromptTemplate(template=template, input_variables=["question"])
# LLMChain を作成
chain = LLMChain(llm=chat, prompt=prompt)
# ユーザーからの質問を受け取る
question = input("質問を入力してください: ")
# 回答を取得(.run は非推奨なので .predict を使用)
answer = chain.predict(question=question)
# 回答を出力
print("\n回答:")
print(answer)
except OpenAIError as e:
# OpenAI API 関連のエラー処理
print(f"OpenAI API エラー: {e}", file=sys.stderr)
sys.exit(1)
except Exception as e:
# その他予期せぬエラー処理
print(f"予期せぬエラーが発生しました: {e}", file=sys.stderr)
sys.exit(1)
if __name__ == "__main__":
main()
# 依存関係のインストール例:
# pip install langchain openai python-dotenv langchain-community
まとめ
以上、ChatGPTによるソースコード自動生成の実践例を紹介しました。
特にLangChainに関しては、以下の要因でエラーが発生しやすい傾向にあります。
- バージョンアップによる変更が激しい
- 依存ライブラリの構成も変わりやすい
上記の特性を踏まえて、プロンプトを設計することで改善することも可能だと思います。
現状としては、ライブラリの特性等を理解して、プロンプトを工夫する必要がありますが、
それでも、開発生産性を大きく向上させることはできています。
これからも、プロンプトの工夫やモデルの使い分けを試行錯誤しながら、よりよい方法を探っていく予定です。