2024-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は有料なのでガンガンやられたら破産してしまう(悲)
※本記事内容の無断転載を禁じます。
ご連絡は以下アドレスまでお願いします★
Wav2Lipのオープンソース版を改造して外部から呼べるAPI化する
Wav2Lipのオープンソース版で静止画の口元のみを動かして喋らせる
【iOS】アプリアイコン・ロゴ画像の作成・設定方法
オープンソースリップシンクエンジンSadTalkerをAPI化してアプリから呼ぶ【2】
オープンソースリップシンクエンジンSadTalkerをAPI化してアプリから呼ぶ【1】
【Xcode】iPhone is not available because it is unpairedの対処法
【Let's Encrypt】Failed authorization procedure 503の対処法
【Debian】古いバージョンでapt updateしたら404 not foundでエラーになる場合
ファイアウォール内部のWindows11 PCにmacOS Sequoiaからリモートデスクトップする
進研ゼミチャレンジタッチをAndroid端末化する
Windows11+WSL2でUbuntuを使う【2】ブリッジ接続+固定IPの設定
VirtualBoxの仮想マシンをWindows起動時に自動起動し終了時に自動サスペンドする
【C/C++】小数点以下の切り捨て・切り上げ・四捨五入
GitLabにHTTPS経由でリポジトリをクローン&読み書きを行う
タスクスケジューラで変更を適用できません。ユーザーアカウントが不明であるか、パスワードが正しくないか、またはユーザーアカウントにタスクを変更する許可がありません。と出た
Intel MacBookAir2020にWindows10→Windows11をインストールする
Linuxでtar.xz形式のファイルを解凍する
Windows11のコマンドプロンプトでテキストをコピーする