- 아름답고 표현력이 풍부한 Ruby 기반 통합 AI 라이브러리
- AI 제공업체마다 클라이언트 라이브러리, 응답 형식, 스트리밍 처리 방식이 모두 다르고, 여러 AI 모델을 사용하려면 호환되지 않는 API와 복잡한 종속성을 처리해야 함
-
RubyLLM은 이러한 문제를 해결해주는 통합 API를 제공
주요 기능
-
대화: OpenAI, Anthropic, Gemini, DeepSeek 모델 지원
-
비전 및 오디오: 이미지 및 오디오 이해
-
PDF 분석: 문서 요약 및 분석
-
이미지 생성: DALL-E 등 다양한 모델 지원
-
임베딩 생성: 벡터 검색 및 의미 분석
-
툴 제공: Ruby 코드와 AI 연동 가능
-
Rails 통합: ActiveRecord로 채팅 기록 저장 가능
-
스트리밍: 실시간 응답 처리 지원
RubyLLM의 장점
# 간단하게 질문하기
chat = RubyLLM.chat
chat.ask "루비를 배우기 가장 좋은 방법은?"
# 이미지 분석
chat.ask "이 이미지에 무엇이 보이나요?", with: { image: "ruby_conf.jpg" }
# 오디오 분석
chat.ask "이 회의에서 무슨 이야기가 나왔나요?", with: { audio: "meeting.wav" }
# 문서 요약
chat.ask "이 계약서를 요약해 주세요", with: { pdf: "contract.pdf" }
# 이미지 생성
RubyLLM.paint "산 위의 노을을 수채화 스타일로 그려줘"
# 벡터 임베딩 생성
RubyLLM.embed "Ruby는 우아하고 표현력이 뛰어남"
# AI가 코드 사용 가능
class Weather < RubyLLM::Tool
description "특정 위치의 현재 날씨 제공"
param :latitude, desc: "위도 (예: 52.5200)"
param :longitude, desc: "경도 (예: 13.4050)"
def execute(latitude:, longitude:)
url = "https://api.open-meteo.com/v1/forecast/…;
response = Faraday.get(url)
JSON.parse(response.body)
rescue => e
{ error: e.message }
end
end
chat.with_tool(Weather).ask "베를린의 날씨는 어때? (52.5200, 13.4050)"
설치 방법
# Gemfile에 추가
gem 'ruby_llm'
# 설치
bundle install
# 또는 직접 설치
gem install ruby_llm
API 키 설정
RubyLLM.configure do |config|
config.openai_api_key = ENV['OPENAI_API_KEY']
config.anthropic_api_key = ENV['ANTHROPIC_API_KEY']
config.gemini_api_key = ENV['GEMINI_API_KEY']
config.deepseek_api_key = ENV['DEEPSEEK_API_KEY'] # 선택 사항
end
자연스러운 대화 처리
# 기본 모델(GPT-4o-mini)로 채팅 시작
chat = RubyLLM.chat
# 다른 모델 사용
chat = RubyLLM.chat(model: 'claude-3-7-sonnet-20250219')
# 간단한 질문
chat.ask "attr_reader와 attr_accessor의 차이는?"
# 다중 턴 대화 처리
chat.ask "예제를 들어줄 수 있나요?"
# 스트리밍 응답
chat.ask "루비 프로그래머에 관한 이야기 해줘" do |chunk|
print chunk.content
end
# 다른 입력 형태 지원
chat.ask "이 두 다이어그램을 비교해줘", with: { image: ["diagram1.png", "diagram2.png"] }
chat.ask "이 문서를 요약해줘", with: { pdf: "contract.pdf" }
chat.ask "이 오디오에서 무슨 말이 나왔는지 알려줘", with: { audio: "meeting.wav" }
# 대화 중 모델 변경 가능
chat.with_model('gemini-2.0-flash').ask "가장 좋아하는 알고리즘은?"
Rails 통합 지원
# app/models/chat.rb
class Chat < ApplicationRecord
acts_as_chat
broadcasts_to ->(chat) { "chat_#{chat.id}" }
end
# app/models/message.rb
class Message < ApplicationRecord
acts_as_message
end
# app/models/tool_call.rb
class ToolCall < ApplicationRecord
acts_as_tool_call
end
# 컨트롤러에서 사용 예제
chat = Chat.create!(model_id: "gpt-4o-mini")
chat.ask("루비에서 가장 유용한 gem은 뭐야?") do |chunk|
Turbo::StreamsChannel.broadcast_append_to(
chat,
target: "response",
partial: "messages/chunk",
locals: { chunk: chunk }
)
end
# 채팅 기록은 자동 저장됨
툴 작성 예제
class Search < RubyLLM::Tool
description "지식 베이스에서 검색 수행"
param :query, desc: "검색어"
param :limit, type: :integer, desc: "최대 결과 수", required: false
def execute(query:, limit: 5)
Document.search(query).limit(limit).map(&:title)
end
end
# AI에서 툴 사용
chat.with_tool(Search).ask "루비 3.3의 새로운 기능에 대한 문서 찾아줘"