1 ポイント 投稿者 GN⁺ 4 시간 전 | 1件のコメント | WhatsAppで共有
  • RubyLLM は、Rubyアプリでチャットボット、AIエージェント、RAG、コンテンツ生成といったAIワークフローを1つのフレームワークで構築できるようにする
  • GPT、Claude、ローカルの Ollama などを同じインターフェースで扱え、依存関係は Faraday、Zeitwerk、Marcel の3つに限定される
  • チャットだけでなく、画像・動画分析、音声文字起こし、文書処理、画像生成、埋め込み、モデレーション、ツール呼び出し、構造化出力、ストリーミングまでカバーする
  • Railsでは acts_as_chat、モデル読み込み、任意のチャットUIジェネレーターを提供し、` ですぐ使えるチャットインターフェースを開ける
  • OpenAI、xAI、Anthropic、Gemini、VertexAI、Bedrock、DeepSeek、Mistral、Ollama、OpenRouter、Perplexity、GPUStack、OpenAI互換APIをサポートする

Ruby向け単一AIフレームワーク

  • RubyLLM は、主要なAIプロバイダーを1つのRubyフレームワークで扱うためのツール
  • チャットボット、AIエージェント、RAGアプリケーション、コンテンツ生成器、そのほかのAIワークフローの構築を対象とする
  • Chat with Work で実運用されている

プロバイダーごとのAPI差異を隠すインターフェース

  • AIプロバイダーごとにクライアント、API、応答形式、慣習が異なる問題を減らすことに焦点を当てる
  • 同一のインターフェース で GPT、Claude、ローカル Ollama を利用できる
  • 依存関係は FaradayZeitwerkMarcel の3つだけを使用する

基本的な使い方

  • 簡単な質問は RubyLLM.chat でチャットオブジェクトを作り、chat.ask で実行する
    • 例: chat.ask "What's the best way to learn Ruby?"
  • ファイル分析は with: オプションにファイルを渡す方式
    • 画像: ruby_conf.jpg
    • 動画: video.mp4
    • 音声: meeting.wav
    • PDF: contract.pdf
    • コード: app.rb
  • 複数ファイルは配列で渡して一度に分析できる
    • 例: with: ["diagram.png", "report.pdf", "notes.txt"]
  • ストリーミング応答 はブロックを渡して chunk.content を処理する

AI機能の範囲

  • RubyLLM.paint画像生成 を行う
  • RubyLLM.embed でテキスト 埋め込み を生成する
  • RubyLLM.transcribe で音声をテキストに文字起こしする
  • RubyLLM.moderate でコンテンツの安全性を確認する
  • RubyLLM::Tool を継承したクラスで、AIにRubyメソッドを呼び出させられる
    • 例の Weather ツールは緯度と経度を受け取り、Open-Meteo APIから現在の天気データを取得する
  • RubyLLM::Agent で、指示文とツールを含む再利用可能なエージェントを定義できる
    • 例の WeatherAssistantgpt-5-nano モデル、簡潔な応答指示、Weather ツールを使用する
  • RubyLLM::Schema構造化出力 スキーマを定義できる
    • 例の ProductSchemanamepricefeatures フィールドを定義する

機能一覧とプロバイダー対応

  • 主な機能は次のとおり
    • Chat: RubyLLM.chat ベースの対話型AI
    • Vision: 画像と動画の分析
    • Audio: RubyLLM.transcribe ベースの音声文字起こしと理解
    • Documents: PDF、CSV、JSON などのファイル形式から抽出
    • Image generation: RubyLLM.paint ベースの画像生成
    • Embeddings: RubyLLM.embed ベースの埋め込み生成
    • Moderation: RubyLLM.moderate ベースのコンテンツ安全性確認
    • Tools: AIがRubyメソッドを呼び出す
    • Agents: RubyLLM::Agent ベースの再利用可能なアシスタント
    • Structured output: JSONスキーマベースの構造化出力
    • Streaming: ブロックベースのリアルタイム応答
    • Rails: acts_as_chat ベースのActiveRecord統合
    • Async: Fiberベースの並行性
    • Model registry: 機能検出と価格情報を含む800以上のモデル
    • Extended thinking: モデルの思考過程を制御・表示・保存
  • 対応プロバイダーは OpenAI、xAI、Anthropic、Gemini、VertexAI、Bedrock、DeepSeek、Mistral、Ollama、OpenRouter、Perplexity、GPUStack、OpenAI互換API

インストールとRails統合

  • インストールは Gemfile に gem 'ruby_llm' を追加したあと bundle install を実行する
  • APIキーは config/initializers/ruby_llm.rb で設定する
    • 例: config.openai_api_key = ENV['OPENAI_API_KEY']
  • Rails統合は次のコマンドでインストールする
    • bin/rails generate ruby_llm:install
    • bin/rails db:migrate
    • bin/rails ruby_llm:load_models # v1.13+
  • 任意でチャットUIを追加できる
    • bin/rails generate ruby_llm:chat_ui
  • Railsモデルで acts_as_chat を宣言すると、ActiveRecordベースのチャットを利用できる
    • 例のモデルでは Chat < ApplicationRecordacts_as_chat を宣言する
    • Chat.create! model: "claude-sonnet-4" でチャットを作成し、ファイルを渡して質問できる
  • 用意されたチャットインターフェースは http://localhost:3000/chats で開ける

1件のコメント

 
GN⁺ 4 시간 전
Hacker Newsのコメント
  • RubyLLM は意外と良く、使い勝手の面では Vercel の AI フレームワークに近い
    すぐ動く手軽さと柔軟性のあいだでバランスを取ろうとしていて、そのぶん難しさもあるが、全体としてはかなり良かった
    実際に感じた大きな不満は、キャッシュが常にうまく動くわけではないこと。たとえば xAI は completions API しかサポートしておらず、thought signature が誤って返されるため問題が起きる

  • RubyLLM の抽象化の上に作られたオープンソース gem の Raix があり、かなり使われている
    https://github.com/OlympiaAI/raix

  • RubyLLM を本番環境で使っていて、とても気に入っている。優れていて使いやすいフレームワークだ
    Responses API が標準でサポートされていない点は、他の人が言うようにもどかしく、大きな欠落に見えた。別の開発者が作ったコネクタはあるが、バグがあり、メインの gem ほど品質は高くない
    今後の開発、特に 2.0 に期待している。Responses API がネイティブで入ったのなら、ぜひ確認したい

    • RubyLLM 1.x で Responses API が実装されていなかった理由は、内部的にプロバイダーとプロトコルが 1:1 で対応すると事実上仮定していたため
      OpenAI には機能の異なるプロトコルが 2 つあり、VertexAI の全モデルにアクセスするには単一のプロバイダーの下で複数のプロトコルをサポートする必要があるため、この仮定はもはや成り立たなくなった
      そのため Protocols と Providers を分離し、同じ Provider の下でもモデルごとに異なる Protocol へ透過的にルーティングする大規模なリファクタリングが必要だった。この作業は RubyLLM 2.0 に含まれる予定
      気になるなら参考になるコミット: https://github.com/crmne/ruby_llm/commit/d398354da493570b050...
      https://github.com/crmne/ruby_llm/commit/0875ce2dfeae9d28a3a...
  • RubyLLM は非常に使いやすい。昨年、あるプロジェクトでかなり活用した
    欠点は、本当の トレーシング観測性 のために計測するのが難しかったことと、リトライ時に内部モデルを削除するパターンがあるため、見える履歴はきれいでも実際の API 呼び出し順序を正確に追うにはあまり向いていなかったこと

  • Claude だけを前提にしたものを作っていて、Anthropic のエコシステムを離れる予定はない。こういう場合でも、RubyLLM を使うことに Anthropic の Ruby SDK を直接使うより利点があるのか気になる
    言い換えると、この選択が Fog と aws-sdk-s3 のあいだの選択に近いのか、それとも Active Storage と aws-sdk-s3 のあいだの選択に近いのか知りたい

    • Active Storage と aws-sdk-s3 の関係に近いと思う
      RubyLLM の良いところは、ActiveRecord のようにメソッドをチェーンできる DSL、エージェント・ツール・プロンプトを整理する構造、Anthropic から DeepSeek へ簡単にテストや移行ができ、コストを 90% 以上削減できた移植性にある
      bin/rails generate ruby_llm:install だけで各チャットをデータベースに保存できる ActiveRecord 統合も良い。保存したチャット履歴を定期的に落として claude code に渡し、エージェント指示文を磨かせるのもとても役立った
    • 後からどのプロバイダーでも選べるツールがあるのに、わざわざ 1 つのプロバイダーに ロックイン されるように作る理由はないと思う
      障害対応だけ見ても、本当にサービスが必要な日に Anthropic API が落ちたらどうするかを考えるべきだ
  • サイドプロジェクトで RubyLLM を使っているが素晴らしい
    昨年の SF Ruby conf の質疑応答やコメントで出ていたものが、すでにエコシステムの機能としてリリースされているのは興味深い: https://youtu.be/y535u1EWqAg?si=rbyv52T035apKwQk

  • 数か月前に RubyLLM をかなり深く使ってみたが、設計も実装も非常に良かった
    複数の Lisp 言語で自作した LLM クライアントがあるが、RubyLLM の設計を一部取り入れようかと思ったほど。模倣は賛辞だ

  • Ruby を AI コミュニティに持ち込み、オープンソースで取り組んでくれてありがとう
    良い言語はもっと探求され、注目されるべきだ

    • Ruby の話になると Hacker News が MINASWAN な雰囲気になるのが良い
  • Laravel にも似たライブラリがある
    https://laravel.com/docs/13.x/ai-sdk

  • RubyLLM を本番環境でも使っているが、これまで見たこの分野のライブラリの中で最も エレガントなライブラリ
    Issue tracker の運用方法も良かった。“Feature Request” を選ぶと、回避策をどう探したか、なぜ RubyLLM に入るべきだと思うのかなどを説明させるようになっていて、際限なくスコープが膨らむのを防いでいる