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 リポジトリ作成
- codespace 作成
- Node.js と Typescript 設定
- package.json 変更
- OpenAI API Key 作成
- GitHub Secret 作成
- openai モジュール追加
- index.ts 作成
- 実行
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 を作成します。
できたキーをコピーして、どこかに保存しておいてください。次の 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 だということを認識できてよかったと思います。