TypeScript kullanarak bir üretim sınıfı, çok kiracılı AI destek aracını geliştiriyorum. Python veya LangChain kullanmıyorum, sadece Node.js, PostgreSQL ile pgvector ve birçok yanlış varsayım kullanıyorum. Bu makale, RAG (Retrieval-Augmented Generation) pipeline oluştururken yapılan üç hatayı, bunların yerine ne koyulduğunu ve neden bu değişikliklerin işe yaradığını anlatıyor.
RAG Nedir?
RAG, LLM'lerin (Large Language Model) kendi verilerinizi bilmemesi sorununu çözen bir desendir. LLM'ler, kamu internet metinleri üzerinde eğitilir, şirket belgelerinize değil. RAG, bu sorunu çözmek için aşağıdaki adımları takip eder:
- Belgelerinizi parçalayın, her parçayı bir numeric vektere (bir "embedding"e) dönüştürün
- Bu vektörleri, benzerlik aramasını destekleyen bir veritabanına kaydedin (pgvector, Pinecone, Weaviate vb.)
- Kullanıcı bir soru sorduğunda, soruyu aynı şekilde gömün, en benzer parçaları bulun
- LLM'ye bu parçaları referans materyali olarak verin ve gerçek verilere dayanarak cevaplasın
Hata #1: Sabit Boyutlu Parçalama Yanıltıcı Olabilir
RAG öğreticileri genellikle belgeleri N karakterlik parçalara ayırmayı önerir. Bu, üç satır kodla yapılır ve "çalışır".
Ancak bu, gerçek bir belgeye ne yapar? Bir markdown belgesinde "Stripe webhooks ayarlarını yapılandırma" başlığı, açıklama ve TypeScript kodu vardır. bir naive sabit boyutlu parçalayıcı, belgeyi kodu ortasında kesebilir ve iki parça oluşturur:
- Parça 1: Açıklama ve Stripe'in ilk yarısının kodu
- Parça 2: Kodun ikinci yarısı,
req.body, sig, endpointSecretile birlikte, ancak ne yaptığını anlamak için hiçbir bağlam olmadan
Embedding modeli Parça 2'yi işlediğinde, bir parçayı görür. Ürettiği gömme incoherent'tir, "request body ve gizlilik hakkında bir şeyler"i yakalar, ancak "Stripe webhook doğrulaması" değil. Kullanıcı "Stripe webhooks nasıl doğrulanır?" diye sorduğinde, bu parça ortaya çıkmayabilir. Ve ortaya çıktığında, LLM yarı bir kod bloğu alır ve ya geri kalanını hayal eder ya da karışık bir cevap verir.
Hata #2: Saf Vektör Aramasının Kör Noktası
Vektör araması (anlamsal arama), sorgunun anlamını her parçanın anlamıyla karşılaştırarak çalışır. "Stripe ayarlarını nasıl kurarım?" ve "Stripe entegrasyonunu yapılandırma" benzer anlamlara sahiptir, ancak neredeyse aynı kelimeleri paylaşmaz. Bu, vektör aramasının büyüsüdür.
Ancak vektör aramasının kör noktası, fuzzy olmasıdır. Anlamsal olarak benzer içerikleri bulur, ancak tam anahtar kelime eşleştirmelerini kaçırabilir.
Bu hataların çözümleri ve neden işe yaradıkları hakkında daha fazla bilgi edinmek için makaleyi okumaya devam edin.
Yapay zeka özeti
TypeScript kullanarak RAG pipeline oluştururken yapılan hataların çözümleri ve neden işe yaradıkları