Open8

RubyでもChatGPTのAPIを利用してみる

kurehajimekurehajime

この辺のエコシステムはPythonが圧倒的な印象を受けるけど、rubyはどうなんだろ、というわけで試してみる。

kurehajimekurehajime

Gemfileを用意。ruby-openaiを入れる。

Gemfile
# frozen_string_literal: true

source "https://rubygems.org"

# gem "rails"
gem "ruby-openai" 

そしてインストール。

bundle install
kurehajimekurehajime

OpenAIのサイトから取得したAPIキーを環境変数に入れておく。

export OPENAI_API_KEY=●●●●●●●●●●●●●●●
kurehajimekurehajime

あとは単純、以下のように書くだけ。

main.rb
require "openai"
prompt = <<'EOS'
あなたは俳句で喜怒哀楽や季節感を表現する詩人です。
俳句とは、5・7・5という音節数の文章を作ることを指します。
文節は「 」で分割します。
俳句の例として以下のようなものがあります。
* 古池や 蛙飛びこむ 水の音
* 若草や つわものどもが 夢の跡
* 柿食えば 鐘が鳴るなり 法隆寺
* 梅一輪 一輪ほどの あたたかさ
* 静かさや 岩にしみ入る 蝉の声
それでは猫をテーマにして俳句を表示してください。
EOS
client = OpenAI::Client.new(access_token: ENV['OPENAI_API_KEY'])

response = client.chat(
    parameters: {
        model: "gpt-3.5-turbo",
        messages: [{ role: "user", content: prompt}],
        temperature: 0.7,
    })
puts response.dig("choices", 0, "message", "content")
kurehajimekurehajime

補足

クライアント初期化時に環境変数OPENAI_API_KEYからAPIキーを取得している。

client = OpenAI::Client.new(access_token: ENV['OPENAI_API_KEY'])

あとはchatメソッドを呼ぶだけ。

response = client.chat(
    parameters: {
        model: "gpt-3.5-turbo",
        messages: [{ role: "user", content: prompt}],
        temperature: 0.7,
    })

model: "gpt-3.5-turbo",

モデルにgpt-3.5-turbo(今公開されてるやつで一番賢いやつ)を指定。

messages: [{ role: "user", content: prompt}],
メッセージにはuser(AIと会話する人間役)としてテキストを渡してる。

temperature: 0.7

温度?を設定してる。これは0だと毎回同じ答えを返す。
1だとバラバラになる。あんまりランダム度が高いと適当なことを言いやすくなる気がする。

kurehajimekurehajime

実行結果

なかなか風情がある。

$ ruby openai.rb 

猫の目に 静かなる月の 光かな
黒猫の影 跳ねる秋風に 焦がれる
夏猫の寝床 鼾の音に 涼みけり
kurehajimekurehajime

このライブラリ、単純に結果を返すだけでなくEmbeddingsやFine-tuning、音声認識にも対応してるらしい。

Llama-indexやLangChainがあるPythonほどエコシステムは充実してはいなさそうだけど、Open AIのAPIをそのまま利用するぶんにはあまり不自由しないかもしれない。