アプリケーション開発ポータルサイト
ServerNote.NET
カテゴリー【OpenAI/ChatGPTNode.js
OpenAIのNode.js APIを使用し連続で会話する
POSTED BY
2023-06-06

OpenAIのChatGPTを試す【1】

続きです。OpenAIが作成したGPT-3言語モデルにアクセスするAPIが公開されており、トークン数(≒単語数)の従量制課金方式となっている。

https://openai.com/api/pricing/

前回、ChatGPTを試すためのユーザー登録をした時点で、18ドルの無料使用枠が自動で付与されている。ただし期間は3か月のみ。

自分の状態を確認するには、上記URLの右上「LOG IN」でログインすると、

https://platform.openai.com/

へ飛ぶので、右上にある「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」モデルを使用してみる。

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

※本記事は当サイト管理人の個人的な備忘録です。本記事の参照又は付随ソースコード利用後にいかなる損害が発生しても当サイト及び管理人は一切責任を負いません。
※本記事内容の無断転載を禁じます。
【WEBMASTER/管理人】
自営業プログラマーです。お仕事ください!
ご連絡は以下アドレスまでお願いします★

【キーワード検索】