[ChatGPT] Open AI API を Node.js x TypeScript で試してみた
こんにちは!DA(データアナリティクス)事業本部 サービスソリューション部の大高です。
最近人気のChatGPTですが、OpenAI APIを利用することでも触ることができそうなので、今回は以下の組み合わせで試してみました。
- Node.js
- TypeScript
なお、アカウントの作成手順については、このエントリでは省略します。
プロジェクトの作成
まずは、以下を参考に Node.js & TypeScript のプロジェクトを作成していきます。
まずはGitHub上で.gitignore
をNode
としたプロジェクトを作成し、作成した空のリポジトリをCloneしてきて、以下で初期化していきます。
$ yarn init -y $ yarn add --dev typescript @types/node ts-node nodemon $ npx tsc --init --rootDir src --outDir lib --esModuleInterop --resolveJsonModule --lib es6,dom --module commonjs
ここまで出来たらpackage.json
に以下を追加します。
"scripts": { "start": "npm run build:live", "build": "tsc -p .", "build:live": "nodemon --watch 'src/**/*.ts' --exec \"ts-node\" src/index.ts" },
最後に、以下のコードを試すファイルを作成します。
const msg: string = "Hello"; console.log(msg);
ここまで出来たら、想定どおりに動くか確認しておきます。
$ yarn start yarn run v1.22.19 $ npm run build:live > [email protected] build:live > nodemon --watch 'src/**/*.ts' --exec "ts-node" src/index.ts [nodemon] 2.0.21 [nodemon] to restart at any time, enter `rs` [nodemon] watching path(s): src/**/*.ts [nodemon] watching extensions: ts,json [nodemon] starting `ts-node src/index.ts` Hello
良さそうですね。後でこのsrc/index.ts
を利用してOpenAI APIを試していきます。
API Keyの発行
OpenAIのアカウントにログインしたら、下記URLにアクセスしてAPI Keyを発行します。
発行したAPI Keyは後で利用するので、先程作成したプロジェクトに.envファイルを追加して記述しておきます。
OPENAI_API_KEY=sk-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
また、環境変数を利用したいのでdotenv
も導入しておきます。
$ yarn add dotenv
なお、GitHub上で.gitignore
をNode
としたプロジェクトを作成していれば既に設定されているはずですが、.gitignore
に.env
の設定がないとGit上に.env
ファイルがアップロードされてしまうので注意してください。
OpenAI APIを試してみる
では早速試してみたいと思います。
最初に必要なパッケージを追加しておきます。
$ yarn add openai
先程作成したsrc/index.ts
を以下のようなコードにしてみます。
import { Configuration, OpenAIApi } from "openai"; import * as dotenv from "dotenv"; dotenv.config(); 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 = "Final Fantasy XIV の都市「ウルダハ」について教えてください"; ask(question);
まずはじめにdotenv
を利用してAPIキーを取得してOpenAI APIの設定を行っています。
また、ask
関数では、引数で指定した文言に答えるように、APIを呼び出して結果を表示させるようにしています。最後にこの関数を呼び出して終わりです。
早速実行してみます。
$ yarn start yarn run v1.22.19 $ npm run build:live > [email protected] build:live > nodemon --watch 'src/**/*.ts' --exec "ts-node" src/index.ts [nodemon] 2.0.21 [nodemon] to restart at any time, enter `rs` [nodemon] watching path(s): src/**/*.ts [nodemon] watching extensions: ts,json [nodemon] starting `ts-node src/index.ts` ウルダハは、ファイナルファンタジーXIVの都市の1つで、砂漠の中にある商業都市です。この都市は、砂漠地帯に位置しているため、暑さに耐えるための特殊な建築技術を採用しています。 ウルダハは、商業の中心地であり、多くの商店や工房、市場、ナイトクラブなどがあります。街全体は、サファイアの道、ルビーの道、アメジストの道など、宝石にちなんだ名前の通りに分かれています。 ウルダハには、3つの大きな区域があります。1つは、宿屋や装備品商人などの施設や場所がある小さな広場の「サファイアの道」区域です。もう1つは、闇市や冒険者ギルドなどがある「ルビーの道」区域です。最後に、「アメジストの道」区域には、グランドカンパニーがあります。 最後に、ウルダハには、アリーゼーという大きな競技場があります。アリーゼーは、闘技場としても使われ、アイテムを入手するための特別なトーナメントも開催されています。 [nodemon] clean exit - waiting for changes before restart
回答が返ってきました!
(いまからFF14プレイヤーにしか分からないことを話しますが、) 「宝石にちなんだ名前の通りに分かれています」 が凄いですね。「サファイアの道」、「ルビーの道」は、それぞれ「サファイアアベニュー」、「ルビーロード」のことを言いたいんだと思います。また、「アメジストの道」は「エメラルドアベニュー」を言いたいようです。
「闘技場」は「コロセウム」ですね。唐突に「アリゼー」らしき単語が出てきていますが、だいたい合っています。
まとめ
以上、Open AI API を Node.js で試してみました。
新しいことを試してみるのはワクワクしますね!まずは使い方が何となくつかめてきたので、色々試してみたいと思います。
どなたかのお役に立てば幸いです。それでは!