- RubyLLM permite criar em apps Ruby workflows de IA como chatbots, agentes de IA, RAG e geração de conteúdo em um único framework
- Lida com GPT, Claude e Ollama local pela mesma interface, com dependências limitadas a Faraday, Zeitwerk e Marcel
- Vai além de chat e cobre análise de imagem e vídeo, transcrição de áudio, processamento de documentos, geração de imagens, embeddings, moderação, chamadas de ferramentas, saída estruturada e streaming
- No Rails, oferece
acts_as_chat, carregamento de modelos e um gerador opcional de UI de chat, além de abrir uma interface de chat pronta para uso em ` - Suporta OpenAI, xAI, Anthropic, Gemini, VertexAI, Bedrock, DeepSeek, Mistral, Ollama, OpenRouter, Perplexity, GPUStack e APIs compatíveis com OpenAI
Um único framework de IA para Ruby
- RubyLLM é uma ferramenta para lidar com os principais provedores de IA em um único framework Ruby
- Voltado à criação de chatbots, agentes de IA, aplicações RAG, geradores de conteúdo e outros workflows de IA
- Já é usado em produção no Chat with Work
Interface que esconde as diferenças entre APIs de provedores
- Foca em reduzir o problema de cada provedor de IA ter clientes, APIs, formatos de resposta e convenções diferentes
- É possível usar GPT, Claude e Ollama local com a mesma interface
- Usa apenas 3 dependências: Faraday, Zeitwerk e Marcel
Forma básica de uso
- Para perguntas simples, cria-se um objeto de chat com
RubyLLM.chate executa-se comchat.ask- Exemplo:
chat.ask "What's the best way to learn Ruby?"
- Exemplo:
- A análise de arquivos funciona passando o arquivo na opção
with:- Imagem:
ruby_conf.jpg - Vídeo:
video.mp4 - Áudio:
meeting.wav - PDF:
contract.pdf - Código:
app.rb
- Imagem:
- Vários arquivos podem ser passados em um array para análise de uma vez
- Exemplo:
with: ["diagram.png", "report.pdf", "notes.txt"]
- Exemplo:
- Respostas em streaming passam um bloco para processar
chunk.content
Escopo dos recursos de IA
RubyLLM.paintexecuta geração de imagensRubyLLM.embedgera embeddings de textoRubyLLM.transcribetranscreve áudio para textoRubyLLM.moderateverifica a segurança do conteúdo- Com classes que herdam de
RubyLLM::Tool, é possível fazer a IA chamar métodos Ruby- O exemplo da ferramenta
Weatherrecebe latitude e longitude e busca os dados meteorológicos atuais na API Open-Meteo
- O exemplo da ferramenta
- Com
RubyLLM::Agent, é possível definir agentes reutilizáveis com instruções e ferramentas- O exemplo
WeatherAssistantusa o modelogpt-5-nano, instruções para respostas concisas e a ferramentaWeather
- O exemplo
- Com
RubyLLM::Schema, é possível definir um esquema de saída estruturada- O exemplo
ProductSchemadefine os camposname,priceefeatures
- O exemplo
Lista de recursos e suporte a provedores
- Os principais recursos são os seguintes
- Chat: IA conversacional baseada em
RubyLLM.chat - Vision: análise de imagem e vídeo
- Audio: transcrição e compreensão de voz baseadas em
RubyLLM.transcribe - Documents: extração de tipos de arquivo como PDF, CSV e JSON
- Image generation: geração de imagens baseada em
RubyLLM.paint - Embeddings: geração de embeddings baseada em
RubyLLM.embed - Moderation: verificação de segurança de conteúdo baseada em
RubyLLM.moderate - Tools: a IA chama métodos Ruby
- Agents: assistentes reutilizáveis baseados em
RubyLLM::Agent - Structured output: saída estruturada baseada em esquema JSON
- Streaming: respostas em tempo real baseadas em blocos
- Rails: integração com ActiveRecord baseada em
acts_as_chat - Async: concorrência baseada em Fiber
- Model registry: mais de 800 modelos com detecção de recursos e informações de preço
- Extended thinking: controlar, visualizar e salvar o processo de raciocínio do modelo
- Chat: IA conversacional baseada em
- Os provedores suportados são OpenAI, xAI, Anthropic, Gemini, VertexAI, Bedrock, DeepSeek, Mistral, Ollama, OpenRouter, Perplexity, GPUStack e APIs compatíveis com OpenAI
Instalação e integração com Rails
- Para instalar, adicione
gem 'ruby_llm'ao Gemfile e executebundle install - As chaves de API são configuradas em
config/initializers/ruby_llm.rb- Exemplo:
config.openai_api_key = ENV['OPENAI_API_KEY']
- Exemplo:
- A integração com Rails é instalada com os seguintes comandos
bin/rails generate ruby_llm:installbin/rails db:migratebin/rails ruby_llm:load_models # v1.13+
- Opcionalmente, é possível adicionar uma UI de chat
bin/rails generate ruby_llm:chat_ui
- Ao declarar
acts_as_chatem um modelo Rails, é possível usar chat baseado em ActiveRecord- O modelo de exemplo declara
acts_as_chatemChat < ApplicationRecord - É possível criar um chat com
Chat.create! model: "claude-sonnet-4"e fazer perguntas passando arquivos
- O modelo de exemplo declara
- A interface de chat pronta pode ser aberta em
http://localhost:3000/chats
1 comentários
Comentários do Hacker News
O RubyLLM foi surpreendentemente bom, e em termos de usabilidade é mais próximo do framework de IA da Vercel
Ele tenta equilibrar a conveniência de funcionar logo de cara com flexibilidade; isso traz dificuldades, mas no geral achei bom
O principal incômodo real que tive foi o cache nem sempre funcionar. Por exemplo, a xAI só oferece suporte à completions API e retorna a thought signature incorretamente, o que causa problemas
https://github.com/crmne/ruby_llm/blob/main/lib/ruby_llm/pro...
Existe o gem open source Raix, construído sobre a abstração do RubyLLM, e ele é bastante usado
https://github.com/OlympiaAI/raix
Estou usando RubyLLM em produção e gosto muito. É um framework excelente e fácil de usar
Como outras pessoas comentaram, foi frustrante a Responses API não ter suporte por padrão; parecia uma omissão grande. Existe um conector feito por outro desenvolvedor, mas tem bugs e a qualidade não chega perto da do gem principal
Estou animado com o desenvolvimento daqui para frente, especialmente o 2.0. Agora que a Responses API entrou nativamente, com certeza vou conferir
A OpenAI tem 2 protocolos com capacidades diferentes, e para acessar todos os modelos da VertexAI é preciso oferecer suporte a vários protocolos sob um único provider, então essa suposição deixou de valer
Por isso foi necessário um grande refactor para separar Protocols e Providers e fazer o roteamento transparente para Protocols diferentes por modelo, mesmo sob o mesmo Provider. Esse trabalho deve entrar no RubyLLM 2.0
Se tiver curiosidade, estes commits valem ver: https://github.com/crmne/ruby_llm/commit/d398354da493570b050...
https://github.com/crmne/ruby_llm/commit/0875ce2dfeae9d28a3a...
O RubyLLM é muito fácil de usar. Usei bastante em um projeto no ano passado
O ponto fraco foi a dificuldade de instrumentar para ter observabilidade de rastreamento de verdade, e havia um padrão de apagar o modelo interno durante retries, então o histórico visível ficava limpo, mas não era muito bom para ver com precisão a sequência real de chamadas de API
https://rubyllm.com/instrumentation/
Estou construindo algo focado só no Claude e não pretendo sair do ecossistema da Anthropic. Mesmo assim, fico curioso se o RubyLLM ainda teria vantagens em relação a usar diretamente o SDK Ruby da Anthropic
Em outras palavras, quero entender se essa escolha está mais para a diferença entre Fog e aws-sdk-s3, ou entre Active Storage e aws-sdk-s3
O legal no RubyLLM é uma DSL com encadeamento de métodos no estilo ActiveRecord, a estrutura para organizar agentes, ferramentas e prompts, e a portabilidade que permitiu testar e migrar facilmente de Anthropic para DeepSeek, reduzindo os custos em mais de 90%
Também gosto da integração com ActiveRecord, que permite salvar cada chat no banco de dados só com
bin/rails generate ruby_llm:install. Baixar periodicamente o histórico salvo das conversas e passar para o claude code refinar as instruções do agente também ajudou muitoSó pensando em resiliência, vale considerar o que você faria se a API da Anthropic cair justamente no dia em que você mais precisar do serviço
Uso RubyLLM em um projeto paralelo e ele é excelente
É interessante ver que coisas que apareceram nas perguntas e comentários da SF Ruby conf do ano passado já foram lançadas como funcionalidades do ecossistema: https://youtu.be/y535u1EWqAg?si=rbyv52T035apKwQk
Há alguns meses usei RubyLLM com certa profundidade, e o design e a implementação eram muito bons
Tenho clientes de LLM que fiz eu mesmo em várias linguagens Lisp, e cheguei a pensar em aproveitar parte do design do RubyLLM. Imitação é elogio
Obrigado por levar Ruby para a comunidade de IA e por fazer esse trabalho em open source
Uma boa linguagem merece ser mais explorada e receber mais atenção
O Laravel também tem uma biblioteca parecida
https://laravel.com/docs/13.x/ai-sdk
Também uso RubyLLM em produção, e é a biblioteca mais elegante que já vi nessa área até agora
Também gostei de como o issue tracker é administrado. Ao selecionar “Feature Request”, você precisa explicar como tentou encontrar uma solução alternativa e por que aquilo deveria entrar no RubyLLM, o que ajuda a evitar que o escopo cresça sem parar