1P by GN⁺ | ★ favorite | 댓글 1개
  • RubyLLM은 Ruby 앱에서 챗봇, AI 에이전트, RAG, 콘텐츠 생성 같은 AI 워크플로를 한 프레임워크로 만들게 해줌
  • GPT, Claude, 로컬 Ollama 등을 같은 인터페이스로 다루며, 의존성은 Faraday, Zeitwerk, Marcel 3개로 제한됨
  • 채팅뿐 아니라 이미지·비디오 분석, 오디오 전사, 문서 처리, 이미지 생성, 임베딩, 모더레이션, 도구 호출, 구조화 출력, 스트리밍까지 포괄함
  • Rails에서는 acts_as_chat, 모델 로딩, 선택적 채팅 UI 생성기를 제공하고 ` 바로 쓸 수 있는 채팅 인터페이스를 열 수 있음
  • OpenAI, xAI, Anthropic, Gemini, VertexAI, Bedrock, DeepSeek, Mistral, Ollama, OpenRouter, Perplexity, GPUStack, OpenAI 호환 API를 지원함

Ruby용 단일 AI 프레임워크

  • RubyLLM은 주요 AI 제공자를 하나의 Ruby 프레임워크로 다루기 위한 도구임
  • 챗봇, AI 에이전트, RAG 애플리케이션, 콘텐츠 생성기, 기타 AI 워크플로 구축을 대상으로 함
  • Chat with Work에서 실제 사용 중임

제공자별 API 차이를 감추는 인터페이스

  • AI 제공자마다 클라이언트, API, 응답 형식, 관례가 달라지는 문제를 줄이는 데 초점을 둠
  • 동일한 인터페이스로 GPT, Claude, 로컬 Ollama를 사용할 수 있음
  • 의존성은 Faraday, Zeitwerk, Marcel 3개만 사용함

기본 사용 방식

  • 간단한 질문은 RubyLLM.chat으로 채팅 객체를 만들고 chat.ask로 실행함
    • 예: chat.ask "What's the best way to learn Ruby?"
  • 파일 분석은 with: 옵션에 파일을 전달하는 방식임
    • 이미지: ruby_conf.jpg
    • 비디오: video.mp4
    • 오디오: meeting.wav
    • PDF: contract.pdf
    • 코드: app.rb
  • 여러 파일은 배열로 전달해 한 번에 분석할 수 있음
    • 예: with: ["diagram.png", "report.pdf", "notes.txt"]
  • 스트리밍 응답은 블록을 넘겨 chunk.content를 처리함

AI 기능 범위

  • RubyLLM.paint이미지 생성을 수행함
  • RubyLLM.embed로 텍스트 임베딩을 생성함
  • RubyLLM.transcribe로 오디오를 텍스트로 전사함
  • RubyLLM.moderate로 콘텐츠 안전성을 확인함
  • RubyLLM::Tool을 상속한 클래스로 AI가 Ruby 메서드를 호출하게 할 수 있음
    • 예시 Weather 도구는 위도와 경도를 받아 Open-Meteo API에서 현재 날씨 데이터를 가져옴
  • RubyLLM::Agent로 지시문과 도구를 포함한 재사용 가능한 에이전트를 정의할 수 있음
    • 예시 WeatherAssistantgpt-5-nano 모델, 간결한 응답 지시문, Weather 도구를 사용함
  • RubyLLM::Schema구조화 출력 스키마를 정의할 수 있음
    • 예시 ProductSchemaname, price, features 필드를 정의함

기능 목록과 제공자 지원

  • 주요 기능은 다음과 같음
    • Chat: RubyLLM.chat 기반 대화형 AI
    • Vision: 이미지와 비디오 분석
    • Audio: RubyLLM.transcribe 기반 음성 전사와 이해
    • Documents: PDF, CSV, JSON 등 파일 타입에서 추출
    • Image generation: RubyLLM.paint 기반 이미지 생성
    • Embeddings: RubyLLM.embed 기반 임베딩 생성
    • Moderation: RubyLLM.moderate 기반 콘텐츠 안전성 확인
    • Tools: AI가 Ruby 메서드를 호출
    • Agents: RubyLLM::Agent 기반 재사용 가능한 어시스턴트
    • Structured output: JSON 스키마 기반 구조화 출력
    • Streaming: 블록 기반 실시간 응답
    • Rails: acts_as_chat 기반 ActiveRecord 통합
    • Async: Fiber 기반 동시성
    • Model registry: 기능 감지와 가격 정보를 포함한 800개 이상 모델
    • Extended thinking: 모델 사고 과정 제어, 보기, 저장
  • 지원 제공자는 OpenAI, xAI, Anthropic, Gemini, VertexAI, Bedrock, DeepSeek, Mistral, Ollama, OpenRouter, Perplexity, GPUStack, OpenAI 호환 API임

설치와 Rails 통합

  • 설치는 Gemfile에 gem 'ruby_llm'을 추가한 뒤 bundle install을 실행함
  • API 키는 config/initializers/ruby_llm.rb에서 설정함
    • 예: config.openai_api_key = ENV['OPENAI_API_KEY']
  • Rails 통합은 다음 명령으로 설치함
    • bin/rails generate ruby_llm:install
    • bin/rails db:migrate
    • bin/rails ruby_llm:load_models # v1.13+
  • 선택적으로 채팅 UI를 추가할 수 있음
    • bin/rails generate ruby_llm:chat_ui
  • Rails 모델에서 acts_as_chat을 선언하면 ActiveRecord 기반 채팅을 사용할 수 있음
    • 예시 모델은 Chat < ApplicationRecordacts_as_chat을 선언함
    • Chat.create! model: "claude-sonnet-4"로 채팅을 만들고 파일을 전달해 질문할 수 있음
  • 준비된 채팅 인터페이스는 http://localhost:3000/chats에서 열 수 있음

댓글과 토론

Hacker News 의견들
  • RubyLLM이 의외로 좋았고, 사용성 면에서는 Vercel의 AI 프레임워크에 가까움
    바로 동작하는 편의성과 유연성 사이에서 균형을 잡으려 하는데, 그만큼 어려움도 있지만 전반적으로 괜찮았음
    실제로 겪은 큰 불편은 캐시가 항상 동작하지 않는다는 점임. 예를 들어 xAI는 completions API만 지원하고 thought signature가 잘못 반환돼 문제가 생김

  • RubyLLM의 추상화 위에 만든 오픈소스 gem Raix가 있고 꽤 많이 쓰임
    https://github.com/OlympiaAI/raix

  • RubyLLM을 프로덕션에서 쓰고 있고 아주 좋아함. 훌륭하고 쓰기 쉬운 프레임워크임
    Responses API가 기본 지원되지 않는 점은 다른 사람 말처럼 답답했는데, 큰 누락처럼 보였음. 다른 개발자가 만든 커넥터가 있긴 하지만 버그가 있고 메인 gem만큼 품질이 높지는 않음
    앞으로의 개발, 특히 2.0이 기대됨. 이제 Responses API가 네이티브로 들어갔다면 꼭 확인해볼 생각임

    • RubyLLM 1.x에서 Responses API가 구현되지 않았던 이유는, 내부적으로 제공자와 프로토콜이 1:1로 대응된다고 사실상 가정했기 때문임
      OpenAI는 서로 다른 기능을 가진 프로토콜이 2개이고, VertexAI의 모든 모델에 접근하려면 단일 제공자 아래 여러 프로토콜을 지원해야 해서 이 가정이 더 이상 맞지 않게 됨
      그래서 Protocols와 Providers를 분리하고, 같은 Provider 아래에서도 모델별로 다른 Protocol로 투명하게 라우팅하는 큰 리팩터링이 필요했음. 이 작업이 RubyLLM 2.0에 포함될 예정임
      궁금하면 참고할 만한 커밋: https://github.com/crmne/ruby_llm/commit/d398354da493570b050...
      https://github.com/crmne/ruby_llm/commit/0875ce2dfeae9d28a3a...
  • RubyLLM은 사용하기 매우 쉬움. 작년에 한 프로젝트에서 많이 활용했음
    단점은 진짜 추적 관측성을 위해 계측하기 어려웠고, 재시도 시 내부 모델을 삭제하는 패턴이 있어서 보이는 이력은 깔끔하지만 실제 API 호출 순서를 정확히 보기는 별로였음

  • Claude만 바라보는 무언가를 만들고 있고, Anthropic 생태계를 벗어날 계획은 없음. 이런 경우에도 RubyLLM이 Anthropic의 Ruby SDK를 직접 쓰는 것보다 이점이 있는지 궁금함
    다르게 말하면 이 선택이 Fog와 aws-sdk-s3 사이의 선택에 가까운지, 아니면 Active Storage와 aws-sdk-s3 사이의 선택에 가까운지 궁금함

    • Active Storage와 aws-sdk-s3의 관계에 더 가깝다고 봄
      RubyLLM에서 좋은 점은 ActiveRecord처럼 메서드를 체이닝할 수 있는 DSL, 에이전트·도구·프롬프트를 정리하는 구조, Anthropic에서 DeepSeek으로 쉽게 테스트하고 옮겨 비용을 90% 넘게 줄일 수 있었던 이식성임
      bin/rails generate ruby_llm:install만으로 각 채팅을 데이터베이스에 저장할 수 있는 ActiveRecord 통합도 좋음. 저장된 채팅 이력을 주기적으로 내려받아 claude code에 주고 에이전트 지시문을 다듬게 하는 것도 큰 도움이 됐음
    • 나중에 어떤 제공자든 선택할 수 있는 도구가 있는데 굳이 한 제공자에 종속되도록 만들 이유가 있나 싶음
      장애 대응만 봐도, 꼭 서비스가 필요한 날 Anthropic API가 내려가면 어떻게 할 건지 생각해야 함
  • 사이드 프로젝트에서 RubyLLM을 쓰는데 훌륭함
    작년 SF Ruby conf의 질문과 코멘트에 있던 것들이 이미 생태계의 기능으로 출시된 점이 흥미로움: https://youtu.be/y535u1EWqAg?si=rbyv52T035apKwQk

  • 몇 달 전 RubyLLM을 꽤 깊게 써봤는데, 설계와 구현이 아주 좋았음
    여러 Lisp 언어로 직접 만든 LLM 클라이언트가 있는데 RubyLLM의 설계를 일부 가져올까 생각했을 정도임. 모방은 칭찬임

  • Ruby를 AI 커뮤니티에 가져오고 오픈소스로 작업해줘서 고마움
    좋은 언어는 더 많이 탐구되고 주목받아야 함

    • Ruby 얘기할 때 Hacker News가 MINASWAN 분위기가 되는 점이 좋음
  • Laravel에도 비슷한 라이브러리가 있음
    https://laravel.com/docs/13.x/ai-sdk

  • RubyLLM을 프로덕션에서도 쓰고 있는데, 지금까지 본 이 분야 라이브러리 중 가장 우아한 라이브러리
    이슈 트래커 운영 방식도 좋았음. “Feature Request”를 선택하면 우회 방법을 어떻게 찾아봤는지, 왜 RubyLLM에 들어가야 한다고 보는지 등을 설명하게 해서 범위가 끝없이 커지는 걸 막음