OlympiaAI/raix
Ruby AI eXtensions
OlympiaAI / raix – Ruby AI eXtensions
何であるか – Raix は、任意の Ruby クラスに離散的な大規模言語モデル(LLM)機能を簡単に組み込める Ruby ライブラリです。3つのミックスインモジュールを提供しています:
Raix::ChatCompletion– コンバセーション履歴(トランスクリプト)を管理し、下位の RubyLLM ウェッパー(OpenAI、Anthropic、Google Gemini など)を経由して LLM にチャットコンプリーションリクエストを送信するコア機能です。Raix::FunctionDispatch– モデルが呼び出すことができる ツール(関数)定義を宣言するオプションの DSL。Raix は自動的に関数を実行し、結果をトランスクリプトに追加して、モデルが通常のテキストを返すまで会話を継続します。Raix::PromptDeclarations– 再利用可能な プロンプトチェーン(順次プロンプト、ストリーミング、条件付きループ)を構築するためのオプションの DSL。
これらの3つのモジュールは、通常の Ruby オブジェクトにミックスイン可能であり、activesupport を含めれば Rails 以外のアプリでも動作します。
主な機能(README に記載)
| 機能 | README の説明 | なぜ重要か |
|---|---|---|
| 統合されたプロバイダーアクセス | ruby_llm で駆動され、OpenAI、Anthropic、Google Gemini および多数の他プロバイダーを OpenRouter 経由でサポート。 |
モデルやプロバイダーを変更してもコードを変更しなくてよい。 |
| トランスクリプト処理 | transcript は短い { role: "user", content: "…" } ハッシュまたは省略形 role => content 形式でメッセージを保存。save_response: false が渡されない限り、AI の返信を自動追加。 |
コンバセーション状態をシンプルかつ柔軟に保つ。 |
| 予測出力 | prediction: パラメータ(OpenAI)を渡すことで、低遅延の予測応答を得られる。 |
|
| プロンプトキャッシュ | Anthropic Claude モデルでは cache_at を設定して、大きなメッセージをキャッシュされた「ブレークポイント」に分割可能。 |
|
| JSON モード | json: true でモデルが有効な JSON を返すよう強制。Raix は OpenAI では response_format を設定し、他のプロバイダーでは <json> タグから JSON を抽出。 |
|
before_completion フック |
グローバル、クラスレベル、インスタンスレベルのラムダ(またはコール可能オブジェクト)で、リクエストの修正、システムプロンプトの追加、ログ記録、PII のマスク、テナントごとのモデル選択などを可能に。 | |
| 関数(ツール)ディスパッチ | function :name, "description", param_schema do … end で関数を宣言。モデルがツールを要求すると Raix が自動的に呼び出し、結果をトランスクリプトに追加し、通常のテキスト返信が返るまでループ。以下をサポート: |
available_toolsによる選択的公開- 1回の応答での複数ツール呼び出し
- カスタム
dispatch_tool_functionオーバーライド - ActiveSupport キャッシュによる関数結果のキャッシュ |
| プロンプトチェーン DSL |
prompt call: SomePromptClassまたはprompt text: -> { … }で、マルチステップ会話(例:URL検出、メモリスキャン、ストリーミング返信)を構成可能。 | | 構成 |Raix.configureでグローバルデフォルト(例:デフォルトモデル、最大ツール呼び出し回数、グローバルフック)を設定可能。 |
一般的な使用例
| シナリオ | Raix の使い方 |
|---|---|
| Rails または Sinatra アプリにチャットボット機能を追加 | サービスオブジェクトに Raix::ChatCompletion を含め、ユーザーのメッセージを transcript に追加し、chat_completion を呼び出して返された文字列をレンダリング。 |
| 内部サービスを呼び出せる AI ベースのアシスタントを構築 | Raix::FunctionDispatch を追加し、check_weather、fetch_user_profile などの関数を宣言。モデルがいつ呼び出すか判断し、Raix が自動的にリクエスト・レスポンスのやり取りを処理。 |
| データプライバシー/PII のマスクを強制 | グローバルな before_completion フックを設定し、context.messages をスキャンして、SSN、メールアドレスなどをサーバー外に出す前にマスク。 |
| マルチステップ処理パイプライン | Raix::PromptDeclarations を使って URL 取得チェック、メモリスキャン、メイン会話プロンプトを順に実行。ボイラープレートループを書かずに済む。 |
| コスト意識のあるモデル選択 | before_completion フック内で DB からテナント設定を読み込み、リクエストごとに model、temperature、max_tokens を注入。 |
| 高コストツール呼び出しのキャッシュ | dispatch_tool_function をオーバーライドして Rails.cache を渡し、同じ引数で過去の結果を再利用可能に。 |
プロジェクトの成熟度(README から)
- バージョン – Raix 2.0 が言及されているため、少なくとも1回のメジャーリリースがある。
- 起源 – 生産環境向けの Olympia チャットプラットフォームから抽出。作者は「Ruby で完全に書かれた、最も規模が大きく成功している AI チャットプロジェクトの一つ」と主張。
- 依存関係 –
ruby_llm(プロバイダーウェッパー)とactivesupport(キャッシュおよびユーティリティ)に依存。 - テスト – README に RSpec の例が含まれており、テストスイートが存在することを示唆。
- ドキュメント – README 自体がかなり詳細で、コア API、フック、関数ディスパッチ、キャッシュ、プロンプトチェーンをカバー。
- コミュニティ – 外部貢献者の明記はないが、オープンソースであり、商業製品(Olympia)および Leanpub 書籍と関連しているため、小規模だが集中したユーザー層を持つと推測。
エコシステムと互換性
| 項目 | 詳細 |
|---|---|
| Ruby バージョン | 指定なし。ruby_llm と activesupport に依存。おそらく Ruby 2.7+ または 3.x 互換。 |
| Rails サポート | 任意の Ruby アプリで動作。Rails 統合はオプションだが、例では Rails のログとキャッシュを使用。 |
| プロバイダー対応 | OpenAI、Anthropic、Google Gemini、および「数十の他のプロバイダー」を OpenRouter 経由でサポート。 |
| 他の gem | ruby_llm、activesupport、オプションで rails(キャッシュ/ロガー)。 |
| ライセンス | README に記載なし(リポジトリを確認する必要あり)。 |
セットアップ手順(README に基づく)
- gem の追加(仮に
raixと仮定)をGemfileに追加し、bundle installを実行。 - コアモジュールのインクルード:AI 機能を必要とする任意のクラスに含める:
class MyAssistant include Raix::ChatCompletion end - メッセージの追加 と
completionの呼び出し:ai = MyAssistant.new ai.transcript << { user: "What is the meaning of life?" } puts ai.chat_completion # => モデルの応答文字列 - オプション:ツールディスパッチの追加(ツールが必要な場合):
class WeatherBot include Raix::ChatCompletion include Raix::FunctionDispatch function :check_weather, "Check weather", location: {type: "string", required: true} do |args| "It is sunny in #{args[:location]}" end end - グローバル構成(例:デフォルトモデル、フック):
Raix.configure do |c| c.before_completion = ->(ctx) { { temperature: 0.7 } } end - アプリの実行 – ライブラリがリクエスト構築、応答解析、ツール実行、トランスクリプト管理をすべて自動で処理します。
TL;DR
Raix は、LLM API とのやり取りのボイラープレートを抽象化する Ruby 最優先の SDK です。いくつかのモジュールをミックスインするだけで、以下が得られます:
- 管理された会話トランスクリプト
- OpenRouter 経由の統合されたマルチプロバイダーアクセス
- 動的リクエスト調整のための強力なフック
- モデルが Ruby メソッドを呼び出せる宣言型ツールコールシステム
- 複雑なマルチステップフロー用のプロンプトチェーン DSL
Ruby エコシステムから離れずに、チャットボット、アシスタント、RAG パイプライン、自動化機能を組み込むことを目指した Ruby 開発者向けです。README には即座に開発を開始できる十分な情報が記載されています。
関連
- Dispatch
- プロジェクト
- プロジェクト
- プロジェクト
- プロジェクト