Jupyter Notebook上でもChatGPTを使う方法、コードと会話が融合する新次元の開発！

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

<h3>必要なモジュールのインストール</h3>
<span>まずは、Azure OpenAI ServiceとJupyter Notebookを連携させるために必要なライブラリをインストールし、インポートしましょう。</span>
<div class="hcb_wrap">
<pre class="prism undefined-numbers lang-python" data-lang="Python"><code>!pip install openai</code></pre>
</div>
<h3>Azure APIキーの設定</h3>
ChatGPTを利用するためには、Azure APIキーが必要です。環境変数に設定し、安全に利用できるようにしましょう。

環境変数に設定をする前提ですが、ここでは .env ファイルを作成する方法で紹介します。各環境に合わせてjupyter notebookを実行するディレクトリに .env ファイルを作成します。
<h4>Azure OpenAI Serviceの場合</h4>
<div class="hcb_wrap">
<pre class="prism undefined-numbers lang-python" data-lang="Python"><code>OPENAI_API_BASE=[YOUR RESOURCE NAME]
OPENAI_API_KEY=****************
</code></pre>
</div>
<h4>OpenAIの場合</h4>
<div class="hcb_wrap">
<pre class="prism undefined-numbers lang-python" data-lang="Python"><code>OPENAI_API_KEY=sk-*************************
</code></pre>
</div>
<h3>ライブラリのインポートと認証</h3>
必要なライブラリをインポートし、Azure OpenAI Serviceへの認証を行います。
<h4>Azure OpenAI Serviceの場合</h4>

```python
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']
```

<h4>OpenAIの場合</h4>

```python
import os
import openai
from dotenv import load_dotenv

openai.api_key = os.environ['AZURE_OPENAI_KEY']
```

<h3>ChatGPT関数の定義</h3>
Jupyter Notebook上でChatGPTとやりとりするための関数を定義します。これにより、簡単なプロンプト入力でChatGPTとの対話が可能になります。
<h4>Azure OpenAI Serviceの場合</h4>

```python
# 出力用
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."}
]
```

<h4>OpenAIの場合</h4>

```python
# 出力用
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."}
]
```

<h3>ChatGPTっぽい使い方</h3>
上記まで行えば、準備は完了です。あとは、ノードブック内で以下を繰り返し実行するだけです。このブロックを複数作ることで、会話として繰り返しすることも可能です。

```python
message = "ここにChatGPTに投げる質問を入力"
conversation_history.append({"role": "user", "content": message})
response = chat(conversation_history)
display(Markdown(response))
conversation_history.append({"role": "assistant", "content": response})
```
実行すると以下のように <code>display</code>がMarkdownを綺麗に出力してくれます。

<img src="https://azure-recipe.kc-cloud.jp/wp-content/uploads/2023/04/jupyter01.png" alt="" width="804" height="277" class="alignnone size-full wp-image-19066" />
<h3>まとめ</h3>
<span>これで、あなたもJupyter Notebook上でもChatGPTと仲良くなる準備が整いました。Azure OpenAI Serviceを利用して、Jupyter Notebook上でChatGPTの力を引き出す方法をご紹介しました。これで、手持ちのデータやプロジェクトにChatGPTの知恵を取り入れることができます。さあ、コードと一緒に、ChatGPTとのアドベンチャーに出かけましょう！</span>