08: さっそくPyCharmでAIチャットボットを実装してみよう

前回の続きです。

OpenAIのAPIの無料枠について

OpenAIの提供しているAPIを使ってGPTとチャットできるアプリを作ります。

OpenAIのアカウントを作成してしばらくはAPIの無料枠がありますので、すんなりプログラムを実行できます。

しかし、無料枠が終わってしまったという場合はクレジットカード登録が必要な場合があります。

その場合は下記URLにアクセスし、 Payment methods からクレジットカードを登録してみてください。

Billing overview – OpenAI API

なお、今回使うGPTモデル「gpt-3.5-turbo」は非常に安価なので本シリーズで扱う程度の使用量なら多くても数十円、という価格になると思います。

さっそく AI (GPT) と遊ぶプログラムを実装してみよう

Pythonで何ができるかを早速味わっていただきたいと思います。

今回はAIと遊べるプログラムを作ってみましょう。

まず初めにやっていただきたいのは、このOpenAIのAPIキーの取得です。

APIキーとは、簡単に説明するとプログラム間を繋ぐ橋渡しのための鍵です。詳しくは後述します。

多くの方がChatGPTを既に使えると言う状態だと思いますが、もしChatGTPのアカウントがないという場合は、openai.comにアクセスし、アカウントを作成してください。

アカウントを作成し、ログインしているという前提で話を進めていきます。

下記のリンクにアクセスし、Create new secret key をクリックし、

API keys – OpenAI API

任意の名前を付けます。

これでCreate secret key をクリックするとAPIキーを表す文字列が出てきます。

これをコピーし、メモ帳などに貼り付けておいてください。

なお、このAPIキーは他人に絶対知られてはいけません。

もし他人に知られてしまうと、あなたのクレジットカード番号と暗証番号が盗まるようなものなので絶対に漏らしてはいけません。

次にさきほど作ったfirst_pythonというプロジェクトを開きます。

そしてmain.pyの中にAIと通信できるプログラムを書いてきます。

まずはPyCharmのターミナルを開いて、OpenAIのAPIと通信するためのライブラリをインストールします。

ライブラリというのはブラウザの拡張機能のようなもので、プログラムに機能を追加するものです。

次のように入力します。

pip install openai

何か文字が表示されて、最後にSuccessfullyと表示されれば成功です。

次にmain.pyに

from openai import OpenAI

と記述します。

これから書いていくコードをそっくりそのまま丸写ししていただければ、AIと遊ぶアプリが完成します。

なお、Pythonでは大文字小文字が区別されます。間違えるとエラーになってしまいます。間違えないよう入力しましょう。

途中でよくわからないことがいろいろ出てきますが、これは後のレクチャーで解説していきます。

まずは下記のコードをそのまま入力しくてさい。messages = []の[]は@とけの隣のキーで入力できます。

from openai import OpenAI

client = OpenAI(api_key="あなたのAPIキー")
print("AIアシスタントとチャットを始めます。チャットを終了させる場合は exit() と入力してください。")

# チャットの履歴を保存するリスト
messages = []

while True:
    # プロンプトを入力する
    user_prompt = input('あなた: ')

    if user_prompt == 'exit()':
        break

「あなたのAPIキー」の部分はさきほど作ったAPIキーをコピーペーストします。いったんここまで入力できたら実行します。

すると、最初に説明が表示されて、”あなた:”の後にプロンプトを入力します。

まずhelloと入力してみます。

もう一度入力が促されます。

exit()

と入力するとプロセスは終了コード 0 で修了しました、と表示されます。

続いて、以下のコードでAIとチャットできるようにしましょう。AIからの返答はこのresponse という変数(後述)の中に格納されます。

from openai import OpenAI

client = OpenAI(api_key="あなたのAPIキー")
print("AIアシスタントとチャットを始めます。チャットを終了させる場合は exit() と入力してください。")

# チャットの履歴を保存するリスト
messages = []

while True:
    # プロンプトを入力する
    user_prompt = input('あなた: ')

    if user_prompt == 'exit()':
        break

    # チャット履歴にプロンプトを追加
    messages.append({"role": "user", "content": user_prompt})

    # OpenAI APIを使ってAIアシスタントに返答させる
    response = client.chat.completions.create(model="gpt-3.5-turbo", messages=messages)

    print(response)

これで実行してみます。

では、ひとまずプロンプトはHelloと入力してみます。そうすると長いよくわからない文字列が表示されます。

これがAIの返答の本文です。

どんなモデルを使いましたよなどが表示されています。そしてcontent:の部分に、AIのメッセージとしての返答が書かれています。

"content:"

この部分でAIは私の入力に対して、”Hello! How can I assist you today?”と返答しているわけです。

ただ、このターミナルの黒い画面にこれらを表示してもわけがわかりませんので、AIの返信だけを抜き出したいと思います。

content = respone.choices[0].messageprint("AIアシスタント:", content)

コード全体は以下のようになります。

from openai import OpenAI

client = OpenAI(api_key="あなたのAPIキー")
print("AIアシスタントとチャットを始めます。チャットを終了させる場合は exit() と入力してください。")

# チャットの履歴を保存するリスト
messages = []

while True:
    # プロンプトを入力する
    user_prompt = input('あなた: ')

    if user_prompt == 'exit()':
        break

    # チャット履歴にプロンプトを追加
    messages.append({"role": "user", "content": user_prompt})

    # OpenAI APIを使ってAIアシスタントに返答させる
    response = client.chat.completions.create(model="gpt-3.5-turbo", messages=messages)

    content = response.choices[0].message

    # 返答を表示する
    print("AIアシスタント:", content)

このプログラムの意味は後で解説します。これで実行してみましょう。

プロンプトにhelloと入力しますと、このように返ってきました。

では次に good bye と入力してみます。

上記のような返答が帰ってきました。これでも一応返答は得られるようになったんですが、まだ文脈を理解するという段階には至っていません。次はそのためのコードを末尾に付け加えていきます。

messages.append({"role": "assistant", "content": content})

コード全体は以下のようにします。

from openai import OpenAI

client = OpenAI(api_key="あなたのAPIキー")
print("AIアシスタントとチャットを始めます。チャットを終了させる場合は exit() と入力してください。")

# チャットの履歴を保存するリスト
messages = []

while True:
    # プロンプトを入力する
    user_prompt = input('あなた: ')

    if user_prompt == 'exit()':
        break

    # チャット履歴にプロンプトを追加
    messages.append({"role": "user", "content": user_prompt})

    # OpenAI APIを使ってAIアシスタントに返答させる
    response = client.chat.completions.create(model="gpt-3.5-turbo", messages=messages)

    content = response.choices[0].message

    # 返答を表示する
    print("AIアシスタント:", content)

    # チャット履歴に返答を追加
    messages.append({"role": "assistant", "content": content})

このようにチャットの履歴に追加するとAIが文脈を理解できるようになります。

このようにAIとの会話をどんどん追加していくプログラムにしていきます。これで実行してみましょう。それではちょっと違うことを入力します。

“Pythonのリストの内包表記のサンプルコードをひとつ生成してください。”

このように入力します。するとこんなふうに返答が返ってきます。

AIの答えはこちらですね。そして次は辞書と入力してみます。

ちゃんとPythonの辞書について答えがかえってきます。「次は辞書」だけという指示だけで期待する答えが得られました。AIが文脈をちゃんと理解しているということです。

このような応答はChatGPTとやりとりすることと同じです。ChatGTPもちゃんと文脈理解してくれますね。それと同じです。

いかがでしたでしょうか?

こんなふうに少しプログラミングするだけでAIと遊べるアプリを作ることができました。

今回コースで作るアプリはこんな単純なものではなくて、もう少し高度なものですが基本的な部分は同じです。

このようにAIにプロンプトを投げて返答させて、それを表示する。

最終的にはそのやりとりをExcelに出力すると言う流れになります。

非常に簡単にAIとやりとりできますが、開発元のOpenAIが提供している「ライブラリ」という拡張機能が非常に使いやすいためです。そしてPythonはAIととても相性がいいので、プログラミングでAIを扱おうと思うとPythonが最有力候補になってきます。

これでこのAIと遊ぶプログラムはひとまず終了させたいと思います。

次節からはプログラムで使ったコードの解説をしていきます。

まずは基礎文法ということで文字列とかコメントの使い方とか、波括弧の辞書の使い方、Trueやifの使い方をコースの中で解説していきます。そして基礎文法が終わった後、もう一回チャットアプリを開発する流れになります。

今回はAIと遊べるアプリを開発しました。

【補足】: 正常にチャットできない場合

前回のコードを写経し実行してもOpenAI側の問題でチャットできずエラーが表示されることがあります。具体的には以下のように Error code: 500 になっていたらOpenAIのサーバー側のエラーです。しばらく待ってから試してみてください。

サーバーの稼働状況は以下のリンクで確認できます。

OpenAI Status

以下のようにオレンジ色になっていたらサーバー側に問題が発生していることを表しています。この場合はしばらく待ってから再度試してみてください。