- Güzel ve ifade gücü yüksek, Ruby tabanlı birleşik bir yapay zeka kütüphanesi
- Her yapay zeka sağlayıcısının istemci kütüphanesi, yanıt biçimi ve streaming işleme yöntemi farklıdır; birden fazla yapay zeka modeli kullanmak için uyumsuz API'ler ve karmaşık bağımlılıklarla uğraşmak gerekir
- RubyLLM, bu sorunları çözen birleşik bir API sunar
Başlıca özellikler
- Sohbet: OpenAI, Anthropic, Gemini, DeepSeek modellerini destekler
- Görüntü ve ses: Görsel ve ses içeriğini anlama
- PDF analizi: Belge özetleme ve analiz
- Görsel üretimi: DALL-E dahil çeşitli modelleri destekler
- Embedding oluşturma: Vektör arama ve anlamsal analiz
- Tool sağlama: Ruby kodunu yapay zeka ile entegre etme
- Rails entegrasyonu: Sohbet geçmişini ActiveRecord ile kaydedebilme
- Streaming: Gerçek zamanlı yanıt işlemeyi destekler
RubyLLM'in avantajları
# Kolayca soru sorma
chat = RubyLLM.chat
chat.ask "Ruby öğrenmenin en iyi yolu nedir?"
# Görsel analizi
chat.ask "Bu görselde ne görünüyor?", with: { image: "ruby_conf.jpg" }
# Ses analizi
chat.ask "Bu toplantıda neler konuşuldu?", with: { audio: "meeting.wav" }
# Belge özeti
chat.ask "Bu sözleşmeyi özetler misin", with: { pdf: "contract.pdf" }
# Görsel üretimi
RubyLLM.paint "Dağın üzerindeki gün batımını suluboya tarzında çiz"
# Vektör embedding oluşturma
RubyLLM.embed "Ruby zarif ve ifade gücü yüksek bir dildir"
# Yapay zeka kod kullanabilir
class Weather < RubyLLM::Tool
description "Belirli bir konumun mevcut hava durumunu sağlar"
param :latitude, desc: "Enlem (ör: 52.5200)"
param :longitude, desc: "Boylam (ör: 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 "Berlin'de hava nasıl? (52.5200, 13.4050)"
Kurulum
# Gemfile'a ekleyin
gem 'ruby_llm'
# Kurulum
bundle install
# veya doğrudan kurun
gem install ruby_llm
API anahtarlarını ayarlama
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'] # isteğe bağlı
end
Doğal sohbet işleme
# Varsayılan modelle (GPT-4o-mini) sohbet başlatma
chat = RubyLLM.chat
# Farklı bir model kullanma
chat = RubyLLM.chat(model: 'claude-3-7-sonnet-20250219')
# Basit soru
chat.ask "attr_reader ile attr_accessor arasındaki fark nedir?"
# Çok turlu sohbet yürütme
chat.ask "Bir örnek verebilir misin?"
# Streaming yanıtı
chat.ask "Bir Ruby programcısı hakkında hikâye anlat" do |chunk|
print chunk.content
end
# Farklı girdi türlerini destekler
chat.ask "Bu iki diyagramı karşılaştır", with: { image: ["diagram1.png", "diagram2.png"] }
chat.ask "Bu belgeyi özetle", with: { pdf: "contract.pdf" }
chat.ask "Bu seste ne söylendiğini bana söyle", with: { audio: "meeting.wav" }
# Sohbet sırasında model değiştirilebilir
chat.with_model('gemini-2.0-flash').ask "En sevdiğin algoritma hangisi?"
Rails entegrasyonu desteği
# 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
# Controller içinde kullanım örneği
chat = Chat.create!(model_id: "gpt-4o-mini")
chat.ask("Ruby'de en kullanışlı gem hangisi?") do |chunk|
Turbo::StreamsChannel.broadcast_append_to(
chat,
target: "response",
partial: "messages/chunk",
locals: { chunk: chunk }
)
end
# Sohbet geçmişi otomatik olarak kaydedilir
Tool yazma örneği
class Search < RubyLLM::Tool
description "Bilgi tabanında arama yapar"
param :query, desc: "Arama sorgusu"
param :limit, type: :integer, desc: "Maksimum sonuç sayısı", required: false
def execute(query:, limit: 5)
Document.search(query).limit(limit).map(&:title)
end
end
# Yapay zekadan tool kullanımı
chat.with_tool(Search).ask "Ruby 3.3'ün yeni özellikleriyle ilgili belgeleri bul"
1 yorum
Hacker News yorumları