AIじゃないよ

【初心者も簡単】APIを使ってGoogle Colab上でChatGPT-4を実装する方法【プライバシー強化】

当サイトはアフィリエイト広告を一部掲載しています。

OpenAIのChatGPTは非常に便利だが、チャットの履歴はAIのトレーニングに使われてしまうため、特にビジネスユーザーの場合、会社の情報を入力すると情報漏洩のリスクがつきまとう。
また、無料で利用できるのはGPT-3.5までで、精度の高い強力なモデルであるGPT-4を利用するには、月額20ドルのサブスクリプションが必要となる。

この点、OpenAIは、APIからGPT-4等のモデルを利用した場合と、ビジネス向けのChatGPT Enterpriseを利用した場合には、入力されたデータをモデルのトレーニングには使用しないと明言している。

自社がChatGPT Enterpriseを導入している恵まれた環境にいる人は、ほとんどいないであろうから、個人が先駆けてChatGPTを自分の仕事に取り入れたい場合には、APIを使うのが最も安全だろう。

しかし、APIを自分で動かすには、多少のプログラミングの知識が必要になってしまう。
そこで、この記事では、プログラミングの知識が全くない人でも、GPT-4のAPIを簡単に扱えるチャットインターフェースを、Google Colaboratory上で実現する方法を紹介する。

この記事を読めば、以下の画像のように、テキストボックスに文字を打ち込むと、AI(GPT-4)が返信してくれるチャットインターフェースを誰でも動かすことができるようになる。

APIは従量課金制なので、使った分だけの支払いで、月額契約の必要がないのもメリットだ。
GPT-4を利用した場合で、1,000トークン(和文1,000文字前後)あたり入力0.03ドル/出力0.06ドルなので、11万文字入力して、11万文字出力させたらやっと月額20ドルになる。多くの人はサブスクよりもAPIの方が安く使えるはずだ。



丸コピでOK!GPT-4を使えるGoogle Colabノートブック

Google Colaboratoryは、Googleドライブ上で動作するPython環境のノートブックで、Googleアカウントを持っていれば誰でも無料で利用できる。

この記事では、どのように動作しているかを理解してもらうためにPythonコードの解説も行うが、理解していなくても、Googleアカウントにログインした状態で、以下のGoogle Colabノートブックを開き、実行さえすれば利用できる。

使い方は、コードブロックを、上から順に実行していくだけだ。
コードブロックを実行するには、各コードブロックの左側に表示される再生マークのようなアイコンをクリックする。

ただし、一つだけ必要な準備がある。
APIキーは一人一人に異なる鍵が付与され、その利用料に応じて課金されるので、自分専用のAPIキーを発行する必要がある。

OpenAI APIキーの発行とGoogle Colabへの登録方法

OpenAIのアカウントを作成した上で、APIキーを入手して、Google Colabで自分のAPIキーを呼び出せるように登録しておく必要がある。

クレジットカードの登録が必要になるが、1ヶ月の使用量の上限値(〜ドルに達したら停止)を定めることもできるので、使い方がわからないまま多額のお金を請求される・・・といった不安は基本的にない。

まだアカウントを持っていない人は、まずOpenAIのサイトでアカウントを作成する。

アカウントを作成したら、右上の自分のアイコンをクリックすると、「View API Keys」というメニューが表示されるので、これをクリックする。

左側から「API keys」メニューを選択し、「Create new secret key」から新しいAPIキーを発行する。
ここで表示された文字列は、後で使うので必ずどこかにメモしておくこと。

また、このAPI keyを他人に知られて悪用されると、自分のアカウントに課金されてしまうので、うっかり公開してしまわないように注意が必要だ。

APIキーを発行できたら、今度はそのキーをGoogle Colabに登録する。

Google Colabの機能で、事前にAPIキーなどの秘密鍵を登録してニックネームを付けておくと、ノートブック上でニックネームを書くだけでそのAPIキーを呼び出せるようになるのだ。
これによって、うっかり他人に自分のAPIキーを見せてしまうリスクが大幅に減る。

上で紹介したGPT-4を動かすための当ブログオリジナルのノートブックでも、OpenAIのAPIキーを「openai_api」という名前で呼び出しているので、「openai_api」と名付けて自分のAPIキーを登録しておいて欲しい。

Google Colabの画面左側のメニューにある鍵のマークのアイコンをクリックすると、APIキーを登録するための画面が出てくるはずだ。

また、APIキーの使用量が予想を超えて、多額の請求が来てしまうリスクが怖い人は、OpenAIのAPIキーを閲覧するページにある「Limits」というメニューから、1ヶ月の最大予算、メール通知をする閾値をそれぞれ設定できるので、確認しておこう。

私の場合、月額20ドルのサブスクリプションより安く使いたいので、使用量が20ドルに達したら通知メールが来るように設定してある。

GPT-4を動かすオリジナルGoogle Colabノートの使い方

APIキーが登録できたら、早速使ってみることができる。
先ほども紹介した以下のGoogle Colabノートブックにアクセスして、上から順にコードブロックを実行していってほしい。

「3.会話インターフェース」のコードブロックを実行すると、以下のようなテキストボックスと「送信」ボタンが表示されるはずだ。

ここに、実際に聞いてみたい質問を入力して、「送信」ボタンをクリックする。
少し時間がかかるが、待っていると返答が自動的に表示されるはずだ。

自分で打った文字はブルーで、ChatGPTの回答はグリーンで表示されるようになっている。

このまま会話を続けたい場合、もう一度テキストボックスに質問を打ち込み、「送信」ボタンを押せば、会話を続けることができる。

会話が終わったら、このチャット履歴をエクスポートして、Googleドライブにテキスト形式で保存することもできるようになっている。

「4.メッセージ履歴の保存」のコードブロックを実行すると、Googleドライブのマイドライブ直下の「chat_history」フォルダに、「現在時刻_chat_history.txt」というファイルを保存する。
フォルダを指定しているコードを少し変更すれば、自分の好きなフォルダに保存することなども可能だ。

通常はプログラミングの知識がないと使うのは難しいGPT-4のAPIを、非常に簡単に使えるので、ぜひ活用してほしい。
Googleのサービス上で動作しており、OpenAIのAPI以外には外部にデータを送信していないし、OpenAI側でチャット履歴がトレーニングに利用されることもないため、ビジネスパーソンでも積極的に利用できるのではないだろうか(もちろん、利用は自己責任で)。

GPT-4 APIをチャットUI化するPythonコードの解説

ここからは、GPT-4 APIをGoogle ColabノートブックでチャットUI風に利用するこのオリジナルノートがどのように動作しているかを解説していく。
Pythonの知識がない人や、興味がない人は、特に読む必要はない。

それぞれ、オリジナルノートブックの見出しの順番で解説していく。

Google Colabノートブックの内容は、適宜より使いやすいように書き換えているため、この記事にテキストとして書いてあるコードチャンクは古い内容である可能性があります。最新版はGoogle Colabをリンクからご覧ください。

必要なライブラリのインポート

openaiライブラリはAPIの呼び出しなどに用いるライブラリ。

テキストボックスにユーザーがテキストを打ち込むことで動作する(簡易的な)チャット風のインターフェースを実現するために、Jupyterノートブック上で、インタラクティブなHTMLウィジェットを動かせるipywidgetsを利用している。

また、ユーザーによる質問と、GPT-4の回答の出力結果を、ブルー・グリーンなど色分けしてみやすくするために、IPython.displayモジュールからHTMLなどを利用している。

google.colabは、APIキーをColabに登録しておいて呼び出すことなどに用いる。

import openai
import ipywidgets as widgets
from IPython.display import display, clear_output
from IPython.display import HTML
from google.colab import userdata

OpenAI APIキーの設定

OpenAIのサービスを使用するためには、APIキーが必要となる。
以下のコードは、Google Colaboratoryに事前に登録されている秘密鍵の中から、「openai_api」と名付けられたキーを呼び出している。

最近導入されたGoogle Colabの新機能だが、Google Colabのノートブックを公開した際にうっかりAPIキーが公開されてしまうリスクなどを大幅に減らすことができ、かなり便利だ。

# OpenAI APIキーの設定
openai.api_key = userdata.get('openai_api')

チャットインターフェースの作成

次に、GPT-4モデルを呼び出す際のシステムプロンプトを設定し、またメッセージの履歴を保持するリストを作成する。

# 初期のシステムプロンプトと過去のメッセージを保存するリスト
system_prompt = "You are an helpful assistant."
past_messages = [{"role": "system", "content": system_prompt}]

ウィジェットとして、ユーザーからの入力を受け取るためのテキストボックスと、送信ボタン、出力を表示するためのエリアを作成する。

# ユーザー入力ウィジェットの作成
input_box = widgets.Textarea(description='あなた:', rows=10)
send_button = widgets.Button(description='送信')
# 出力エリアの作成
output_area = widgets.Output()

ユーザーが入力した内容を取得し、それをAPIリクエストに含めてOpenAIに送信する関数を定義する。

# ユーザーからの入力を受け取ってAPIリクエストを実行する関数
def send_to_chatbot(button):
    user_input = input_box.value
    global past_messages
    past_messages.append({"role": "user", "content": user_input})

    # APIにリクエストを送信し、レスポンスを得る
    try:
        response = openai.ChatCompletion.create(
            model="gpt-4",
            messages=past_messages  # 過去のメッセージを含むリストを渡す
        )
        # APIから得られたレスポンスメッセージを過去のメッセージに追加
        if response['choices'][0]['message']['content']:
            past_messages.append(response['choices'][0]['message'])

    except Exception as e:
        with output_area:
            clear_output()
            print(f"エラーが発生しました: {e}")
        return

    # アウトプットエリアにメッセージを表示
    with output_area:
        clear_output()
        for message in past_messages:
            role = 'あなた' if message['role'] == 'user' else 'アシスタント'
            color = 'blue' if message['role'] == 'user' else 'green'
            # テキスト内の改行を保持するためにwhite-spaceスタイルを使用
            display(HTML(f"<span style='color: {color}; white-space: pre-wrap;'>{role}: {message['content']}</span><br><br>"))

    # ユーザーの入力ボックスをクリア
    input_box.value = ''

送信ボタンが押されたときにこの関数を呼び出すイベントハンドラを設定し、ウィジェット(テキストボックス、送信ボタン、アウトプットエリア)を全て表示すると、簡易的なチャットインターフェースが実現できる。

Google ColabのようなJupyterノートブック上でインタラクティブなアプリが作れるので、Pythonの知識がない人とちょっとしたアプリを共有する場合などに何かと便利だ。

# ボタンが押された際に上記関数を呼び出すイベントハンドラの設定
send_button.on_click(send_to_chatbot)

# ウィジェットの表示
display(widgets.HBox([input_box, send_button]), output_area)

メッセージ履歴の保存

メッセージ履歴を一括でテキストファイルに保存できると、後で他のドキュメントへのコピペなどもスムーズにできるので便利だ。

メッセージ履歴をテキストファイルに保存する関数 save_messages_to_text を定義する。

ファイル名をいちいち設定しなくても良いように、現在時刻がファイル名の冒頭に自動的に入るように設定してある。

import os
import json
from datetime import datetime

# メッセージをテキストファイルに書き込む関数
def save_messages_to_text(messages, directory, filename):
    # ファイルの完全なパスを生成
    filepath = os.path.join(directory, filename)

    # 指定されたディレクトリが存在しない場合は作成
    if not os.path.exists(directory):
        os.makedirs(directory)

    with open(filepath, 'w', encoding='utf-8') as file:
        for message in messages:
            line = f"{message['role']}: {message['content']}\n\n"
            file.write(line)

    print(f"メッセージは '{filepath}' に保存されました。")

# 現在時刻の取得
current_time = datetime.now().strftime('%Y%m%d_%H%M%S')

# 保存するディレクトリとファイル名を指定
save_directory = '/content/drive/MyDrive/chat_history'
filename = f"{current_time}_chat_history.txt"

# メッセージをテキストファイルに保存
save_messages_to_text(past_messages, save_directory, filename)



Make a comment

*
*
* (公開されません)