はじめに
こちらは、完走賞ゲットのため小ネタを毎日投稿しようとチャレンジする Advent Calendar 2022 の 24日目の記事です。
今月のアドベントカレンダー用記事で、以下の 3記事で扱った OpenAI の ChatGPT の話です。
- 【KDDI Engineer&Designer】AI にブラウザ用の JavaScript のプログラムをいくつか作ってもらった話 ⇒ OpenAI の ChatGPT で生成されたプログラムの解析も少々 - Qiita
- 【完走賞ゲット-4】続・OpenAI の ChatGPT のネタ:JavaScript の特定の技術仕様を教えてもらう - Qiita
- 【enebular 2022】ChatGPT用ノード「node-red-contrib-simple-chatgpt」を enebular・Node-REDで試したり API を Python から利用してみた話 - Qiita
基本的に、GUIベースで扱ってきたのですが、上記の enebular の記事に書いた内容では API を利用する方法も軽く試しました。
Python版で試す
— you (@youtoy) December 12, 2022
●Libraries - OpenAI API
https://t.co/IevGmxmWLj pic.twitter.com/fCdv1kEAzC
その API を利用したやり方について、Node.js を使ったものを試して過程をメモとして残す、というのが今回の記事の内容です。
ChatGPT を API 経由で利用する
OpenAI の API を利用するためのシークレットキー
OpenAI の API を利用するためにはシークレットキーが必要です。
OpenAI のアカウントのメニュー(※ 画面左上のメニュー)の「View API keys」を選んで、その後のページでキーを生成してください。既にキーを生成済みの方は、ここにキーのリストが表示されます。
公式ライブラリの情報を確認する
公式ライブラリの情報を確認します。
こちら⇒ https://beta.openai.com/docs/libraries/libraries にアクセスすると、Python関連の内容と、Node.js関連の内容を確認することができます。
それでは、Node.js のほうを実際に試してみます。
ChatGPT に聞いてみる(Node.js版)
ここで、ふと、API の使い方を ChatGPT に聞いてみることもできるな、と思って試してみました。
※ こちらにて⇒ https://chat.openai.com/chat
以下が「Chat GPT の API を Node.js で使うためのプログラムを教えて」という内容に対して返ってきた答えです。
読み込むパッケージが違っているような感じがします。それと、プログラムがひとまとめになってないので、プログラムの部分の出力はまとめてもらうような書き方にしてみました。
具体的には、「Chat GPT の API を Node.js で使うためのプログラムを教えて。プログラムはひとまとめにして書いてください。」という内容で、それに対する返答は以下となりました。
今度は、openai 関連のパッケージを使わない方向の話になっている...
上記が意図しない内容のため、「openai - npm を利用する」というのを明示してみることにしました。
以下は「Chat GPT の openai - npm を Node.js で使うためのプログラムを教えて。プログラムはひとまとめにして書いてください。」という内容に対する返答です。
プログラムがひとまとめになってないですが、構文的には使えそうなものが返ってきた気がします。
const openai = require('openai');
openai.apiKey = 'your_api_key';
const prompt = 'Hello, how are you today?';
const model = 'text-davinci-002';
const maxTokens = 128;
openai.completion.create({
prompt,
model,
max_tokens: maxTokens
}, function(error, response) {
if (error) {
console.error(error);
} else {
console.log(response.text);
}
});
ただし、以下の公式ドキュメントの例とは差異があるようです...
(単純に古い情報が元になっていたり等なのか、そもそも、コードの内容が正しいものっぽく見えるだけのものなのかは不明ですが、今回は深追いしないことにします)
const { Configuration, OpenAIApi } = require("openai");
const configuration = new Configuration({
apiKey: process.env.OPENAI_API_KEY,
});
const openai = new OpenAIApi(configuration);
const response = await openai.createCompletion({
model: "text-davinci-003",
prompt: "Say this is a test",
temperature: 0,
max_tokens: 7,
});
公式情報をもとに Node.js で API を使う
それでは、公式ドキュメントの例を使って API を試してみます。
以下が今回試す処理の内容です(※ サンプルに少し手を加えています)。
const { Configuration, OpenAIApi } = require("openai");
const configuration = new Configuration({
apiKey: process.env.OPENAI_API_KEY,
});
const openai = new OpenAIApi(configuration);
(async () => {
const response = await openai.createCompletion({
model: "text-davinci-003",
prompt: "Chat GPTについて教えて。",
temperature: 0,
max_tokens: 100,
});
console.log(response.data.choices[0].text);
})();
上記を実行する前に npm i openai
を実行して、パッケージをインストールしておいてください(※ 既に、Node.js が利用できる環境になっている想定です)。
また、とりあえずのお試しということで、一時的に環境変数にシークレットキーを設定する形で試します。 export OPENAI_API_KEY=【OpenAI のシークレットキー】
も実行してから、上記のプログラムを nodeコマンドで実行しましょう。
実行してみた結果は以下のとおりです。
% node app.js
GPT(Generative Pre-trained Transformer)は、自然言語処理(NLP)タスクを実行するためのオープンソースの自然言語処理モデルです。GPTは、大規模なテキストコーパ
max_tokens: 100
というパラメータ指定があり、出力は途中で途切れていますが、うまく結果を取得できているようです。
API経由で試した内容も GUI上で試してみる
最後に、API経由で行った内容を、ChatGPT のページ上( https://chat.openai.com/chat )でも試しておくことにします。