1 puntos por GN⁺ 4 시간 전 | 1 comentarios | Compartir por WhatsApp
  • 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.chat y se ejecuta con chat.ask
    • Ejemplo: chat.ask "What's the best way to learn Ruby?"
  • 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
  • Se pueden pasar varios archivos como arreglo para analizarlos de una sola vez
    • Ejemplo: with: ["diagram.png", "report.pdf", "notes.txt"]
  • Las respuestas en streaming se manejan pasando un bloque para procesar chunk.content

Alcance de las funciones de IA

  • RubyLLM.paint realiza generación de imágenes
  • RubyLLM.embed genera embeddings de texto
  • RubyLLM.transcribe transcribe audio a texto
  • RubyLLM.moderate verifica 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 Weather recibe latitud y longitud y obtiene datos del clima actual desde la API de Open-Meteo
  • Con RubyLLM::Agent se pueden definir agentes reutilizables con instrucciones y herramientas
    • El ejemplo WeatherAssistant usa el modelo gpt-5-nano, instrucciones de respuesta concisas y la herramienta Weather
  • Con RubyLLM::Schema se puede definir un esquema de salida estructurada
    • El ejemplo ProductSchema define los campos name, price y features

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
  • 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 ejecuta bundle install
  • La API key se configura en config/initializers/ruby_llm.rb
    • Ejemplo: config.openai_api_key = ENV['OPENAI_API_KEY']
  • La integración con Rails se instala con los siguientes comandos
    • bin/rails generate ruby_llm:install
    • bin/rails db:migrate
    • bin/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_chat en un modelo de Rails, puedes usar chat basado en ActiveRecord
    • El modelo de ejemplo declara acts_as_chat en Chat < ApplicationRecord
    • Puedes crear un chat con Chat.create! model: "claude-sonnet-4" y hacer preguntas pasando archivos
  • La interfaz de chat lista para usar se puede abrir en http://localhost:3000/chats

1 comentarios

 
GN⁺ 4 시간 전
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.

  • 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.

    • La razón por la que la Responses API no estaba implementada en RubyLLM 1.x era que internamente se asumía, en la práctica, una relación 1:1 entre proveedor y protocolo.
      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.

  • 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.

    • Yo diría que se parece más a la relación 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.
    • Si existe una herramienta que te permite elegir cualquier proveedor después, no veo por qué construir algo para quedar atado a uno solo.
      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.

    • Me gusta que, cuando se habla de Ruby, Hacker News tenga un ambiente MINASWAN.
  • 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.