- 美しく表現力豊かなRubyベースの統合AIライブラリ
- AIプロバイダーごとにクライアントライブラリ、レスポンス形式、ストリーミング処理の方法がすべて異なり、複数のAIモデルを使うには互換性のないAPIと複雑な依存関係を扱う必要がある
- RubyLLMはこうした問題を解決する統合APIを提供
主な機能
- 対話: OpenAI、Anthropic、Gemini、DeepSeekモデルをサポート
- ビジョンと音声: 画像および音声の理解
- PDF解析: 文書の要約と分析
- 画像生成: DALL-Eなどさまざまなモデルをサポート
- 埋め込み生成: ベクトル検索と意味解析
- ツール提供: RubyコードとAIの連携が可能
- Rails統合: ActiveRecordでチャット履歴を保存可能
- ストリーミング: リアルタイム応答処理をサポート
RubyLLMの利点
# 簡単に質問する
chat = RubyLLM.chat
chat.ask "Rubyを学ぶのに最も良い方法は?"
# 画像解析
chat.ask "この画像には何が見えますか?", with: { image: "ruby_conf.jpg" }
# 音声解析
chat.ask "この会議では何が話されましたか?", with: { audio: "meeting.wav" }
# 文書要約
chat.ask "この契約書を要約してください", with: { pdf: "contract.pdf" }
# 画像生成
RubyLLM.paint "山の上の夕焼けを水彩画スタイルで描いて"
# ベクトル埋め込み生成
RubyLLM.embed "Rubyはエレガントで表現力に優れている"
# AIがコードを利用可能
class Weather < RubyLLM::Tool
description "特定の場所の現在の天気を提供"
param :latitude, desc: "緯度 (例: 52.5200)"
param :longitude, desc: "経度 (例: 13.4050)"
def execute(latitude:, longitude:)
url = "https://api.open-meteo.com/v1/forecast/…;
response = Faraday.get(url)
JSON.parse(response.body)
rescue => e
{ error: e.message }
end
end
chat.with_tool(Weather).ask "ベルリンの天気はどう? (52.5200, 13.4050)"
インストール方法
# Gemfileに追加
gem 'ruby_llm'
# インストール
bundle install
# または直接インストール
gem install ruby_llm
APIキー設定
RubyLLM.configure do |config|
config.openai_api_key = ENV['OPENAI_API_KEY']
config.anthropic_api_key = ENV['ANTHROPIC_API_KEY']
config.gemini_api_key = ENV['GEMINI_API_KEY']
config.deepseek_api_key = ENV['DEEPSEEK_API_KEY'] # 任意
end
自然な対話処理
# デフォルトモデル(GPT-4o-mini)でチャット開始
chat = RubyLLM.chat
# 別のモデルを使用
chat = RubyLLM.chat(model: 'claude-3-7-sonnet-20250219')
# 簡単な質問
chat.ask "attr_readerとattr_accessorの違いは?"
# マルチターン対話の処理
chat.ask "例を挙げてもらえますか?"
# ストリーミング応答
chat.ask "Rubyプログラマーに関する話をして" do |chunk|
print chunk.content
end
# ほかの入力形式もサポート
chat.ask "この2つの図を比較して", with: { image: ["diagram1.png", "diagram2.png"] }
chat.ask "この文書を要約して", with: { pdf: "contract.pdf" }
chat.ask "この音声で何が話されているか教えて", with: { audio: "meeting.wav" }
# 対話中にモデル変更可能
chat.with_model('gemini-2.0-flash').ask "一番好きなアルゴリズムは?"
Rails統合サポート
# app/models/chat.rb
class Chat < ApplicationRecord
acts_as_chat
broadcasts_to ->(chat) { "chat_#{chat.id}" }
end
# app/models/message.rb
class Message < ApplicationRecord
acts_as_message
end
# app/models/tool_call.rb
class ToolCall < ApplicationRecord
acts_as_tool_call
end
# コントローラーでの使用例
chat = Chat.create!(model_id: "gpt-4o-mini")
chat.ask("Rubyで最も役立つgemは何?") do |chunk|
Turbo::StreamsChannel.broadcast_append_to(
chat,
target: "response",
partial: "messages/chunk",
locals: { chunk: chunk }
)
end
# チャット履歴は自動保存される
ツール作成例
class Search < RubyLLM::Tool
description "ナレッジベースで検索を実行"
param :query, desc: "検索語"
param :limit, type: :integer, desc: "最大結果数", required: false
def execute(query:, limit: 5)
Document.search(query).limit(limit).map(&:title)
end
end
# AIでツールを使用
chat.with_tool(Search).ask "Ruby 3.3の新機能に関する文書を探して"
1件のコメント
Hacker Newsのコメント