Madogiwa Blog

主に技術系の学習メモに使っていきます。

`ruby-openai`を使ってRubyでChat GPTのAPIを呼び出すMEMO

Ruby on Rails製の個人のWebサービスにOpen APIのChat GPTを使った機能を盛り込んだ時にruby-openaiを使うと簡単にリクエス部分を実装できたので、ほとんど公式READMEの通りですがメモ📝

github.com

API KEYの取得方法等は以下の記事を参考にしてください。

madogiwa0124.hatenablog.com

使い方は簡単で以下の通りに実装すればいい感じにOpenAIのChat GPTのレスポンスを受け取ることができます。

client = OpenAI::Client.new(access_token: "access_token_goes_here")

response = client.chat(
    parameters: {
        model: "gpt-3.5-turbo", # Required.
        messages: [{ role: "user", content: "Hello!"}], # Required.
    })
puts response.dig("choices", 0, "message", "content")
# => Hello! How can I assist you today?

以下にサンプルとして適当な文字列の分かりやすい要約を生成するclassを作ってみました。

# frozen_string_literal: true

class SummaryText
  def initialize(text: nil)
    @original = text
  end

  def summary
    @summary ||= summarize!
  end

  attr_reader :original

  private

  def summarize!
    fetch_summary!
  end

  def fetch_summary!
    fetch_from_open_ai_chat(
      '渡された文字列を小学生でも理解できるように150文字で説明した文章を出力してください。',
      original
    )
  end

  def fetch_from_open_ai_chat(system_prompt, text)
    response = client.chat(
      parameters: {
        model: 'gpt-3.5-turbo',
        messages: [
          { role: 'system', content: system_prompt },
          { role: 'user', content: text }
        ]
      }
    )
    response.dig('choices', 0, 'message', 'content')
  end

  def client
    @client ||= OpenAI::Client.new(access_token: open_ai_token)
  end

  def open_ai_token
    Rails.configuration.settings.open_ai[:secret]
  end
end

以下のような感じで結果を取得できます🙌

SummaryText.new(text: "検索(けんさく、英: search)とは、データの集合の中から目的とするデータを探し出すことである。古くは図書館の所蔵物を探し出したり、辞書の項目を引いたりといった人手で行うのが主だったが、コンピューターの発達により、テキスト文字列の検索(文書検索、文字列探索)、画像データの検索(画像検索)、音声データの検索(音声検索)など、大規模かつマルチメディアの情報に関する検索技術が発展した。さらにデータベースの発展とインターネットの普及に伴い、分散保管されているデータに対する検索技術が研究されている。ファイルの内容に対して文字列探索を行う機能も検索と呼ばれる。").summary
=> "「検索」とは、目的のデータを見つけることです。昔は本を探したり辞書を引くなど、人が手で行っていました。しかし、コンピューターが発達し、文章や画像、音声など、大量の情報を探すことができるようになりました。また、データが分散保管されている場合でも検索できるようになっています。ファイルの中から特定の文字列を探す機能も「検索」と呼びます。"