はじめに
この記事では、GPT-3を用いて、ChatGPT風のCLI(コマンドラインインターフェース)ツールを作る方法を解説します。
前提として、Pythonの「openai」を用いますので、記事を読み進める前に、OpenAIのAPIのアカウントを作成しておく必要があります。
ChatGPTとは何か知りたい方や、アカウント作成がお済みでない方は、以下の記事もお読みください。
【初心者向け】ChatGPTとは何か アカウント作成から使い方まで解説!
GPT-3を使うための準備
まずは以下のURLより、API KEYを発行します。
https://beta.openai.com/account/api-keys
「+Create new secret key」よりAPI Keyを発行します。発行したAPI Keyは保管しておいてください。
openaiのインストール
続いて、「openai」や「GPT-3」を利用するためにpipコマンドでopenaiをインストールします。
pip install openai
docoptのインストール
今回のプログラムでは、コマンドラインツールを作るために、docoptをインストールします。
docoptとは、Python用のコマンドライン引数の解析ライブラリです。
docoptを使用することで、Pythonプログラムを実行するための引数やオプションを定義し、Pythonプログラムの使用方法を自動的に生成することができます。
インストールは以下の方法でdocoptをインストールします。
pip install docopt
docopt を用いたサンプルプログラム
例えば、次のようなPythonプログラム「chatai.py」を作成します。
from docopt import docopt
__doc__ = """
Usage:
chatai.py [--version] [--help]
chatai.py --chat
Options:
-h --help ヘルプを表示する。
--version バージョンを表示する。
"""
args = docopt(__doc__)
このプログラムを以下の方法でターミナル等で実行するとします。
python chatai.py aaa
以下のような出力を表示させることができます。
出力結果
Usage:
chatai.py [--version] [--help]
chatai.py --chat
Options:
-h --help ヘルプを表示する。
--version バージョンを表示する。
ChatGPT風のコマンドラインツール「AIChat」のコードと解説
では、ここからChatGPT風のコマンドラインツールを作成します。
コード全体像は以下の通りです。ファイル名は任意で問題ありませんがこの記事では「chatai.py」とします。
import openai
from docopt import docopt
class AIChat:
def __init__(self):
# ※冒頭で作成したopenai の APIキーを設定してください
openai.api_key = '<YOUR API KEY>'
def response(self, user_input):
# openai の GPT-3 モデルを使って、応答を生成する
response = openai.Completion.create(
engine="text-davinci-002", # text-davinci-003 を指定した方がより自然な文章が生成されます
prompt=user_input,
max_tokens=1024,
temperature=0.5, # 生成する応答の多様性
)
# 応答のテキスト部分を取り出して返す
return response['choices'][0]['text']
def main():
__doc__ = """
Usage:
chatai.py [--version] [--help]
chatai.py --chat
Options:
-h --help ヘルプを表示する。
--version バージョンを表示する。
"""
args = docopt(__doc__)
# print(args)
if args['--version']:
print('AIChat 1.0')
return
if args['--chat']:
# AIChat のインスタンスを作成する
chatai = AIChat()
print('>> AIChat: こんにちは、私はchataiです。')
while True:
# ユーザーからの入力を受け取る
user_input = input('>> User: ')
# ユーザーからの入力が「終了」だった場合にプログラムを終了する
if user_input == '終了':
break
# chataiからの応答を取得する
response = chatai.response(user_input)
print('>> AIChat: ' + response)
print('>> AIChat: いつでもお話ししてくださいね。')
if __name__ == '__main__':
main()
まず「openai」ライブラリを使用して、GPT-3モデルを使い、ユーザーの入力に対して応答を生成するようにしています。
主に根幹部分は「AIChat」クラス内の「response」メソッド内のコードになります。
def response(self, user_input):
# openai の GPT-3 モデルを使って、応答を生成する
response = openai.Completion.create(
engine="text-davinci-002",
prompt=user_input,
max_tokens=1024,
temperature=0.5,
)
「openai.Completion.create」メソッドを使用して、応答を生成する際に、「engine」引数で使用するエンジンを指定しています。
ここでは、「text-davinci-002」と指定しているため、このプログラムでは「Davinci」というエンジンが使用されます。「text-davinci-002」とは、OpenAIが提供する「GPT-3」を使用した自然言語処理のためのエンジンの名称です。「text-davinci-002」以外にも「text-davinci-003」もあり、「text-davinci-003」 は、「text-davinci-002」同様、OpenAIのGPT-3 ベースのモデルで、高い自然言語処理能力を持っており、自然な文章生成が可能です。
加えて、text-davinci-003 は、大規模な文章生成タスクに特に適しているため、より高い生成が可能です。興味がある方は、公式ドキュメントなどをご参考ください。
また、「prompt」引数には、ユーザーからの入力が指定されます。例えば、このプログラムを実行したユーザーが「AIとは何か?」と入力した場合、その値がuser_inputとして格納され「prompt」の引数として渡されます。
「max_tokens」引数では、生成する応答の最大トークン数を指定します。「temperature」引数は、生成する応答の多様性を指定します。この引数には、0以上の値を指定することができます。この引数に指定される値が大きいほど、生成する応答は多様性が高くなります。一方で、値が小さいほど、生成する応答は多様性が低くなります。
最後に、上記のコードの応答結果を「response」変数に保存し、それを返します。
ChatGPT風のコマンドラインツール「AIChat」を動作させてみよう
それでは、実際に動作させてみます。
ターミナル等で、以下のコマンドを実行してください。
実行すると以下のような出力になります。ここでは、「AIとはなんでしょうか?」と質問しています。
上記の質問に対して、「人工知能(Artificial Intelligence、AI)とは、コンピュータに人間ができることをさせる技術のことです。」という出力を生成しています。
なお、「text-davinci-003」で試した場合、以下の文章が生成されました。
AIとは、人工知能(Artificial Intelligence)の略称です。AIは、コンピュータが持つ決定プロセスを通じて、人間のような仕事を行えるようにする技術です。人間が考えられないような高度な分析や決定を行うことができるため、今日では我々の生活に多くの機能をもたらしています。
まとめ
この記事では、PythonでChatGPT風のコマンドラインツールを作る方法を解説しました。
是非、本家の「ChatGPT」も試してみてください。
関連:【初心者向け】OpenAI API とは?使い方とPythonのサンプルコードを用いて解説!
AIスキルを効率よく身につけるには
AIスキルを効率よく身につけるためには、AI基礎からAIを活用したWebアプリ開発まで、体系的に学べる動画コンテンツをもとに学習でき、いつでも好きな時間に質問し放題の環境で学ぶことが大切です。
AI Academy Bootcampなら、6ヶ月35,000円にてチャットで質問し放題の環境で、機械学習やデータ分析が学べるサービスを提供しております。
数十名在籍しているデータサイエンティストや機械学習エンジニアに質問し放題の環境でデータ分析、統計、機械学習、SQL等が学べます。AI人材に必要なスキルを効率よく体系的に身に付けたい方は是非ご検討ください。