7
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

今話題のChatGPT APIをTypeScriptから簡単に呼び出せるライブラリを作った!

Posted at

はじめに

昨日から話題沸騰中のChatGPT API、みなさんはもうお試ししましたか?
以前からAPIの提供は期待されていて、OpenAIも予定はしていると言っていたものの実際にいつ発表になるのかは具体的には明言されていませんでした。

そして、ここに来て満を持してのChatGPT APIの登場です。

これは、ひとりの個人開発者としてワクワクが止まりません。

ただ、ChatGPT APIと言われても、プログラミングを始めたばかりの方や、わざわざREST APIを呼び出してレスポンスを取得して〜までの処理を書くのが面倒な方にとっては後で触ろう思ってしまうかもしれません。

僕的には、この機会の損失は本当にもったいないと思いました。
なので、今回TypeScriptからprompt()を呼び出すだけで余計な設定いらずでChat GPT APIを使うことができるライブラリ、ts-chatgptをリリースいたしました!!!

CommonJSでビルドされているので、Node.jsが動く既存のプロジェクトでもすぐに採用できると思います。(もちろんNode.jsのバージョンについては適宜ご確認をお願いいたします。ちなみに推奨バージョンは14以降です。)

インストール

インストールは簡単です。npm install ts-chatgptを実行して、既存のプロジェクト、もしくは新しいプロジェクトに追加してください。

npm install ts-chatgpt

yarnをお使いの方はこちら。

yarn add ts-chatgpt

OPENAI_API_KEY環境変数の準備

このライブラリは、OpenAIから提供されているAPIキーを使ってChatGPT APIを呼び出しています。
なので、ライブラリを実際に使用する前に、必ずこのAPIキーを取得して、OPENAI_API_KEY環境変数として設定してからご使用ください。

まずはこちらのページにアクセスします。アカウントを未作成の方は、最初にアカウントを作成する必要がありますのでご注意ください。

1.png

アクセスしたら、右上のアカウントをクリックします。
表示されるメニューからView API Keysを選択します。

2.png

API Keysのページにアクセスしたら、画面中央にあるCreate new secret keyをクリックします。

3.png

モーダルと共にシークレットキーが表示されますので、コピーしておきます。このキーはとても大事なキーなので他人には絶対に教えないようにお気をつけください。

4.png

これで必要な準備は整いましたので、コピーしたシークレットキーを.envファイルに貼り付けます。

.env
OPENAI_API_KEY="xxx-xxx-xxx"

さっそく使ってみる

使い方はとっても簡単です。

まず、prompt()ts-chatgptからインポートします。

import { prompt } from "ts-chatgpt";

そして、非同期関数の中で必要な引数を与えて呼び出します。

async function main() {
    const response = await prompt({
      model: "gpt-3.5-turbo-0301",
      messages: [
        {
          role: "user",
          content: "Hello, I'm a user",
        },
      ],
    });
}

これで完了です!!!
受け取ったレスポンスには次のような内容が保存されています。

{
  id: 'xxx',
  object: 'chat.completion',
  created: 1677777177,
  model: 'gpt-3.5-turbo-0301',
  usage: { prompt_tokens: 13, completion_tokens: 11, total_tokens: 24 },
  choices: [ { message: [{
      role: 'assistant',
      content: 'Hello there! How can I assist you today?'
  }], finish_reason: 'stop', index: 0 } ]
}

このレスポンスの型はChatGPTResponseとしてts-chatgptから公開されていますので、必要に応じてご活用ください。

引数の詳細

prompt()を呼び出す際に渡したmodelには、現在次の2つの値を渡せるようになっています。

Model Description Available
gpt-3.5-turbo The default model.
gpt-3.5-turbo-0301 -

これらのモデルは、いわゆるChatGPT APIのエンジンに相当するもので、現在のChatGPT製品に採用されているものと同じモデルとなっています。

またmessages配列の要素としてMessage型の値を渡すことができます。
Roleとしてはsystemassistant、そしてuserの3つを設定することが可能となっています。

実際にChatGPTに対して入力するテキストはcontentとして渡します。

export type Role = "system" | "assistant" | "user";
export interface Message {
  role: Role;
  content: string;
}

messages配列という形で、複数のMessageを設定できるようになっている理由は会話上の文脈を維持するためです。これをカスタマイズすることで、より開発者にとって自然な文脈に沿った応答を得ることができるようになっています。

まとめ

今回、ChatGPT APIをラップしたライブラリを開発するにあたって、より使いやすく余計な設定などを意識しなくても使いこなせるものを目指しました。

なので、クラスはあえて採用せず、関数の呼び出しのみでChatGPT APIを呼び出すことができるようになっています。
環境変数OPENAI_API_KEYに関しても、開発者がそのためだけにdotenvをインストールしなくても自動的に読み取れるようになっておりますので、安心してご活用ください。

このライブラリを活用して、個人開発者のみなさまが世界をあっと驚かせるアプリケーションを公開する日が来ることをとても楽しみにしております。

参考にした記事

7
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?