- RubyLLM permite crear en apps Ruby flujos de trabajo de IA como chatbots, agentes de IA, RAG y generación de contenido dentro de un solo framework
- Maneja GPT, Claude y Ollama local, entre otros, con una misma interfaz, y limita sus dependencias a Faraday, Zeitwerk y Marcel
- Abarca no solo chat, sino también análisis de imágenes y video, transcripción de audio, procesamiento de documentos, generación de imágenes, embeddings, moderación, llamada de herramientas, salidas estructuradas y streaming
- En Rails ofrece
acts_as_chat, carga de modelos y un generador opcional de UI de chat, y permite abrir una interfaz de chat lista para usar - Soporta OpenAI, xAI, Anthropic, Gemini, VertexAI, Bedrock, DeepSeek, Mistral, Ollama, OpenRouter, Perplexity, GPUStack y APIs compatibles con OpenAI
Un framework único de IA para Ruby
- RubyLLM es una herramienta para trabajar con los principales proveedores de IA desde un solo framework de Ruby
- Está orientado a construir chatbots, agentes de IA, aplicaciones RAG, generadores de contenido y otros flujos de trabajo de IA
- Ya se usa en producción en Chat with Work
Una interfaz que oculta las diferencias entre APIs de proveedores
- Se enfoca en reducir el problema de que cada proveedor de IA tenga clientes, APIs, formatos de respuesta y convenciones distintos
- Permite usar GPT, Claude y Ollama local con una misma interfaz
- Usa solo 3 dependencias: Faraday, Zeitwerk y Marcel
Forma básica de uso
- Para preguntas simples, se crea un objeto de chat con
RubyLLM.chaty se ejecuta conchat.ask- Ejemplo:
chat.ask "What's the best way to learn Ruby?"
- Ejemplo:
- El análisis de archivos funciona pasando el archivo en la opción
with:- Imagen:
ruby_conf.jpg - Video:
video.mp4 - Audio:
meeting.wav - PDF:
contract.pdf - Código:
app.rb
- Imagen:
- Se pueden pasar varios archivos como arreglo para analizarlos de una sola vez
- Ejemplo:
with: ["diagram.png", "report.pdf", "notes.txt"]
- Ejemplo:
- Las respuestas en streaming se manejan pasando un bloque para procesar
chunk.content
Alcance de las funciones de IA
RubyLLM.paintrealiza generación de imágenesRubyLLM.embedgenera embeddings de textoRubyLLM.transcribetranscribe audio a textoRubyLLM.moderateverifica la seguridad del contenido- Con clases que heredan de
RubyLLM::Tool, se puede hacer que la IA llame métodos Ruby- La herramienta de ejemplo
Weatherrecibe latitud y longitud y obtiene datos del clima actual desde la API de Open-Meteo
- La herramienta de ejemplo
- Con
RubyLLM::Agentse pueden definir agentes reutilizables con instrucciones y herramientas- El ejemplo
WeatherAssistantusa el modelogpt-5-nano, instrucciones de respuesta concisas y la herramientaWeather
- El ejemplo
- Con
RubyLLM::Schemase puede definir un esquema de salida estructurada- El ejemplo
ProductSchemadefine los camposname,priceyfeatures
- El ejemplo
Lista de funciones y soporte de proveedores
- Las funciones principales son las siguientes
- Chat: IA conversacional basada en
RubyLLM.chat - Vision: análisis de imágenes y video
- Audio: transcripción y comprensión de voz basadas en
RubyLLM.transcribe - Documents: extracción desde tipos de archivo como PDF, CSV y JSON
- Image generation: generación de imágenes basada en
RubyLLM.paint - Embeddings: generación de embeddings basada en
RubyLLM.embed - Moderation: verificación de seguridad de contenido basada en
RubyLLM.moderate - Tools: la IA puede llamar métodos Ruby
- Agents: asistentes reutilizables basados en
RubyLLM::Agent - Structured output: salida estructurada basada en esquemas JSON
- Streaming: respuestas en tiempo real basadas en bloques
- Rails: integración con ActiveRecord basada en
acts_as_chat - Async: concurrencia basada en Fiber
- Model registry: más de 800 modelos con detección de funciones e información de precios
- Extended thinking: controlar, ver y guardar el proceso de razonamiento del modelo
- Chat: IA conversacional basada en
- Los proveedores soportados son OpenAI, xAI, Anthropic, Gemini, VertexAI, Bedrock, DeepSeek, Mistral, Ollama, OpenRouter, Perplexity, GPUStack y APIs compatibles con OpenAI
Instalación e integración con Rails
- Para instalarlo, agrega
gem 'ruby_llm'al Gemfile y luego ejecutabundle install - La API key se configura en
config/initializers/ruby_llm.rb- Ejemplo:
config.openai_api_key = ENV['OPENAI_API_KEY']
- Ejemplo:
- La integración con Rails se instala con los siguientes comandos
bin/rails generate ruby_llm:installbin/rails db:migratebin/rails ruby_llm:load_models # v1.13+
- Opcionalmente, se puede agregar una UI de chat
bin/rails generate ruby_llm:chat_ui
- Si declaras
acts_as_chaten un modelo de Rails, puedes usar chat basado en ActiveRecord- El modelo de ejemplo declara
acts_as_chatenChat < ApplicationRecord - Puedes crear un chat con
Chat.create! model: "claude-sonnet-4"y hacer preguntas pasando archivos
- El modelo de ejemplo declara
- La interfaz de chat lista para usar se puede abrir en
http://localhost:3000/chats
1 comentarios
Comentarios en Hacker News
RubyLLM resultó sorprendentemente bueno y, en usabilidad, se parece al framework de AI de Vercel.
Intenta encontrar un equilibrio entre la conveniencia de que funcione de inmediato y la flexibilidad; eso lo hace difícil, pero en general estuvo bastante bien.
El mayor problema real que tuve fue que el caché no siempre funciona. Por ejemplo, xAI solo soporta la API de completions y devuelve mal la thought signature, lo que causa problemas.
https://github.com/crmne/ruby_llm/blob/main/lib/ruby_llm/pro...
Existe el gem open source Raix, construido sobre la abstracción de RubyLLM, y se usa bastante.
https://github.com/OlympiaAI/raix
Uso RubyLLM en producción y me encanta. Es un framework excelente y fácil de usar.
Que la Responses API no estuviera soportada por defecto, como dijo otra persona, sí frustraba y parecía una omisión importante. Hay un conector hecho por otro desarrollador, pero tiene bugs y su calidad no está al nivel del gem principal.
Tengo muchas ganas de ver lo que viene, especialmente 2.0. Ahora que la Responses API ya está integrada de forma nativa, definitivamente pienso revisarlo.
OpenAI tiene 2 protocolos con capacidades distintas, y para acceder a todos los modelos de VertexAI hay que soportar varios protocolos bajo un solo proveedor, así que esa suposición dejó de ser válida.
Por eso hizo falta un refactor grande para separar Protocols y Providers, y enrutar de forma transparente a distintos Protocols según el modelo incluso dentro del mismo Provider. Ese trabajo se incluirá en RubyLLM 2.0.
Si te da curiosidad, estos commits sirven de referencia: https://github.com/crmne/ruby_llm/commit/d398354da493570b050...
https://github.com/crmne/ruby_llm/commit/0875ce2dfeae9d28a3a...
RubyLLM es muy fácil de usar. Lo aproveché bastante en un proyecto el año pasado.
La desventaja fue que era difícil instrumentarlo para tener observabilidad de trazas real, y además tiene un patrón de borrar el modelo interno al reintentar, así que el historial visible queda limpio, pero no sirve mucho para ver con precisión la secuencia real de llamadas a la API.
https://rubyllm.com/instrumentation/
Estoy construyendo algo enfocado solo en Claude y no tengo planes de salir del ecosistema de Anthropic. Incluso en ese caso, me pregunto si RubyLLM ofrece ventajas frente a usar directamente el SDK de Ruby de Anthropic.
Dicho de otra forma, me pregunto si esta elección se parece más a elegir entre Fog y aws-sdk-s3, o entre Active Storage y aws-sdk-s3.
Lo bueno de RubyLLM es el DSL encadenable al estilo ActiveRecord, la estructura para organizar agentes, herramientas y prompts, y la portabilidad que permitió probar y movernos fácilmente de Anthropic a DeepSeek para reducir costos en más de 90%.
También es muy buena la integración con ActiveRecord, que permite guardar cada chat en la base de datos solo con
bin/rails generate ruby_llm:install. Descargar periódicamente el historial guardado de chats y pasárselo a claude code para pulir las instrucciones del agente también ayudó muchísimo.Tan solo pensando en resiliencia, hay que preguntarse qué harías si el día que más necesitas el servicio se cae la API de Anthropic.
Uso RubyLLM en un side project y es excelente.
Me parece interesante que cosas que aparecieron en las preguntas y comentarios de la SF Ruby conf del año pasado ya hayan salido como funcionalidades del ecosistema: https://youtu.be/y535u1EWqAg?si=rbyv52T035apKwQk
Hace unos meses usé RubyLLM con bastante profundidad y tanto el diseño como la implementación me parecieron muy buenos.
Tengo clientes de LLM hechos por mí en varios lenguajes Lisp, y hasta pensé en tomar partes del diseño de RubyLLM. La imitación es un elogio.
Gracias por llevar Ruby a la comunidad de AI y por trabajar en open source.
Un buen lenguaje merece ser más explorado y recibir más atención.
Laravel también tiene una librería parecida.
https://laravel.com/docs/13.x/ai-sdk
También uso RubyLLM en producción y es la librería más elegante que he visto hasta ahora en esta área.
También me gustó cómo manejan el issue tracker. Si eliges “Feature Request”, te piden explicar qué soluciones alternativas ya intentaste encontrar y por qué crees que debería incorporarse a RubyLLM, lo que evita que el alcance crezca sin límite.