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は有料なのでガンガンやられたら破産してしまう(悲)
※本記事内容の無断転載を禁じます。
ご連絡は以下アドレスまでお願いします★
Windowsのデスクトップ画面をそのまま配信するための下準備
WindowsでGPUの状態を確認するには(ASUS系監視ソフトの自動起動を停止する)
CORESERVER v1プランからさくらインターネットスタンダートプランへ引っ越しメモ
さくらインターネットでPython MecabをCGIから使う
さくらインターネットのPHPでAnalytics-G4 APIを使う
インクルードパスの調べ方
【Git】特定ファイルを除外する.gitignore
【Ubuntu/Debian】NVIDIA関係のドライバを自動アップデートさせない
【Python】Spacyを使用して文章から出発地と目的地を抜き出す
Windows11+WSL2でUbuntuを使う【2】ブリッジ接続+固定IPの設定
【Windows10】リモートデスクトップ間のコピー&ペーストができなくなった場合の対処法
【C/C++】小数点以下の切り捨て・切り上げ・四捨五入
Windows版Google Driveが使用中と言われアンインストールできない場合
【Apache】サーバーに同時接続可能なクライアント数を調整する
VirtualBoxの仮想マシンをWindows起動時に自動起動し終了時に自動サスペンドする
Gmailのプロモーションメールをすべて削除する方法
GitLabにHTTPS経由でリポジトリをクローン&読み書きを行う
Googleファミリーリンクで子供の端末の現在地がエラーで取得できない場合