4 puan yazan GN⁺ 2025-03-17 | 1 yorum | WhatsApp'ta paylaş
  • 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

 
GN⁺ 2025-03-17
Hacker News yorumları
  • Bu arayüzün streaming ile ilişkisini iyileştirmesi gerekiyor. Yanıtta her zaman bir gecikme var ve birçok kişi, yanıtı bekleyip süreci durdurmak yerine non-blocking bir thread içinde streaming isteyecektir. Bu bir dokümantasyon sorunu olabilir ama her durumda streaming, birkaç saniyeden uzun süren ve IO kullanan her şeyde birinci sınıf bir özellik olmalı
    • Bunun dışında DSL oldukça harika
  • Örnekleri kullanırken dikkatli olmak gerekiyor: bağlantı
  • langchain gibi kullanımı zor DX kütüphaneleriyle karşılaştırınca temiz hava gibi hissettiriyor
  • Bu, sonunda benim de Rails denememi sağlayacak şey mi? Ruby sözdizimi gerçekten çok hoş
  • Ruby hâlâ capcanlı
  • LLM ile etkileşim kurmak için en özlü API'lerden biri
    • Devam edin! ollama'nın PR desteklediğini görmek sevindirici
  • LLM tabanlı uygulama script'leri yazıyorum ve bu gerçekten çok akıcı hissettiriyor
  • Vay canına. Gerçekten düşünceli
  • Ruby: partiye geç geldi ama bira fıçısını getirdi
  • Birisi bu paketin neden bu kadar iyi olduğunu açıklayabilir mi? Bana sadece API çağrıları yapıyor gibi görünüyor. Eleştirmek için söylemiyorum; sadece bu alanı pek iyi anlamadığım için gerçekten merak ediyorum
  • Vay canına, sözdizimi çok güzel