2023-02-13


続きです。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は有料なのでガンガンやられたら破産してしまう(悲)

※本記事内容の無断転載を禁じます。

◆2ショットライブチャットBBchatTV!

ザラツキ、おしりニキビ、乾燥するお尻を綺麗なお尻におしり対策ジェル【シアクルスベリージュ】

健康・人権・環境に配慮したサスティナブルな真空断熱ボトル【タイガーボトルサイト】

月間60万本突破!天然成分配合デリケートゾーン用ケアゼリー

抜け毛に効果絶大!500万本売れている!結果にこだわる方へ【ケフトルアミノシャンプー】

女性ホルモンバランスプランナー監修鉄サプリメント「女子のおまもりサプリ 鉄+葉酸」

【株オンライン】10日間無料で全てのサービスが受け取れます!

専門家と共同開発した話題のグリーンゼリー

シミ・しわの悩みに即実感!コア・エイジングケア【エスプライム美容オイル】

【OpenAI Python API】Models/List modelsのサンプル
【Python】配列の要素を順番に取得する
PortForwarderでno hostkey algと言われ接続できない場合
【Linux】iconv/libiconvをソースコードからインストール
【OpenAI Node.js API】Images/Create image variationのサンプル
【OpenAI Node.js API】Models/Retrieve modelのサンプル
【JavaScript/Node.js】配列の要素を順番に取得する
【OpenAI Node.js API】Models/List modelsのサンプル
Node.jsでJSON返却値を[Object]ではなくフル階層で表示する
【Windows10】リモートデスクトップ間のコピー&ペーストができなくなった場合の対処法
Googleスプレッドシートを編集したら自動で更新日時を入れる
Windows版Google Driveが使用中と言われアンインストールできない場合
Googleファミリーリンクで子供の端末の現在地がエラーで取得できない場合
Androidホームで左にスワイプすると出てくるニュース共を一切表示させない方法
【Javascript】JSON配列内にある特定要素の取得法【Node.js】
【Apache】サーバーに同時接続可能なクライアント数を調整する
Googleスプレッドシートで図形をコピーして使いまわすには
OpenAIのNode.js APIを使用し連続で会話する