RailsでのChatGPT APIの始め方

# RailsでのChatGPT APIの始め方
多くの方がRuby on Railsを使ってChatGPTを活用してみたいと考えています。

今回は、実際に手を動かしながら、RailsでChatGPTを使用する手順をご紹介します。

■ 想定される読者:
- Ruby on Railsに関する基本的な知識がある方
- APIおよびRESTfulアーキテクチャの基礎知識を有している方

■ 前提条件:
- Ruby on Railsの開発環境がすでに整っていること
- 本記事は、RailsとAPI利用の経験がある方を対象としています。

# ChatGPT API　料金設定
ChatGPT APIを利用するには、OpenAIのAPIを使用しますが、その利用には料金が発生します。

現在の料金設定では、`1000トークン`ごとに`0.002ドル`がかかりますが、最初の`18ドル`分は無料で利用できます。

また、入力と出力の両方に料金がかかるので注意が必要です。

## トークンとは？
英語における「トークン」とは、1つの単語や句読点などの記号を指します。

一方、日本語では「トークン」は文字ごとにカウントされ、ひらがなは1トークン、漢字は2から3トークンとして計上されることが一般的です。（ややこしい）

このため、日本語を使用する際にはトークンの数が英語よりも多くなりがちであり、これがChatGPT APIの利用料金を計算する際の重要な考慮点となります。

例）「こんにちは、今日の朝食は目玉焼きでした。」という文に含まれるトークン数
```
「こんにちは」: 5トークン (5文字)
「、」: 1トークン (句読点)
「今日」: 2トークン (2文字)
「の」: 1トークン (1文字)
「朝食」: 2トークン (2文字)
「は」: 1トークン (1文字)
「目玉焼き」: 5トークン (5文字)
「でした」: 4トークン (4文字)
「。」: 1トークン (句読点)
合計: 5 + 1 + 2 + 1 + 2 + 1 + 5 + 4 + 1 = 22トークン
```
よって、この文は合計で22トークンとなります。

## ChatGPTのAPIの利用上限を設定がおすすめ

ChatGPTのAPIは従量課金制ですから、使用量が増えるほど料金も増加します。

これにより、期待以上に高額な請求が発生することがあります。

予期せぬ高額請求を防ぐために、ChatGPTのAPI利用に上限を設定することを推奨します。

`Billing`の[usage limits](https://platform.openai.com/usage)ここから「毎月のAPI利用料金の上限」を設定できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286094/8d42769c-97be-0285-6fd3-75512fce9651.png)


# ChatGPT API活用例
1. LINE Bot
chatGPTをLINEで使えるようにしたもの
[![スクリーンショット 2023-11-05 16.19.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286094/a03b2eef-a429-6082-a6b8-d081555f7aa4.png)](https://x.com/yukito_shibuya/status/1631251370933366787?s=20)

2. 音声会話
ChatGPTのWhisper APIを利用してAIと会話できるようにしたもの

[![スクリーンショット 2023-11-05 16.21.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286094/717b08f1-acdd-bd97-8f3d-c23cdb60571e.png)](https://x.com/robo8080/status/1631224076005179393?s=20)

3.顧客対応
読み込ませたPDFの内容をチャット形式で調べられるもの

[![スクリーンショット 2023-11-05 16.23.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286094/9212f64c-1b32-d2fb-fe16-2ace9cee0a79.png)](https://www.chatpdf.com/)

# ChatGPT APIの始め方
長々、前段の説明をしてしまい申し訳ありません。

ここからは実際にChatGPT APIの始め方を説明します。

## 1. OpenAIでアカウントを開設する
もしChatGPTが既に使用可能な状態であれば、新たにアカウントを作成する必要はありません。

すでに作成されているChatGPTのアカウントIDでログインしてください。

以下にOpenAIページでのログイン手順を簡単に説明します。

1. [OpenAIのウェブサイト](https://openai.com/)にアクセスし、画面右上にある「Sign up」ボタンをクリックします。

2. メールアドレスとパスワードを入力して登録します。

3. 登録したメールアドレス宛にOpenAIから認証メールが送信されます。メール内のリンクをクリックしてください。

4. 必要な個人情報を入力し、電話番号での認証を行います。

5.アカウントの確認画面や使用目的に関する質問に答えます。

すべての手順が完了し、以下の画面が表示されれば、アカウントの作成（登録）が完了しています。
![スクリーンショット 2023-11-05 16.28.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286094/85de43d9-c2ec-af8b-2f2e-d33d6ecaabb6.png)

ちなみに下記の画面が出た場合は右のAPIを選択してください。
![スクリーンショット 2023-11-05 16.28.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286094/88b05966-835b-e5a1-bea0-2e87ed095dba.png)

## 2. ChatGPT APIのAPIキーを取得する
①OpenAIへログイン後のページ右上の「Personal」をクリックし、「View API keys」をクリックする
![スクリーンショット 2023-11-05 16.29.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286094/d10988b4-796d-4eef-0871-1001bff91fad.png)

②APIキーページの「Create new secret key」ボタンをクリックする
![スクリーンショット 2023-11-05 16.31.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286094/1a3e640c-ac76-618f-50df-fb5627ee5bc5.png)

③（オプション）任意のAPIキー名を入力
![スクリーンショット 2023-11-05 16.31.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286094/3a4ffb3f-9b5e-7b47-709f-541cee61084e.png)

④以下の画面でAPIキーが生成されるので、赤枠のコピーアイコンをクリックしてAPIキーをコピーする
![スクリーンショット 2023-11-05 16.32.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286094/6a5a95cb-0285-ed96-f863-0db35fa4cb8f.png)


取得したAPIキーは他人があなたのアカウントを利用するための重要な情報です。

もし漏洩してしまうと、他人によって不正に使用される可能性があります。

そのため、APIキーは他人に知られないように安全な場所に保管してください。


安全対策として、APIキーは信頼できるパスワードマネージャーや暗号化されたドキュメントなどに保存することをお勧めします。

また、不要になったAPIキーは速やかに無効化することも重要です。


## 3. クレジットカード支払いの設定
下の料金設定ページから「Add to Credit balance」をクリックし事前に料金チャージします。

https://platform.openai.com/account/billing/overview


![スクリーンショット 2023-11-07 15.57.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286094/60b12ca8-c427-f801-be35-4085a0ac0e90.png)

参考：https://qiita.com/kotattsu3/items/d6533adc785ee8509e2c


## 3. gemをインストールする

① Gemfileに[ruby-openai gem](https://github.com/alexrudall/ruby-openai)を追加します。
``` ruby:gemfile
gem "ruby-openai"
```

② `bundle install`を実行してgemをインストールします。


## 4. Ruby OpenAIを設定する
秘密キーをコピーして、環境変数に設定します。

``` ruby:.env
OPENAI_ACCESS_TOKEN=samplehogehigesamplehogehige
```

Ruby OpenAIを設定します
``` ruby:config/initializers/openai.rb
OpenAI.configure do |config|
  config.access_token = ENV.fetch("OPENAI_ACCESS_TOKEN")
end
```

## 5. 適切なモデルを選定する
適切なモデルを選定するためには、APIに用意されているモデルの特徴を理解し、使用するアプリケーションやサービスのニーズに合わせて選ぶ必要があります。

たとえば、自然言語の理解や生成が主な目的であればGPT-3.5やGPT-3が適しています。

画像生成が目的であればDALL-E、音声をテキストに変換したい場合はWhisperが適しています。

埋め込み（ベクトル表現）を生成したい場合はEmbeddings、コードの理解や生成が必要な場合はCodex、そしてセンシティブまたは安全でないテキストの検出が必要な場合はModerationが適切なモデルとなります。

それぞれのモデルは特定のユースケースに最適化されているため、具体的な用途に応じて適切なモデルを選ぶことが重要です。

![スクリーンショット 2023-11-09 14.08.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286094/c125dc80-ae06-cea6-1fe5-be5cce648985.png)

## 6. 実装
`ChatGptService`クラスを作成し、その中でOpenAIのAPIを利用するようにします。

``` ruby:app/services/chat_gpt_service.rb
class ChatGptService
  require 'openai'

  def initialize
    @openai = OpenAI::Client.new(access_token: ENV.fetch("OPENAI_ACCESS_TOKEN"))
  end

  def chat(prompt)
    response = @openai.chat(
      parameters: {
        model: "gpt-3.5-turbo", # Required. # 使用するGPT-3のエンジンを指定
        messages: [{ role: "system", content: "You are a helpful assistant. response to japanese" }, { role: "user", content: prompt }],
        temperature: 0.7, # 応答のランダム性を指定
        max_tokens: 200,  # 応答の長さを指定
      },
      )
    response['choices'].first['message']['content']
  end
end
```

`rails c`で利用できるか確認し、回答が返却されていればOK
``` zsh
➜ git:(main) ✗ docker-compose exec web rails c
Loading development environment (Rails 7.0.4.3)
irb(main):001:0> chat_gpt_service = ChatGptService.new
=>
#<ChatGptService:aaaaaaaaa
...
irb(main):002:0> chat_gpt_service.chat("日本の首都はどこですか？")
=> "日本の首都は東京です。"
```



# まとめ
OpenAIのAPIは簡単に利用できるので、ぜひ自社のアプリなどに組み込みたいですね。

OpenAIの進歩が非常に早く、ここで記載されている情報もすぐに古くなる可能性が高いので最新の情報は公式サイトで確認することをお勧めします。

https://openai.com/

# 参考サイト
https://techracho.bpsinc.jp/hachi8833/2023_07_31/132198