Kiedy myślimy o sztucznej inteligencji i programowaniu, Ruby rzadko pojawia się jako pierwszy język w głowie. Python zdominował tę przestrzeń na dobre – ma TensorFlow, PyTorch, scikit-learn i cały ekosystem data science. Ale jeśli jesteś programistą Ruby i chcesz budować aplikacje wykorzystujące LLM-y, nie musisz wcale zmieniać języka. Ekosystem Ruby AI rozrósł się w ostatnim roku do rozmiarów, które pozwalają na poważną pracę z modelami językowymi.
Przyjrzyjmy się, co mamy do dyspozycji.
Oficjalne biblioteki od dostawców AI
Zacznijmy od fundamentów. Większość dużych dostawców modeli AI udostępnia oficjalne lub społecznościowe gemy Ruby, które pozwalają na bezpośrednią komunikację z ich API.
OpenAI – gem ruby-openai
Gem ruby-openai autorstwa Alexa Rudalla to zdecydowanie najbardziej dojrzała biblioteka w ekosystemie. Obsługuje GPT-4o, GPT-4 Turbo, DALL-E 3, Whisper, TTS i Assistants API. Konfiguracja jest prosta:
client = OpenAI::Client.new(access_token: ENV["OPENAI_API_KEY"])
response = client.chat(
parameters: {
model: "gpt-4o",
messages: [{ role: "user", content: "Wyjaśnij czym jest Rails" }]
}
)
puts response.dig("choices", 0, "message", "content")Gem ten obsługuje również streaming odpowiedzi, function calling i generowanie obrazów. Jest aktywnie rozwijany i ma ponad 5000 gwiazdek na GitHubie.
Anthropic – gem anthropic
Claude od Anthropic zyskał ogromną popularność, szczególnie wśród programistów ceniących dłuższy kontekst i bardziej „przemyślane” odpowiedzi. Gem anthropic pozwala na komunikację z modelami Claude 3.5 Sonnet i Claude 3 Opus:
client = Anthropic::Client.new(api_key: ENV["ANTHROPIC_API_KEY"])
message = client.messages.create(
model: "claude-sonnet-4-20250514",
max_tokens: 1024,
messages: [{ role: "user", content: "Napisz haiku o Ruby on Rails" }]
)
puts message.content.first.text
Google Gemini
Google udostępnia modele Gemini Pro i Gemini Ultra. Społecznościowy gem gemini-ai pozwala na integrację z poziomu Ruby, choć jest mniej dojrzały od powyższych.
Podejście multi-vendor: ruby_llm i langchainrb
Oficjalne gemy są świetne, gdy wiesz, którego dostawcy chcesz używać. Ale co, jeśli chcesz mieć możliwość łatwego przełączania między modelami? Albo budować bardziej złożone pipeline’y?
ruby_llm
Gem ruby_llm autorstwa Carmine Paolino to elegancka abstrakcja nad wieloma dostawcami. Jeden interfejs, wiele modeli – OpenAI, Anthropic, Google Gemini, DeepSeek. To trochę jak ActiveRecord dla LLM-ów:
chat = RubyLLM.chat(model: "claude-sonnet-4-20250514")
response = chat.ask("Co nowego w Rails 8?")
puts response.contentZmiana modelu to zmiana jednego stringa. Gem obsługuje streaming, tool use (function calling), generowanie obrazów i embeddingi. Ma też wbudowaną integrację z Rails – model Chat z pełną historią konwersacji zapisywaną w bazie danych.
langchainrb
Jeśli znasz LangChain z Pythona, langchainrb to jego rubowy odpowiednik. Oferuje abstrakcje wyższego poziomu – chaining promptów, RAG (Retrieval-Augmented Generation), agentów i narzędzia. Jest bardziej rozbudowany niż ruby_llm, ale też bardziej skomplikowany:
llm = Langchain::LLM::OpenAI.new(api_key: ENV["OPENAI_API_KEY"])
assistant = Langchain::Assistant.new(
llm: llm,
instructions: "Jesteś pomocnym asystentem programisty Ruby."
)
assistant.add_message_and_run!(content: "Jak działa Active Record?")
puts assistant.messages.last.content
Langchainrb świetnie nadaje się do budowy systemów RAG z wektorowymi bazami danych (Pinecone, Weaviate, Pgvector) i bardziej złożonych agentów.
Budowa agenta AI w Rails 8
Teoria teorią, ale zobaczmy jak to wygląda w praktyce. Rails 8 wprowadził kilka zmian, które sprawiają, że jest idealnym frameworkiem do szybkiego prototypowania aplikacji AI.
Dlaczego Rails 8?
Po pierwsze, Solid Queue zastępuje Sidekiq i Redisa – zadania w tle działają na SQLite lub PostgreSQL. To oznacza, że do uruchomienia agenta AI, który przetwarza zapytania asynchronicznie, nie potrzebujesz żadnej dodatkowej infrastruktury. Po drugie, Kamal 2 pozwala na deployment jedną komendą. Po trzecie, Rails nadal oferuje najszybszą ścieżkę od pomysłu do działającego prototypu.
Wyobraźmy sobie prostego agenta, który odpowiada na pytania o naszej dokumentacji:
# app/models/chat.rb
class Chat < ApplicationRecord
acts_as_chat
def system_prompt
"Jesteś asystentem firmy X. Odpowiadaj na pytania " "na podstawie dostarczonej dokumentacji. " "Jeśli nie znasz odpowiedzi, powiedz o tym wprost."
end
end# app/controllers/chats_controller.rb
class ChatsController < ApplicationController
def create
@chat = Chat.create!(model: "gpt-4o")
@chat.ask(params[:message])
redirect_to @chat
end
endZ ruby_llm i Rails 8 mamy działającego chatbota w kilkunastu linijkach kodu. Dodajmy do tego Turbo Streams dla real-time’owych odpowiedzi i mamy pełnoprawną aplikację konwersacyjną.
Dla bardziej zaawansowanych scenariuszy – na przykład agenta, który przeszukuje bazę wiedzy – langchainrb z Pgvector daje nam RAG out of the box. Rails migracja, kilka modeli, kontroler i widok. Żaden inny framework nie pozwala na tak szybkie przejście od pomysłu do MVP.
Podsumowanie
Ekosystem AI w Ruby nie jest (i prawdopodobnie nigdy nie będzie) tak rozbudowany jak w Pythonie. Ale nie o to chodzi. Chodzi o to, żeby programiści Ruby mogli budować aplikacje AI bez zmiany stosu technologicznego. I to jest dziś jak najbardziej możliwe.
Jeśli budujesz aplikację webową, która potrzebuje integracji z LLM – czat, asystent, generowanie treści, analiza dokumentów – Ruby i Rails dają Ci wszystko, czego potrzebujesz. Szybko, elegancko i bez zbędnej złożoności. Dokładnie tak, jak lubią to Rubiści.