2023-06-06
続きです。OpenAIが作成したGPT-3言語モデルにアクセスするAPIが公開されており、トークン数(≒単語数)の従量制課金方式となっている。
https://openai.com/api/pricing/
前回、ChatGPTを試すためのユーザー登録をした時点で、18ドルの無料使用枠が自動で付与されている。ただし期間は3か月のみ。
自分の状態を確認するには、上記URLの右上「LOG IN」でログインすると、
へ飛ぶので、右上にある「Personal」をクリック→「Manage Account」で、どれくらいAPIで有償枠を使ったか、有効期限はどれくらいかを確認できる。
Free trial usage $0.01 / $18.00 GRANT # CREDIT GRANTED EXPIRES (UTC) Grant 1 $18.00 2023年6月1日
APIキーを取得して環境変数に設定する
APIキーは同じくPersonal→「View API keys」→Create new secret keyで作成可能。これをコピーして、bash系ならexportで環境設定ファイルに保存しておくとよい。
.bashrc例
if [ -f "$HOME/.bash_secures" ]; then . "$HOME/.bash_secures" fi
.bash_secures例
export OPENAI_API_KEY="YOUR OPENAI API KEY"
chmod go-rwx .bash_secures
Node.jsからAPIを呼び出す
https://platform.openai.com/docs/libraries/node-js-library
にドキュメントあり。
nodebrew ls v16.7.0 current: v16.7.0 npm install openai
サンプルプログラム
最も高性能で高価な「Davinci」モデルを使用してみる。
JavaScript | openai_api_sample.js | GitHub Source |
const { Configuration, OpenAIApi } = require("openai"); const configuration = new Configuration({ apiKey: process.env.OPENAI_API_KEY, }); const openai = new OpenAIApi(configuration); (async () => { var prompt = '### 大阪と東京はどれくらい離れていますか?'; var response = await openai.createCompletion({ model: "text-davinci-003", prompt: prompt, temperature: 0.6, max_tokens: 1024, stop: ["###"], }); console.log(response.data.choices); prompt += response.data.choices[0].text + '\n'; prompt += '### 英語とドイツ語でお願いします。'; response = await openai.createCompletion({ model: "text-davinci-003", prompt: prompt, temperature: 0.6, max_tokens: 1024, stop: ["###"], }); console.log(response.data.choices); })();
実行結果
node openai_api_sample.js [ { text: '\n\n大阪と東京の間の距離は約540kmです。', index: 0, logprobs: null, finish_reason: 'stop' } ] [ { text: '\n' + '\n' + 'The distance between Osaka and Tokyo is about 540km.\n' + '\n' + 'Die Entfernung zwischen Osaka und Tokyo betragt etwa 540km.', index: 0, logprobs: null, finish_reason: 'stop' } ]
###で質問文の区切り文字とし引数stopに指定している。
APIは履歴を記憶しないため与える文章にはこれまでの全会話を含めなくてはならない。
よって、最初の質問に返してきた答えをprompt変数に連結し、さらに別の言語で言ってほしい旨をpromptにさらに連結し、全く同じ関数を呼ぶと、これまでの流れを考慮した答えが返ってきているのがわかる。
これを利用したチャットボットを作るなら、会話履歴の管理(サーバー側ファイルかクライアント側の変数か)や全体会話容量制限(最大文字数)などが必要になってくる。(APIは有料なのでガンガンやられたら破産してしまう(悲)
※本記事内容の無断転載を禁じます。
ご連絡は以下アドレスまでお願いします★
さくらインターネットでPython MecabをCGIから使う
さくらインターネットのPHPでAnalytics-G4 APIを使う
インクルードパスの調べ方
【Git】特定ファイルを除外する.gitignore
【Ubuntu/Debian】NVIDIA関係のドライバを自動アップデートさせない
【Python】Spacyを使用して文章から出発地と目的地を抜き出す
HomeBrewでApache2を入れて自動起動つきで動かしPHPモジュールと連携する
macOSに標準付属のApacheを自動起動つきで動かす
HomeBrewでPostgreSQLを入れて自動起動つきで動かす
【Windows10】リモートデスクトップ間のコピー&ペーストができなくなった場合の対処法
【C/C++】小数点以下の切り捨て・切り上げ・四捨五入
Windows版Google Driveが使用中と言われアンインストールできない場合
【Apache】サーバーに同時接続可能なクライアント数を調整する
Windows11+WSL2でUbuntuを使う【2】ブリッジ接続+固定IPの設定
【Linux】iconv/libiconvをソースコードからインストール
Googleファミリーリンクで子供の端末の現在地がエラーで取得できない場合
【ウマ娘】デイリーレースに雨の状態で出走するには
最新版のOpenSSH Serverにしたら公開鍵ログインできなくなった場合