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:
無事、しりとりをすることができた