ChatGPTの APIの概要と使い方について解説して いきたいと思います。先日オープンAIからその ChatGPTのAPIが公開されました。APIというのは簡単に言うとあるソフトウェアが別のプログラム上でも実行できるようになった仕組みのことを指しています。
例えば今までだとWebブラウザ からしかChatjptを使ってないという人が多かったと思うんですけども、今回 APIが公開されたことでPythonのコードを実行することでChatGPTを使用することができます。
なので Pythonで何かのサービスを作りたいなというふうに思った時に、このAPIを 使うことで簡単にChatGPTを組み込むことができます。この記事ではChatGPTのAPIの概要や使い方について解説していきたいと思います。
最初にChatjptのAPIの概要について説明していきます。
ChatGptのAPIの料金
重量課金制になっていまして、使った分だけお金がかかるという形式です。入力したトークンと ChatGPTから帰ってきたトークンの合計値に対して課金がされます。
1000トークンあたり約 0.002ドルということで、日本円で約 0.27円になります。
トークンて何だろう?と思う人もいると思うんですけども、例えば英語でChatGPT is greatといった文章をChatGPTに入力する場合。トークンとしては、このChatとGPTとisとgreatと!という6個のトークンがカウントされます。でAIのモデルではこのような文章を入力したとしてもそのまま扱うことができないので、単語であったり、文字単位に分割して、入力がされます。その時のこの分割された単位がトークンというものになっています。 そのトークンに応じてお金がかかってくるという仕組みになっています。また日本語の場合は英語よりもトークン が多くなりやすいとに言われています。
例えば上の文章は100文字あるんですけれども、この文章をChatGPTに 入力してみたらトークン数は130になりましたでこの他に最初に言ったように ChatGPTの返答にもお金がかかると いう点には注意が必要になります。ただ1000トークンで0.002ドルなので、例えばこういった文章を10回打ったとしても、0.35円しかかからないです。これは現在公開されているGPT3.5のモデルよりも10倍安い価格となっています。
2023年現在時点ではオープンAIで、アカウントを作成すれば18ドルの無料枠が付与されます。この無料枠は使用期限が3ヶ月なので少しの期間しか使えないんですけども、個人利用する場合は 18ドルもあれば 十分です。
また今回公開されたAPIで使用できるものは、GPT3.5ターボ というものになっています。これまでのWebブラウザ経由での回答速度よりも、圧倒的に速くて回答の質としても高いです。オープンAIからAPI経由で送信されたデータに関しては30日間保管された後、削除されるという規約が発表されました。さらにAPI経由で送信されたデータに関しては、学習データとしては使わないと明言しています。つまりAPIで入力した文書に関しては、モデルの更新に使われないということです。これまでプライバシーや機密情報の観点で入力できなかったデータに関しても、ChatGPTを使うリスクが減少してるのかなと思います。
ただ将来的にこの方針は変更されるかもしれないので、大事な情報を扱う場合は 最新の情報をチェックするのが良いかと思います。
APIキーの取得方法
それでは続いて実際の使い方を解説していきたいと思います。OpenAIのOverviewのページの右上のアップグレードというところをクリックします。
このようなBilling overviewというところが出てきます。APIはこのAPIキーズというところで発行できます。
18ドル無料枠で使います。ただ支払い情報を登録してしまうとその18ドルが使えなくなってしまうという話もあるので、登録する際は注意してもらえればと思います。
それでこのAPIキーのところを押してもらいます。 そうすると現在1個APIが登録されているんですけども、Create new scecret keyを押します。そうするとこのAPIのキーが発行されます。これをコピーしてPythonのプログラムコードを書くときに貼り付ける必要があります。注意事項として、このAPIキーはもう二度と見れません。もしこの シークレットキーをなくしてしまったら、もう1回発行してあげて、古い方は破棄するという形になります。
このAPIキーが他の人にバレてしまうと、そのキーを使って、他の人が悪用すれば、請求が発行した人にいってしまいます。絶対 にこのAPIキーは外部に公開しないようにしてください。
APIの簡単な使い方
ちらはですねオープンAIの公式 ページになっています。こちらの方の イントロダクションのところに使い方が 書いてあるんですけども非常に簡単に使えます。最初にまずこのオープンAIという ライブラリーをインポートします。このオープンAIのChatCompletionというところの引数にモデルとメッセージというものを入力してあげます。
このGPT3.5 ターボというのが現在の最新版になっています。このメッセージのところの理解が必要です。このroleとsystemというものとroleとuserとroleとassistant。あとはcontentというものがあります。
これは必ず入力しなきゃいけないもので、roleとしてはこのsystemとuserとassistantという ものがあります。このsystemってのは このassistantの振る舞い方を決めるmessageになっています。今は you are helpful assistantとなっているので、「Chatjptは今何か助けてくれるassistantですよ」と設定していることになります。
例えば「語尾に ニャーをつけて返答してください」と設定すると、ChatGPTとしてニャーをつける返答をしてくれます。
でよくBingChatでも、最初に「私はBingChatです。「何か助けましょうか?」というふうな形で、返してくれ。それは、おそらくこのsystemのところのcontentsの入力文が出力されてる のかなと思います。
そしてuserということで、こちらは私たちが入力する文章になっています。その後に assistantでChatGPT からの返答が入ってきます。
でこうすることによって前の文章を使った返答ができます。でその後ですねまた私たちから where was it playedということで、また入力をしていく形でこのリストの中にこの辞書形をどんどん追加していく形になります。
class ChatGPTAPI:
def __init__(self, system_setting):
self.system = {"role": "system", "content": system_setting}
self.input_list = [self.system]
self.logs = []
def input_message(self, input_text):
self.input_list.append({"role": "user", "content": input_text})
result = openai.ChatCompletion.create(
model="gpt-3.5-turbo", messages=self.input_list
)
self.logs.append(result)
self.input_list.append(
{"role": "assistant", "content": result.choices[0].message.content}
)
print(self.input_list[-1]["content"])
最初にまずオープンAIの ライブラリをインストールしています。
その後にこのChatGPTのAPIと いうクラスを書いてみたんですけれども、先ほどあったようにこのライブラリ使うには引数としてのroleの情報だったり、入力文だったり、ChatGPTからの返答を格納する必要があります。 ちょっと面倒くさいかなと思ったので、このインプットを与えるとそこから入力してくれるので、その返答もその辞書に追加してくれるというクラスを書いてみました。
使い方としてはまずオープンAIのライブラリをインポートしてあげて、このオープンAI.APIキーというところに先ほど取得したAPIキーを入力してください。
api = ChatGPTAPI(system_setting=”あなたは短い文章で、必ず語尾に「にゃー」を付けるアシスタントです。では、会話を開始します。”)
その後このクラスを実行していくと、最初にまずsystemセッティングというところでどのような振る舞いをChatGPTにして欲しいかを指示することができます。
例えば、あなたは「短い文章で、必ず語尾にニャーをつけるassistantで、会話を開始します」という振る舞いを、設定してあげます。
これで実行してあげて、このAPIというクラスのオブジェクトが作られたので、こちらのインプットメッセージに何か会話文を入れてみます。
そうすると、「こんにちはにゃー」と返してくれます。
返答のスピードがめちゃくちゃ早いです。
AI同士で、会話させてみても面白いんじゃないかなと思います。最初にまずこのAPI_1というところに、語尾にニャーをつけるassistantを設定します。
API_2に5にワンをつける assistantを定義してあげます。
最初の文章はこちらで打ってあげて、猫の方に、「こんにちは」と言ってみます。そうすると猫から、「こんにちはにゃー、何か困りごとはありますか」と帰ってきました。この文章を次は犬の方に、入力してみたいと思います。
そうするとその犬の方が、「こんにちはワン。現在私には特にお困り事はありません ワン。ありがとうございますワン」と書いてきました。2人ともassistantだったので、まあしょうが ないんですけども、こんな感じで会話が進みません。
無料枠があるといえ、例えばfor文と かで無限ループを書いてしまうとずっと永続的に課金されてしまうので、そんなことはあまりないと思うんですけども、自分でコードを書く際はぜひ注意してもらえればと思います。