1 pontos por GN⁺ 4 시간 전 | 1 comentários | Compartilhar no WhatsApp
  • 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.chat e executa-se com chat.ask
    • Exemplo: chat.ask "What's the best way to learn Ruby?"
  • 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
  • Vários arquivos podem ser passados em um array para análise de uma vez
    • Exemplo: with: ["diagram.png", "report.pdf", "notes.txt"]
  • Respostas em streaming passam um bloco para processar chunk.content

Escopo dos recursos de IA

  • RubyLLM.paint executa geração de imagens
  • RubyLLM.embed gera embeddings de texto
  • RubyLLM.transcribe transcreve áudio para texto
  • RubyLLM.moderate verifica 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 Weather recebe latitude e longitude e busca os dados meteorológicos atuais na API Open-Meteo
  • Com RubyLLM::Agent, é possível definir agentes reutilizáveis com instruções e ferramentas
    • O exemplo WeatherAssistant usa o modelo gpt-5-nano, instruções para respostas concisas e a ferramenta Weather
  • Com RubyLLM::Schema, é possível definir um esquema de saída estruturada
    • O exemplo ProductSchema define os campos name, price e features

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
  • 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 execute bundle install
  • As chaves de API são configuradas em config/initializers/ruby_llm.rb
    • Exemplo: config.openai_api_key = ENV['OPENAI_API_KEY']
  • A integração com Rails é instalada com os seguintes comandos
    • bin/rails generate ruby_llm:install
    • bin/rails db:migrate
    • bin/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_chat em um modelo Rails, é possível usar chat baseado em ActiveRecord
    • O modelo de exemplo declara acts_as_chat em Chat < ApplicationRecord
    • É possível criar um chat com Chat.create! model: "claude-sonnet-4" e fazer perguntas passando arquivos
  • A interface de chat pronta pode ser aberta em http://localhost:3000/chats

1 comentários

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

  • 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

    • O motivo de a Responses API não ter sido implementada no RubyLLM 1.x era que, internamente, havia na prática a suposição de que provider e protocol tinham uma relação 1:1
      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

  • 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

    • Acho que é mais parecido com a relação 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 muito
    • Se existe uma ferramenta que permite escolher qualquer provider depois, não vejo por que construir algo para ficar preso a um só
      Só 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

    • Gosto que, quando se fala de Ruby, o Hacker News entra num clima de MINASWAN
  • 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