
ChatGPT API の使い方(Python) と料金を紹介。
2023年3月2日、ついに ChatGPT の API が一般公開されました。今まで最も性能の高いモデルは、GPT3 (text-davinci-003) と呼ばれるものでしたが、これからは、ChatGPT (gpt-3.5-turbo) がAPI 経由で使用できます。同時に、超高性能に人間の言葉を言語に変換できる Whisper API が公開されました。Whisper + ChatGPT を組み合わせることによって、例えば”ゲームやメタバースで人間と NPC が自然言語で会話する"といったことが簡単にできるようになります。これにより、ゲームやメタバースの世界はさらにリアルになり、プレイヤーがより没入感を味わえるようになるでしょう。また、Whisper API を利用することで、他の領域でも革新的なことが実現できます。例えば、教育分野でも生徒とAI教師との間でよりスムーズにコミュニケーションができるようになり、世界のどこにいても、最高の教育が提供できるようになることでしょう。これから私たちの生活はあらゆるところに AI が浸透していくことになると思います。
今回の発表で最もインパクトが大きかったこととして、ChatGPT API の値段がかなり安かったという点があげられます。 今まで、GPT-3 の値段は 1000トークンあたり、約2円 ($0.02) でした。 これが、ChatGPT API では、 1000トークンあたり、約0.2円 ($0.002) になりました。
つまり、最高性能のモデルが、今までの10分の1の価格で使えるようになったのです。これが意味するところは非常に大きいです。 今ままで API の値段が高かったせいで API を導入できなかったような場面でも値段を気にせずにアプリに導入したりすることができるようになります。より素早く ChatGPT があらゆる日常に浸透していくはずです。
ChatGPT API の使い方詳解 (Python)
OpenAI ライブラリのインストール
ChatGPT API の使い方は非常に簡単です。
以下のコマンドをターミナルで実行してください。
$ pip install openai
もし、すでにopenaiをインストールしている場合、今まで使っていた text-davinci-003 を ChatGPT API にアップデートしたい場合には、-U を追加します。
$ pip install -U openai
OpenAI API シークレットキーの入手
次に、OpenAIからシークレットキーを取得します。APIキーは以下のURLから取得できます。
https://platform.openai.com/account/api-keys
"create new secret key" をクリックして、シークレットキーをコピーしておきます。
Python 実装
続いて、実際の Python での実装を見ていきます。今まで違うのは、ChatCompletion というオブジェクトを使うことです。
import openai
openai.api_key = 'OpenAI API シークレットキーを入れます'
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[
{'role': 'user', 'content': 'Hi, ChatGPT'],
temperature=0.0,
)
print(response)
messages と temperature については、後ほど説明します。
実際に上記のプログラムを実行すると、以下の結果が得られます。
{
"choices": [
{
"finish_reason": "stop",
"index": 0,
"message": {
"content": "\n\nHello there! How can I assist you today?",
"role": "assistant"
}
}
],
"created": 1677700539,
"id": "chatcmpl-6pMq3St4ZiUWUJ47xOsgJm3pxJqkb",
"model": "gpt-3.5-turbo-0301",
"object": "chat.completion",
"usage": {
"completion_tokens": 12,
"prompt_tokens": 13,
"total_tokens": 25
}
}
ChatGPT のレスポンスには、response['choices'][0]['message']['content'] からアクセスできます。'usage'フィールドを見ると、どのくらいのトークンを消費したかを見ることができます total_tokens は25なので、0.005 円使ったことになります。つまり、上記のような、非常に短いやり取りなら、200回やっても1円しかかからないということです。日本語の方がトークンを消費しやすいことには注意が必要です。
temperature とは?
上記のコードで指定している、temperatureとはなんでしょうか?
0 ~ 1 の値を指定できます。
temperature=0.0,
これは、生成されるテキストの多様性を調整するためのパラメーターです。具体的には、生成されたテキストが単調でなく、多様性を持ったものになるように調整します。
temperatureが低いと、生成されたテキストはより予測しやすく、より単調になります。一方、temperatureが高いと、生成されたテキストはより多様であり、ランダムな単語や表現が含まれることがあります。
このパラメーターは、生成されるテキストの質を向上させるために調整されます。たとえば、小説や詩を生成する場合、テキストが単調にならないように、適切なtemperatureを使用することが重要です。一方、実用的なアプリケーションでは、より予測可能なテキストが必要な場合があるため、より低いtemperatureを使用できます。
ユーザーに会話をさせるにはどうするか?
続いて、ChatGPT の重要な特徴の、会話を再現するにはどうするかを見ていきます。messages が配列であることに注目してください。
import openai
openai.api_key = 'OpenAI API シークレットキーを入れます'
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[
{"role": "user", "content": "サザエさんの家族構成を教えて。"},
{"role": "assistant",
"content": '''サザエさんの家族構成は以下のとおりです。
- サザエ(主人公):主婦。夫と娘がいる。
- マスオさん(サザエの夫):会社員。
- タラちゃん(サザエとマスオさんの息子):小学生。後に妹が生まれる。
- サザエの父:「フグ田吾作」というペンネームで漫画家をしている。
- サザエの母:専業主婦。主に家事や子育てを担当している。
- 波平さん(サザエの兄):漁師。妻と娘がいる。'''},
{"role": "user", "content": "カツオは?"}
]
)
print(response['choices'][0]['message']['content'])
上記のコードのように、messages に、"role": "user" , "role": "assistant"を繰り返して追加していくことで、会話を再現します。
ちなみに、上記のコードを実行すると、
カツオは、サザエさんの息子でありタラちゃんの兄です。
と帰ってきました。返答は完全に間違っていますが、コンテキストを理解していることがわかります。本編とは関係ないですが、まだ日本語の性能は高くないので、英語で使用することをお勧めします。
system role について
さらに、今回の ChatGPT API には、三つ目のロールとして、systemがあり、事前にChatGPT に指示文を与えることができます。例えば、以下のように使えます。
import openai
openai.api_key = 'OpenAI API シークレットキーを入れます'
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
temperature=0.0,
messages=[
{"role": "system", "content": "あなたは世界最高のシェフです。"},
{"role": "user", "content": "今日の朝ごはんを考えて!"},
]
)
print(response['choices'][0]['message']['content'])
これのレスポンスは、以下のような結果が得られました。
では、朝食にはヘルシーで栄養価の高いオートミールを提供しましょう。オートミールには食物繊維、たんぱく質、ビタミン、ミネラルが豊富に含まれています。以下は、オートミールのトッピングのアイデアです。
- バナナとくるみ
- りんごとシナモン
- ブルーベリーとアーモンド
- マンゴーとココナッツフレーク
- プレーンヨーグルトとはちみつ
また、オートミールには牛乳やアーモンドミルク、ココナッツミルクなどを加えて、よりクリーミーな味わいにすることもできます。朝食には、オレンジジュースやグレープフルーツ、コーヒーや紅茶などのドリンクも合わせて提供すると良いでしょう。
対して、system ロールを外した場合のレスポンスは以下のようになります。
申し訳ありませんが、私は人工知能であり、食事を摂ることができません。しかし、あなたにいくつかのアイデアを提供することができます。例えば、オートミール、卵料理、フルーツ、ヨーグルト、トースト、ベーコン、パンケーキ、ワッフルなどがあります。あなたの好みに合わせて、健康的で栄養価の高い朝食を選んでください。
事前に指示文を与えることが、性能の差を大きく分けることがわかります。
最後に
いかがだったでしょうか? ChatGPT API の一般公開により、これまで考えもしなかったような新しいアプリやサービスが生まれてくる予感がしました。これからも継続的に ChatGPT/AI 関連の情報について発信していきますので、フォロー (@ctgptlb)よろしくお願いします。この革命的なテクノロジーの最前線に立つ機会をお見逃しなく!