OpenAIのGPT-4 APIを使ってPythonプログラムで複数ターンの会話を実現する方法を解説します。
新たにAPIからGPT-4が利用可能になったことで、ChatGPT Plusと同等の性能の言語モデルを自分のアプリに組み込めるようになりました。
今回はGPT-4を使用するための最もシンプルな実装方法を紹介しますので、ぜひアプリ開発に応用してみてください。
また、当ブログ内のChatGPTについての記事を以下のページでまとめていますので、あわせてご覧ください。
ChatGPTとは
ChatGPTは、OpenAIが提供する自然言語生成モデルです。GPT(Generative Pre-training Transformer)と呼ばれるモデルのアーキテクチャを採用しています。
GPTは、Transformerと呼ばれるニューラルネットワークを使用して、文書や言語処理タスクでのテキスト生成を行うモデルです。GPTは、大量のテキストデータを学習し、そのデータをもとに新しい文章を生成することができます。
ChatGPTは、GPTをもとにしたモデルであり、対話型システムやチャットボットなどで使われることを想定して開発されています。対話を続けることができるようになっており、ユーザーが入力するテキストに対して、自然で返答ができるようになっています。
OpenAI APIキーの取得
PythonのプログラムからChatGPTを使用するためには、OpenAIのAPIキーを取得する必要があります。
取得の手順については以下の記事で解説しています。
GPT-4 APIのwaitlist
2023年5月現在、GPT-4のAPIは一般には公開されておらず、waitlistに早期に登録された方から順番に開放されると一体状態になっています。
GPT-4のAPIの利用を希望される方は、以下のページからwaitlistに登録してお待ちください。
ライブラリのインストール
GTP-4のAPIを使用するために必要なライブラリをインストールします。
コマンドプロンプトで以下のコマンドを実行してください。
pip install openai
作成したPythonコード
ここからは実際にPythonコードからGTP-4のAPIを使用するための実装方法について解説します。
コード解説
APIキーの設定
APIキーを設定するために、api_key
変数に実際のAPIキーを代入します。以下のように記述してください。
api_key = 'your-api-key'
openai.api_key = api_key
generate_text
関数
GPT-4 APIを使ってテキストを生成するためのgenerate_text
関数を定義します。この関数は、以下の3つの引数を受け取ります。
prompt
:ユーザーからの質問や指示role
:アシスタントの役割(例: helpful assistant)conversation_history
:会話履歴を格納するリスト
GPT-4 APIのChatCompletion.create()
メソッドを使って、過去の会話履歴を含めた回答を生成します。その後、生成された回答を会話履歴に追加し、返します。
def generate_text(prompt, role, conversation_history):
...
メイン関数
メイン関数では、以下の手順で処理を進めます。
- ロールプレイのモデルを指定
- 会話履歴のリストを初期化
- ユーザーに質問を入力させる
- GPT-4からの回答を生成
- 回答を表示
ユーザーが’q’を入力するまで、質問入力と回答表示を繰り返します。
if __name__ == "__main__":
...
``
全体のソースコード
作成した全体のPythonコードは以下の通りです。
今回のアプリでは、コマンドプロンプト上での対話形式で利用できる形にしました。
対話の履歴は、毎回GPT-4のプロンプトとして入力されるため、過去の会話の内容を考慮した回答を生成できるようになっています。
履歴を考慮する分、トークン数が多くなりますので、API使用料にはご注意ください。
import openai
# APIキーを設定してください。例: 'your-api-key'
api_key = 'your-api-key'
openai.api_key = api_key
def generate_text(prompt, role, conversation_history):
# ユーザーの質問を会話履歴に追加
conversation_history.append({"role": "user", "content": prompt})
# GPT-4モデルを使用してテキストを生成
response = openai.ChatCompletion.create(
model="gpt-4",
messages=[{"role": "system", "content": f"You are a {role}."}] + conversation_history,
max_tokens=50,
n=1,
temperature=0.8,
)
message = response.choices[0].message['content'].strip()
# アシスタントの回答を会話履歴に追加
conversation_history.append({"role": "assistant", "content": message})
return message
if __name__ == "__main__":
# ロールプレイのモデルをユーザーに入力させる
role = input("ロールプレイのモデルを指定してください(例: helpful assistant): ")
# 会話履歴を格納するためのリストを初期化
conversation_history = []
while True:
# ユーザーに質問を入力させる
input_prompt = input("質問を入力してください(終了するには'q'を入力): ")
# 終了条件の確認
if input_prompt.lower() == 'q':
break
# GPT-4からの回答を生成
generated_text = generate_text(input_prompt, role, conversation_history)
# 回答を表示
print("GPT-4からの回答:", generated_text)
実行結果
今回は簡単な計算を行うプロンプトを用意しました。
1ターン目
まず、会話スタート時にロールプレイのモデルを入力します。
これはGPT-4がどのような立場で回答をするかを明確にすることで、回答の精度を向上させるためです。
今回はプログラマーとして回答を作成させます。
ロールプレイのモデルを指定してください(例: helpful assistant): 優秀なプログラマー
質問を入力してください(終了するには'q'を入力): Pythonで3+5を計算するプログラムの書き方を教えてください
GPT-4からの回答: Pythonで3+5を計算するプログラムは以下のように書けます:
```python
# 数字の足し算
result = 3 + 5
# 結果を表示
print(result)
```
このコードを実行すると、`8`という結果が表示されます。
2ターン目
2ターン目では1ターン目の結果をもとに続きの計算を行う質問をプロンプトとして入力しました。ユーザーが入力するプロンプトとしては、前回の会話の情報を含んでいません。
質問を入力してください(終了するには'q'を入力): その計算結果にさらに10をかけるプログラムを教えてください
GPT-4からの回答: 3+5の計算結果にさらに10をかけるプログラムは以下のように書けます:
```python
# 数字の足し算
result = 3 + 5
# 計算結果に10をかける
result = result * 10
# 結果を表示
print(result)
```
このコードを実行すると、`80`という結果が表示されます。
まとめ
今回は、OpenAIのGPT-4 APIを使ってPythonプログラムで複数ターンの会話を実現する方法を解説しました。
GTP-4のAPIが利用可能になったことで、LangChainなどのフレームワーク連携させることができ、様々な用途に応用できるようになります。
今後外部ツールとの連携方法などについても、解説していく予定です。
また、以下の記事で効率的にPythonのプログラミングスキルを学べるプログラミングスクールの選び方について解説しています。最近ではほとんどのスクールがオンラインで授業を受けられるようになり、仕事をしながらでも自宅で自分のペースで学習できるようになりました。
スキルアップや副業にぜひ活用してみてください。
スクールではなく、自分でPythonを習得したい方には、いつでもどこでも学べる動画学習プラットフォームのUdemyがおすすめです。
講座単位で購入できるため、スクールに比べ非常に安価(セール時1200円程度~)に学ぶことができます。私も受講しているおすすめの講座を以下の記事でまとめていますので、ぜひ参考にしてみてください。
それでは、また次の記事でお会いしましょう。
コメント