OpenAI API を TypeScript で叩いてみた

はじめに

表題の通り試しに触ってみたが、検索して出てきた記事では書き方が古いものが多かったので現時点での実装を書いておく。

使用したのは以下のライブラリで、バージョンは v4.24.2 を使用した。

GitHub - openai/openai-node: The official Node.js / Typescript library for the OpenAI API
The official Node.js / Typescript library for the OpenAI API - openai/openai-node
GitHub - openai/openai-node: The official Node.js / Typescript library for the OpenAI API favicon github.com
GitHub - openai/openai-node: The official Node.js / Typescript library for the OpenAI API

v3 から v4 へのマイグレーションガイドはこちら。メソッド自体やその使い方に変更があるので、新しいバージョンを利用する場合はこちらを参照すればいいと思う。

github.com
github.com favicon github.com

サンプルコード

main.ts
import OpenAI from 'openai';

const openai = new OpenAI({
  apiKey: process.env.OPENAI_API_KEY
});

async function main() {
  try {
    const stream = await openai.chat.completions.create({
      model: 'gpt-3.5-turbo',
      stream: true,
      // prompt: "TypeScript で Hello World を書いてください。"
      messages: [
        {
          role: 'user',
          content: 'TypeScript で Hello World を書いてください。'
        }
      ]
    });

    for await (const chunk of stream) {
      process.stdout.write(chunk.choices[0].delta?.content || '');
    }
  } catch (error) {
    throw new Error(error as string);
  }
}

main().catch((e) => console.error(e));

上記のコードを保存して実行すると以下のような結果が得られる。 パラメータの model は好きなものを選ぶと良い。1

$ ts-node ./src/main.ts

以下は、TypeScriptでHello Worldを表示するサンプルコードです。

\`\`\`
const message: string = "Hello, World!";
console.log(message);
\`\`\`

これを、`.ts`拡張子のファイルに保存し、TypeScriptコンパイラでコンパイルした後、JavaScriptファイルとして実行すると、"Hello, World!"というメッセージが表示されます。%

もし 429 エラーとなる場合は、支払い方法などを設定できていない可能性があるので、事前に設定してから API キーを発行しておく必要がある。参考にした記事をいくつか貼っておく。

help.openai.com
help.openai.com favicon help.openai.com
OpenAI APIのエラー(openai.error.RateLimitError)について - Qiita
エラー発生状況OpenAI APIのアカウントを作成してAPIキーを発行し、PythonでChatGPT APIを使おうとしたときに以下のエラーが発生しました。 File "/usr/local/…
OpenAI APIのエラー(openai.error.RateLimitError)について - Qiita favicon qiita.com
OpenAI APIのエラー(openai.error.RateLimitError)について - Qiita
OpenAIでRateLimitErrorが出たときの対応方法 日本語訳
OpenAIでRateLimitErrorが出たときの対応方法 日本語訳 favicon zenn.dev
OpenAIでRateLimitErrorが出たときの対応方法 日本語訳

Footnotes

  1. モデル毎に金額も変わってくるので注意 - ref. Pricing