Depending on the Time and Situation

時と場合によりけり 〜 日々のアップデートとイノベーションに翻弄され彷徨える IT エンジニアの覚書

OpenAI API を GitHub Codespaces の Node.js から呼び出してみる

概要

[ChatGPT] Open AI API を Node.js x TypeScript で試してみたという面白そうな記事が、DevelopersIO にアップされていました。今回は、これにアレンジを加えて試してみます。

具体的には、セットアップやコーディングの作業をローカルマシンではなく、GitHub Codespaces で行います。

また、OpenAI API キーを GitHub に晒すのが嫌なので、外部から読み込みできない Codespaces の secret に環境変数として置いて、js で読み込めるようにしてみます。

解説動画


www.youtube.com

この記事の目次

GitHub リポジトリ作成

わかりやすい名前で、GitHubリポジトリを作成します。今回は、とりあえず openai_api_node という名前でリポジトリを作成しました。Add a README file や Add .gitignore については、必要であれば、適宜追加してください。(今回は、Add .gitignore のプルダウンのところで、Node を指定し、.gitignore を追加しておきました。一応、README も追加しておきました。)

codespace 作成

作成した GitHub リポジトリの <>Code▼ ボタンをクリックします。Codespaces のタブにある Create codespace on main ボタンをクリックします。

オプションを使用した詳細設定については、リポジトリの codespace を作成する が参考になります。

Node.js と Typescript 設定

まずはバージョンを確認してみます。

$ node -v
v19.7.0

次に package.json を作成、Typescript 導入、自動コンパイル設定などを行います。

詳細設定については、Node.js & TypeScriptのプロジェクト作成 が参考になります。

$ npm init -y
$ npm install typescript @types/node ts-node nodemon --save-dev
$ npx tsc --init --rootDir src --outDir lib --esModuleInterop --resolveJsonModule --lib es6,dom --module commonjs

package.json 変更

package.json の scripts を以下に変更します。

"scripts": {
"start": "npm run build:live",
"build": "tsc -p .",
"build:live": "nodemon --watch 'src/**/*.ts' --exec \"ts-node\" src/index.ts"
},

OpenAI API Key 作成

OpenAI のアカウントにログイン後、以下の URLにアクセスして API Key を作成します。

Account API Keys - OpenAI API

できたキーをコピーして、どこかに保存しておいてください。次の GitHub Secret 作成で使用します。

GitHub Secret 作成

作成したリポジトリで、

Settings > Secrets and variables > Codespaces

と進んでいき New repository secret というボタンをクリックして、secret を作成します。

名前は適当なもので結構です。先ほど、コピーしておいた OpenAI API Key を該当箇所にペーストしたら secret の準備は OK です。

openai モジュール追加

Node.js に openai モジュールを追加します。

$ npm install openai

index.ts 作成

まず、src ディレクトリを作成し、その配下に index.ts を作成します。

import { Configuration, OpenAIApi } from "openai";

const configuration = new Configuration({
    apiKey: process.env.OPENAI_API_KEY,
});
const openai = new OpenAIApi(configuration);

export async function ask(content: string, model = "gpt-3.5-turbo-0301") {
  const response = await openai.createChatCompletion({
    model: model,
    messages: [{ role: "user", content: content }],
  });

  const answer = response.data.choices[0].message?.content;
  console.log(answer);
}

const question = "wowakaさんについて教えてください";
ask(question);

実行

$ npm start

結果がかえってきて成功ですが、内容的には不正確なものでした。こういった面もあるのが、OpenAI だということを認識できてよかったと思います。

OpenAI API