26 puan yazan xguru 2024-05-20 | Henüz yorum yok. | WhatsApp'ta paylaş
  • Retrieval-Augmented Generation (RAG) sistemi sayesinde mevcut iç bilgi tabanına (wiki, kılavuzlar, eğitim ve referans materyalleri vb.) dayanarak soruları yanıtlayabilen bir yapay zeka asistanı oluşturulabilir
  • Yalnızca PostgreSQL, pgvector, ollama ve 200 satırdan az Go koduyla bir RAG sistemi kurulabilir

Genel Bakış

  • Birkaç paragraf metin "belge korpusu" olarak kullanılıyor ve her belge için Meta'nın Llama3 modeliyle belge embedding'leri oluşturuluyor (ollama ile yerelde barındırılıyor)
  • Belgeler ve embedding'ler PostgreSQL tablosunda saklanıyor; embedding'leri depolamak ve erişmek için pgvector eklentisi kullanılıyor
  • Kullanıcı sorgusu için tablodan en ilgili 1 belge getiriliyor ve Llama3 ile yanıt üretiliyor
  • ollama, embedding ve sohbet yanıtları üretmek için OpenAI benzeri bir HTTP API sağlıyor
  • Go kodu, Postgres ile iletişim için jackc/pgx ve pgvector-go kullanıyor; HTTP API çağrıları için ise ollama istemci API paketinden yararlanıyor

Ollama ile modelleri çalıştırmak

  • Ollama, açık kaynak modelleri yerelde çalıştırmayı sağlayan bir araç ve OpenAI tarzı bir REST API sunuyor
  • ollama pull llama3 komutuyla llama3 modeli çalıştırılabilir
  • ollama'nın HTTP sunucusu varsayılan olarak 127.0.0.1:11434 adresinde erişilebilir

pgvector kurulumu

  • pgvector, PostgreSQL 12~16 sürümleri için bir eklentidir; pgdg APT deposu kullanılıyorsa sudo apt install postgresql-16-pgvector ile kurulabilir
  • Kurulumdan sonra veritabanında eklentiyi etkinleştirmek için create extension vector; kullanılır
  • Belgeleri ve embedding'leri saklamak için create table items (id serial primary key, doc text, embedding vector(4096)); tablosu oluşturulur

Belge verisi

  • Sherlock Holmes hikâyesi "The Boscombe Valley Mystery" içinden 4 paragraf kullanılıyor (public domain - Project Gutenberg)

Kod

  • GitHub'da MIT lisansı ile yayımlanmış demo kodu kullanılabilir
  • Belge ekleme işlemi INSERT INTO items (doc, embedding) VALUES ($1, $2)
  • En ilgili belgeyi bulmak için SELECT doc FROM items ORDER BY embedding <-> $1 LIMIT 1 kullanılır (<-> operatörü pgvector tarafından sağlanır)
  • Ollama API çağrıları için ollama Go paketi kullanılır
    • Embedding oluşturmak için api.EmbeddingRequest kullanılır
    • Sohbet yanıtı oluşturmak için api.ChatRequest kullanılır (prompt içine getirilen belge eklenir)

Komut satırı arayüzü

  • ragdemo -insert {path-to-doc-file} ile belge veritabanına kaydedilir
  • ragdemo -query {query-text} ile prompt girilip yanıt oluşturulur

Tüm süreç

  1. -insert seçeneğiyle belge kaydedilirken dosya içeriği okunur, Llama3 ile embedding oluşturulur ve PostgreSQL'e kaydedilir
  2. -query seçeneği kullanıldığında prompt embedding'i oluşturulur, ardından items tablosundaki diğer embedding'lerle karşılaştırılarak "en yakın" belge bulunur (<-> operatörü ile L2 mesafesi hesaplanır)
  3. Getirilen belge prompt'a eklenerek Llama3'e gönderilir, sohbet yanıtı üretilir ve çıktı verilir

Ek ipuçları

  • Embedding üretimine özel bir model kullanmayı değerlendirin (llama3 yerine)
  • İngilizce dışındaki diller için daha uygun modeller araştırmak gerekebilir
  • L2 mesafesi dışında başka uzaklık hesaplama yöntemleri de denenebilir (pgvector başka yöntemleri de destekler)
  • Tüm tabloyu taramak ölçeklenebilir değildir; bu yüzden pgvector indeksleri gibi yöntemlerden yararlanın
  • Üretim aşamasında daha fazla belge kullanmak veya anahtar kelime eşleştirmesiyle ek belgeler getirmek de faydalı olabilir
  • Üretim prompt'unu ayarlamak ve farklı LLM'leri denemek çıktı kalitesini artırabilir

Henüz yorum yok.

Henüz yorum yok.