# RubyLLM: 주요 AI 제공자를 하나로 묶는 Ruby 프레임워크

> Clean Markdown view of GeekNews topic #30811. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=30811](https://news.hada.io/topic?id=30811)
- GeekNews Markdown: [https://news.hada.io/topic/30811.md](https://news.hada.io/topic/30811.md)
- Type: GN+
- Author: [xguru](https://news.hada.io/@xguru)
- Published: 2026-06-25T10:17:51+09:00
- Updated: 2026-06-25T10:17:51+09:00
- Original source: [rubyllm.com](https://rubyllm.com/)
- Points: 1
- Comments: 1

## Topic Body

- **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](https://chatwithwork.com/)에서 실제 사용 중임

### 제공자별 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`로 지시문과 도구를 포함한 재사용 가능한 에이전트를 정의할 수 있음
  - 예시 `WeatherAssistant`는 `gpt-5-nano` 모델, 간결한 응답 지시문, `Weather` 도구를 사용함
- `RubyLLM::Schema`로 **구조화 출력** 스키마를 정의할 수 있음
  - 예시 `ProductSchema`는 `name`, `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 < ApplicationRecord`에 `acts_as_chat`을 선언함
  - `Chat.create! model: "claude-sonnet-4"`로 채팅을 만들고 파일을 전달해 질문할 수 있음
- 준비된 채팅 인터페이스는 `http://localhost:3000/chats`에서 열 수 있음

## Comments



### Comment 60290

- Author: neo
- Created: 2026-06-25T10:17:52+09:00
- Points: 1

###### [Hacker News 의견들](https://news.ycombinator.com/item?id=48660711) 
- **RubyLLM**이 의외로 좋았고, 사용성 면에서는 Vercel의 AI 프레임워크에 가까움  
  바로 동작하는 편의성과 유연성 사이에서 균형을 잡으려 하는데, 그만큼 어려움도 있지만 전반적으로 괜찮았음  
  실제로 겪은 큰 불편은 캐시가 항상 동작하지 않는다는 점임. 예를 들어 xAI는 completions API만 지원하고 thought signature가 잘못 반환돼 문제가 생김
  - **Responses API**가 이제 구현됐고 RubyLLM 2.0에 들어갈 예정임  
    [https://github.com/crmne/ruby_llm/blob/main/lib/ruby_llm/pro...](<https://github.com/crmne/ruby_llm/blob/main/lib/ruby_llm/protocols/responses.rb>)

- RubyLLM의 추상화 위에 만든 오픈소스 gem **Raix**가 있고 꽤 많이 쓰임  
  [https://github.com/OlympiaAI/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/d398354da493570b0509afe737e12b29e65907f4>)  
    [https://github.com/crmne/ruby_llm/commit/0875ce2dfeae9d28a3a...](<https://github.com/crmne/ruby_llm/commit/0875ce2dfeae9d28a3a37f8062ae93c227a597ec>)

- RubyLLM은 사용하기 매우 쉬움. 작년에 한 프로젝트에서 많이 활용했음  
  단점은 진짜 **추적 관측성**을 위해 계측하기 어려웠고, 재시도 시 내부 모델을 삭제하는 패턴이 있어서 보이는 이력은 깔끔하지만 실제 API 호출 순서를 정확히 보기는 별로였음
  - **Rails 스타일 계측**이 1.16.0에 들어갔음  
    [https://rubyllm.com/instrumentation/](<https://rubyllm.com/instrumentation/>)

- 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](<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](<https://laravel.com/docs/13.x/ai-sdk>)

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