Jupyter Notebookでの作業が一息ついたところで、ふと疑問が浮かんだことはありませんか?「このJupyter Notebook上で、いつもお世話になっているあのChatGPTを使えたら最高なのに」と。しかし、GPT-4は使えるものの、まるで悪戯にもChatGPTは使えないように思えます。しかし、今日はその壁を越える方法をご紹介します。コードは若干地味なものになりますが、最後まで見届けていただければJupyter Notebook上でChatGPTを使うことが出来ます。
必要なモジュールのインストール
まずは、Azure OpenAI ServiceとJupyter Notebookを連携させるために必要なライブラリをインストールし、インポートしましょう。!pip install openai
Azure APIキーの設定
ChatGPTを利用するためには、Azure APIキーが必要です。環境変数に設定し、安全に利用できるようにしましょう。環境変数に設定をする前提ですが、ここでは .env ファイルを作成する方法で紹介します。各環境に合わせてjupyter notebookを実行するディレクトリに .env ファイルを作成します。
Azure OpenAI Serviceの場合
OPENAI_API_BASE=[YOUR RESOURCE NAME]
OPENAI_API_KEY=****************
OpenAIの場合
OPENAI_API_KEY=sk-*************************
ライブラリのインポートと認証
必要なライブラリをインポートし、Azure OpenAI Serviceへの認証を行います。Azure OpenAI Serviceの場合
import os
import openai
from dotenv import load_dotenv
OPENAI_API_BASE = os.getenv("OPENAI_API_BASE")
openai.api_type = "azure"
openai.api_base = f"https://{OPENAI_API_BASE}.openai.azure.com/"
openai.api_version = "2023-03-15-preview"
openai.api_key = os.environ['AZURE_OPENAI_KEY']
OpenAIの場合
import os
import openai
from dotenv import load_dotenv
openai.api_key = os.environ['AZURE_OPENAI_KEY']
ChatGPT関数の定義
Jupyter Notebook上でChatGPTとやりとりするための関数を定義します。これにより、簡単なプロンプト入力でChatGPTとの対話が可能になります。Azure OpenAI Serviceの場合
# 出力用
from IPython.display import display, Markdown
def chat(messages):
response = openai.ChatCompletion.create(
engine="Azure OpenAI StudioでDeployしたDeploy Name",
messages=messages
)
return response["choices"][0]["message"]["content"]
# 会話履歴を初期化
conversation_history = [
{"role": "system", "content": "You are a helpful assistant."}
]
OpenAIの場合
# 出力用
from IPython.display import display, Markdown
def chat(messages):
response = openai.ChatCompletion.create(
model="gpt-4",
engine="gpt-4",
messages=messages
)
return response["choices"][0]["message"]["content"]
# 会話履歴を初期化
conversation_history = [
{"role": "system", "content": "You are a helpful assistant."}
]
ChatGPTっぽい使い方
上記まで行えば、準備は完了です。あとは、ノードブック内で以下を繰り返し実行するだけです。このブロックを複数作ることで、会話として繰り返しすることも可能です。message = "ここにChatGPTに投げる質問を入力"
conversation_history.append({"role": "user", "content": message})
response = chat(conversation_history)
display(Markdown(response))
conversation_history.append({"role": "assistant", "content": response})
実行すると以下のように display
がMarkdownを綺麗に出力してくれます。