はじめに
この記事は、提供が開始されたばかりの「ChatGPT API」を、早速 Node.js で試してみたという話です。
ChatGPT API の提供が始まった話は、「Introducing ChatGPT and Whisper APIs」という公式の記事を、今朝方見かけて知りました。
API の利用料金
Pricing のページ を見ると、ChatGPT API(gpt-3.5-turbo)の料金は、「$0.002 / 1K tokens」となっているようです。
公式の技術情報について
今回は Node.js を使って進めたのですが、その際に参照した公式の情報についても書いてみます。
Node.js用のサンプルプログラム
まず、OpenAI公式の API Reference で、Node.js用のサンプルを見る方法を掲載します。
- 手順
- OpenAI公式の API Reference の「Create chat completion Beta」という項目へ移動
- 画面右にある「Example request」と書かれた部分のプルダウンメニューから、「node.js」を選択
- 【このリンクで直接開けます】 ⇒ https://platform.openai.com/docs/api-reference/chat/create?lang=node.js )
以下に、Node.js用のサンプルを表示させた時の様子と、取得できるプログラムの内容を掲載します。
const { Configuration, OpenAIApi } = require("openai");
const configuration = new Configuration({
apiKey: process.env.OPENAI_API_KEY,
});
const openai = new OpenAIApi(configuration);
const completion = await openai.createChatCompletion({
model: "gpt-3.5-turbo",
messages: [{role: "user", content: "Hello world"}],
});
console.log(completion.data.choices[0].message);
実際に実行してみる
それでは公式サンプルをもとに、実際に Node.js で処理を実行してみます。
前提
この後の手順を進めた際の前提を記載します。
- OpenAI のアカウント作成や APIキー取得は実施済み
- OpenAI の APIキーが利用可能な状態(有償のプランで利用/無料枠の残りがある状態)
- Node.js が利用できる状態
ちなみに、APIキーの取得・確認方法を、昨年 12月に書いた記事の中で書いていますので、よろしければご参照ください。
処理の内容
今回用いた Node.js のプログラムは、以下の通りです。内容は、ほとんど公式サンプルと同じです。
const { Configuration, OpenAIApi } = require("openai");
const configuration = new Configuration({
apiKey: process.env.OPENAI_API_KEY,
});
const openai = new OpenAIApi(configuration);
(async () => {
const completion = await openai.createChatCompletion({
model: "gpt-3.5-turbo",
messages: [{ role: "user", content: "ChatGPT について教えて" }],
});
console.log(completion.data.choices[0].message);
})();
入力文は、サンプルにあった「Hello world」ではなく「ChatGPT について教えて」という内容にしてみました。
処理実行時の補足
上記を実行する前に npm i openai
を実行して、パッケージをインストールしています。また、APIキーの設定では、とりあえずのお試しということで、Mac のコマンドを使った一時的な環境変数の設定を行いました。具体的には、ターミナルで export OPENAI_API_KEY=【OpenAI の APIキー】
というコマンドを実行しておいてから、Node.js のプログラムを nodeコマンドで実行しました。
実行結果
実行結果は以下のとおりです。ChatGPT に関する説明を、返答として得ることができました。
なお、公式サンプルの入力例も試したので、合わせてその結果ものせておきます。
「text-davinci-003」を試した時との違い
昨年 12月に書いた記事で「text-davinci-003」を試した時との違いを少し書いておきます。
大きな違いの 1つは、プログラム中のデータ送信部分で「role」という内容が含まれているところです。その近くの行だけ、以下に載せてみます。
const response = await openai.createCompletion({
model: "text-davinci-003",
prompt: "Chat GPTについて教えて。",
...
const completion = await openai.createChatCompletion({
model: "gpt-3.5-turbo",
messages: [{ role: "user", content: "ChatGPT について教えて" }],
...
この role について、OpenAI公式の API Reference の説明(以下の画像の部分)を見てみると、「system、user、assistant」の何れかになるようです。
そして、その 3種類の role は、以下の意味になるようです。
- system: 「ChatGPT にどのような対応をしてほしいか」などの設定を記載
- user: ユーザー側の入力
- assistant: ChatGPT の返答
ちなみに、上の画像では messages の中に「role が system、user、assistant、user となっている 4つのオブジェクト」がありますが、2つ目(user)と 3つ目(assistant)は、過去のやりとりの履歴を送っているようです。
これにより、ChatGPT の返答が、過去のやりとりの内容も加味したものになるようです(詳細は、まだ確認中...)。
おわりに
提供が始まったばかりの ChatGPT API を、Node.js で利用して、簡単なやりとりを行うことができました。
まだ細かい仕様などは確認できてないので、そのあたりは今後見ていければと思います。
【追記】 余談: 別の仕組みと組み合わせてみた話
【追記1】 LINE Bot への組み込み
その後、ChatGPT とのやりとりを、LINEアプリ上で行えるものも試しに作ってみました。
【追記2】 特定のキャラっぽいふるまいをさせる
「role の system を使って、特定のキャラっぽいふるまいをさせる」という話を見かけて、それも試してみました。
【追記3】 リアルタイム音声認識との組み合わせ(VOSK を利用)
過去に記事を書いたこともある、リアルタイム音声認識ができる「VOSK」と組み合わせて、入力を音声で行えるようにしてみました。
【追記4】 ブラウザ上での音声対話(音声認識と音声合成を p5.speech で実装)
ChatGPT API をライブラリを使わず、Fetch API から利用するようにして、ブラウザから使ってみました。
さらに、その仕組みに音声認識・音声合成の両方を足して、ChatGPT と音声対話をする仕組みのテストをやってみました。
###【追記5】 Discord Bot への組み込み
Python を使った事例
今回の記事では Node.js を利用しましたが、Python でも利用可能です。Python が使われている事例の記事のリンクを掲載しておきます。
●ChatGPT API の使い方|npaka|note
https://note.com/npaka/n/n0dd2b226e8ae
●ChatGPT APIを使ってAIキャラクターを作ってみる! - Qiita
https://qiita.com/sakasegawa/items/db2cff79bd14faf2c8e0