AI Sparkup

복잡한 AI 세상을 읽는 힘

Ruby와 AI의 만남: RubyLLM으로 AI 애플리케이션 개발하기

RubyLLM 로고

AI 기술이 빠르게 발전하면서 개발자들은 다양한 프로그래밍 언어로 AI 기능을 구현하고 있습니다. Python이 AI 개발의 주력 언어로 알려져 있지만, Ruby 개발자들도 이제 강력한 AI 기능을 손쉽게 활용할 수 있게 되었습니다. 오늘은 Ruby 환경에서 AI 기능을 구현할 수 있게 해주는 ‘RubyLLM’에 대해 알아보고, 이를 통해 어떻게 AI 애플리케이션을 개발할 수 있는지 살펴보겠습니다.

RubyLLM이란?

RubyLLM은 Ruby로 AI 애플리케이션을 개발할 수 있게 해주는 라이브러리입니다. 복잡한 설정이나 콜백 없이 Ruby의 우아하고 표현력 있는 코드 스타일로 AI를 활용할 수 있게 해줍니다. RubyLLM의 가장 큰 장점은 다양한 AI 제공업체(OpenAI, Anthropic, Gemini, DeepSeek 등)의 API를 일관된 인터페이스로 사용할 수 있다는 것입니다.

AI 라이브러리의 문제점과 RubyLLM의 해결책

일반적으로 AI 서비스를 활용하려면 각 공급업체마다 다른 클라이언트 라이브러리, 응답 형식, 스트리밍 방법, 오류 처리 방식을 학습해야 합니다. 여러 AI 공급업체를 동시에 사용하려면 호환되지 않는 API와 불필요한 의존성을 다루어야 하는 번거로움이 있었습니다.

RubyLLM은 이러한 문제를 해결합니다. 모든 AI 서비스에 대해 일관된 API를 제공하고, 최소한의 의존성(Faraday와 Zeitwerk만 필요)으로 AI 개발 경험을 향상시킵니다.

RubyLLM의 주요 기능

RubyLLM은 다양한 AI 기능을 지원합니다:

  1. 채팅: OpenAI, Anthropic, Gemini, DeepSeek 모델과 대화
  2. 비전 및 오디오 이해: 이미지와 오디오 분석
  3. PDF 분석: 문서 분석
  4. 이미지 생성: DALL-E 및 기타 공급업체를 통한 이미지 생성
  5. 임베딩: 벡터 검색 및 의미 분석을 위한 임베딩
  6. 도구: AI가 Ruby 코드를 사용할 수 있게 함
  7. Rails 통합: ActiveRecord를 통한 채팅 및 메시지 저장
  8. 스트리밍: Ruby 패턴을 활용한 응답 스트리밍

설치 및 기본 설정

RubyLLM을 시작하기 위해 먼저 Gemfile에 추가하고 설치합니다:

# 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

RubyLLM 사용 예제

1. 간단한 대화 시작하기

# 기본 모델(GPT-4o-mini)로 채팅 시작
chat = RubyLLM.chat

# 질문하기
chat.ask "Ruby에서 attr_reader와 attr_accessor의 차이점은 무엇인가요?"

# 이어서 대화하기
chat.ask "예시를 들어줄 수 있나요?"

# 실시간으로 응답 스트리밍하기
chat.ask "Ruby 프로그래머에 관한 이야기를 해주세요" do |chunk|
  print chunk.content
end

2. 다양한 형식의 콘텐츠 이해하기

# 이미지 분석하기
chat.ask "이 다이어그램들을 비교해주세요", with: { image: ["diagram1.png", "diagram2.png"] }

# 문서 요약하기
chat.ask "이 문서를 요약해주세요", with: { pdf: "contract.pdf" }

# 음성 내용 파악하기
chat.ask "무슨 내용이 이야기되고 있나요?", with: { audio: "meeting.wav" }

3. 대화 중 모델 변경하기

# 대화 중간에 다른 모델 사용하기
chat.with_model('gemini-2.0-flash').ask "가장 좋아하는 알고리즘은 무엇인가요?"

4. Rails 통합 예제

# app/models/chat.rb
class Chat < ApplicationRecord
  acts_as_chat

  # Turbo와 잘 작동합니다
  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("가장 좋아하는 Ruby 젬은 무엇인가요?") do |chunk|
  Turbo::StreamsChannel.broadcast_append_to(
    chat,
    target: "response",
    partial: "messages/chunk",
    locals: { chunk: chunk }
  )
end

# 이게 전부입니다 - 채팅 기록이 자동으로 저장됩니다

5. AI 도구 만들기

AI가 Ruby 코드를 사용할 수 있게 하는 도구를 만들 수 있습니다:

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 "Ruby 3.3 기능에 관한 문서를 찾아주세요"

6. 이미지 생성하기

# 이미지 생성하기
image = RubyLLM.paint("산 위로 떠오르는 일몰")

# 이미지를 볼 수 있는 URL
puts image.url

# 모델이 프롬프트를 어떻게 해석했는지
puts image.revised_prompt

# 더 큰 이미지 생성하기
large_image = RubyLLM.paint(
  "네온 불빛이 있는 밤의 사이버펑크 도시",
  size: "1792x1024"
)

7. 임베딩 생성하기

# 단일 텍스트에 대한 임베딩 생성
embedding = RubyLLM.embed("Ruby는 프로그래머의 가장 좋은 친구입니다")

# 벡터 표현
vector = embedding.vectors
puts "벡터 차원: #{vector.length}"

# 여러 텍스트에 대한 임베딩 생성
texts = ["Ruby", "Python", "JavaScript"]
embeddings = RubyLLM.embed(texts)

# 각 텍스트는 자체 벡터를 가집니다
puts "벡터 수: #{embeddings.vectors.length}"

RubyLLM을 사용해야 하는 이유

Ruby on Rails 로고 Ruby on Rails 로고 (출처: Wikimedia Commons)

많은 AI 개발이 Python으로 이루어지지만, Ruby 개발자가 기존 Ruby 기반 애플리케이션에 AI 기능을 추가하기 위해 Python 서비스를 만들고 통합하는 것은 불필요한 복잡성을 추가합니다. Ruby on Rails의 창시자인 Chad Pytel이 지적했듯이, 대부분의 AI 작업은 HTTP API 호출을 통해 이루어지며, Ruby는 이러한 API 통합에 탁월합니다.

Ruby 애플리케이션에 AI 기능을 추가할 때 Python 서비스를 중간에 두는 것은 추가적인 애플리케이션 및 호스팅 비용과 복잡성을 초래합니다. 자체 머신러닝 모델을 만드는 것과 같은 복잡한 AI 작업이 아니라면, Ruby 젬과 API 호출만으로도 대부분의 AI 기능을 구현할 수 있습니다.

실제 활용 사례

RubyLLM 및 유사한 Ruby AI 라이브러리는 다양한 실제 사용 사례에 적용될 수 있습니다:

  1. 고객 지원 챗봇: 사용자 질문에 답변하고 문서를 요약하는 대화형 AI 봇
  2. 콘텐츠 생성: 광고 헤드라인, 제품 설명, 블로그 게시물 생성
  3. 데이터 분류 및 추출: 구조화되지 않은 데이터에서 정보 추출
  4. 검색 최적화: 의미 검색 및 관련 콘텐츠 추천
  5. 다국어 지원: 콘텐츠 번역 및 현지화
  6. 이미지 생성 및 분석: 마케팅 자료용 이미지 생성 및 업로드된 이미지 이해

생각해볼 점

RubyLLM은 Ruby 개발자에게 AI의 세계를 열어주는 매력적인 라이브러리입니다. 이를 통해 개발자는 익숙한 Ruby 환경에서 벗어나지 않고도 최신 AI 기능을 구현할 수 있습니다. AI가 프로그래밍의 필수적인 부분이 되어가는 이 시대에, RubyLLM은 Ruby 커뮤니티가 이러한 혁신에 참여할 수 있는 다리 역할을 합니다.

Ruby의 우아함과 AI의 강력함이 결합된 RubyLLM은 단순히 기술적 도구를 넘어, 개발자가 창의적이고 혁신적인 애플리케이션을 만들 수 있는 새로운 표현 수단을 제공합니다. 이제 Ruby 개발자들도 AI 혁명의 최전선에 설 수 있게 되었습니다.

Ruby 기반 애플리케이션에 AI 기능을 추가하려는 개발자라면, RubyLLM을 시작점으로 고려해보세요. 공식 문서와 가이드를 통해 더 많은 기능과 사용법을 알아볼 수 있습니다.

참고자료:


Awsom GPT에서 더 알아보기

구독을 신청하면 최신 게시물을 이메일로 받아볼 수 있습니다.

Comments

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다