高木のブログ

Ruby で ChatGPT API を触る

2023/04/08

Ruby で ruby-openai gem を使って、ChatGPT API を触ってみた

Hello World! 的なやつ

「こんにちは」とメッセージを送って、そのレスポンスを表示する

app.rb
require 'bundler/inline'

gemfile do
  source 'https://rubygems.org'
  gem 'ruby-openai'
end

client = OpenAI::Client.new(access_token: 'access_token')

response = client.chat(
  parameters: {
    model: 'gpt-3.5-turbo',
    messages: [{ role: 'user', content: 'こんにちは' }]
  }
)

puts response.dig('choices', 0, 'message', 'content')
$ ruby app.rb
こんにちは!私はAIアシスタントです。どのようなご要望がありますか?

しりとり

ループでしりとりをやってみた

app.rb
loop do
  print 'User: '
  content = gets.chomp

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

  puts "Assistant: #{response.dig('choices', 0, 'message', 'content')}"
end
$ ruby app.rb
User: しりとりをしよう
Assistant: りんご
User: ごりら
Assistant: ごりらとは、哺乳動物の一種で、日本語では「サイチョウザメ」「ラッコウオ」とも呼ばれます。体重は約2~3トンにもなり、大型哺乳動物の一つです。鼻先に角質の「つの」があり、強力な力で木を倒したり、車両をも動かすことができます。草食性で、主に木の葉などを食べす。また、ごりらは現在絶滅の危機に瀕しており、保護が必要な動物の一つです。
User:

失敗

「りんご」の次に「ごりら」と送ると、ゴリラの説明が返ってきた

原因

過去の会話履歴を保持していないからである
ChatGPT 的にはいきなり「ごりら」とだけ送られてきている

改修

過去の会話履歴を保持するようにする
messages過去の会話 + 新しいメッセージ を入れてあげれば良い

app.rb
messages = []

loop do
  print 'User: '
  content = gets.chomp

  messages.push({ role: 'user', content: content })

  response = client.chat(
    parameters: {
      model: 'gpt-3.5-turbo',
      messages: messages
    }
  )

  message = response.dig('choices', 0, 'message')
  messages.push(message)

  puts "Assistant: #{message['content']}"
end
$ ruby app.rb
User: しりとりをしよう
Assistant: りんご
User: ごりら
Assistant: らっぱ
User: ぱんつ
Assistant: つりかべ
User:

無事、しりとりをすることができた

参考

ruby-openaiを使ってChatGPT APIを叩いてみよう - Qiita


SNS でシェアする


ytkg

Written by ytkg, Twitter, GitHub