Jupyter Notebookでの作業が一息ついたところで、ふと疑問が浮かんだことはありませんか?「このJupyter Notebook上で、いつもお世話になっているあのChatGPTを使えたら最高なのに」と。しかし、GPT-4は使えるものの、まるで悪戯にもChatGPTは使えないように思えます。しかし、今日はその壁を越える方法をご紹介します。コードは若干地味なものになりますが、最後まで見届けていただければJupyter Notebook上でChatGPTを使うことが出来ます。

必要なモジュールのインストール

!pip install openai

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の場合

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関数の定義

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を綺麗に出力してくれます。

まとめ

广告
将在 10 秒后关闭
bannerAds