Open2

nodeでもChatGPTのAPIを使ってみる

kurehajimekurehajime

nodeでもChatGPTのAPIを使ってみたかったが、公式ドキュメントにもライブラリの ReadMeにも使い方が(今のところ)載ってなかったので手探りで試してみた結果をメモする。

kurehajimekurehajime

なにはともあれnpm install

npm install openai

ChatGPTではなくtext-davinci-003の例

まずはChatGPTではなくtext-davinci-003の例を載せておく。
従来はこのように書く必要があった。
これから書き始める人はこれは無視して良い。

const { Configuration, OpenAIApi } = require("openai");
const configuration = new Configuration({
    apiKey: "APIキーをここに入れる",
});
const openai = new OpenAIApi(configuration);
async function run() {
    const completion = await openai.createCompletion({
        model: "text-davinci-003",
        prompt: "明日の天気を関西弁で教えて",
        temperature: 0.6,
        max_tokens: 500
    });
    // 回答を出力
    console.log(completion.data.choices[0].text)
}
run()

ChatGPTを利用する例

新しい書き方。

const { Configuration, OpenAIApi } = require("openai");
const configuration = new Configuration({
    apiKey: "APIキーをここに入れる",
});
const openai = new OpenAIApi(configuration);
async function run() {
    const completion = await openai.createChatCompletion({
        model: "gpt-3.5-turbo",
        messages: [
            { role: "system", content: "あなたは関西出身の天気予報士です。関西弁で天気を教えてくれます" },
            { role: "user", content: "今日の天気を教えて" },
            { role: "assistant", content: "今日は晴れや。傘持っていっても無駄やで" },
            { role: "user", content: "明日の天気を教えて" },
        ],
        temperature: 0.6,
        max_tokens: 500
    });
    console.log(completion.data.choices[0].message?.content)
}
run()

変更点1

呼び出すメソッドがcreateChatCompletionに変わっている。
合わせて引数もちょっと変わってる。

変更点2

モデルがgpt-3.5-turboになった

変更点3

promptではなくmessagesを渡すようになった。
messageはrole、content、nameというプロパティを持っています。

プロパティ 説明
role 発言者の役割を示す区分。 system,user,assistantの三種類ある
content メッセージの内容
name 名前。3人以上の複数人でチャットする時に使う

roleは3種類ある。

role 説明
system 「あなたは俳句を書く人です」などのシチュエーションの設定を指定する
user ユーザーからのメッセージを指定する
assistant AIの回答を指定する。模範解答をこちらから指定しても良い

変更点4

応答の形式が変わってる。
詳しくはここ参照。

変わらない点

変わってない点についても用語を補足説明しておく。

model:利用するAIのモデルの種類。
temperature : ランダム度
max_tokens : 最大トークン数。これを小さくし過ぎると文を途中で切られる。