LoginSignup
77
47

More than 1 year has passed since last update.

ChatGPT API(gpt-3.5-turbo)を Node.js から使ってみる(公式リファレンスで参照した情報も記載)

Last updated at Posted at 2023-03-02

はじめに

この記事は、提供が開始されたばかりの「ChatGPT API」を、早速 Node.js で試してみたという話です。

ChatGPT API の提供が始まった話は、「Introducing ChatGPT and Whisper APIs」という公式の記事を、今朝方見かけて知りました。

API の利用料金

Pricing のページ を見ると、ChatGPT API(gpt-3.5-turbo)の料金は、「$0.002 / 1K tokens」となっているようです。
Pricing

公式の技術情報について

今回は Node.js を使って進めたのですが、その際に参照した公式の情報についても書いてみます。

Node.js用のサンプルプログラム

まず、OpenAI公式の API Reference で、Node.js用のサンプルを見る方法を掲載します。

以下に、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」という内容が含まれているところです。その近くの行だけ、以下に載せてみます。

「text-davinci-003」を使った場合
  const response = await openai.createCompletion({
    model: "text-davinci-003",
    prompt: "Chat GPTについて教えて。",
    ...
「gpt-3.5-turbo」を使った場合
  const completion = await openai.createChatCompletion({
    model: "gpt-3.5-turbo",
    messages: [{ role: "user", content: "ChatGPT について教えて" }],
    ...

この role について、OpenAI公式の API Reference の説明(以下の画像の部分)を見てみると、「system、user、assistant」の何れかになるようです。
roleについて

そして、その 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

77
47
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
77
47