RAG nedir ve neden her geliştiricinin bunu bilmesi gerekir?
I Büyük Dil Modeli (LLM) etkileşim şeklimizde devrim yarattılar ancak temel bir sorunla karşı karşıyadırlar: bilgileri statik, eğitim sırasında donmuş. Yüksek Lisans'a belgelerinizle ilgili soru sorduğunuz zaman dahili olarak, ürünlerinizde veya güncellenmiş verilerde yanıt genel, icat edilmiş veya basit olacaktır. yanlış. Bu fenomene denir halüsinasyon.
Alma-Artırılmış Nesil (RAG) gücü birleştirerek bu sorunu çözer Bir bilgi alma sisteminin hassasiyetiyle LLM'lerin üretkenliği. Güvenmek yerine RAG öncelikle yalnızca model belleğine giderek ilgili belgeleri bir bilgi tabanında arar ve orada modelin doğru, veriye dayalı yanıtlar üretmesi için bağlam sağlar.
Serinin bu ilk makalesinde Web Geliştiricileri için Yapay Zeka, RAG'ı keşfedeceğiz derinlemesine: nedir, nasıl çalışır, ne zaman kullanılır ve ne zaman kaçınılır. Sonunda bir tane olacak RAG mimarisini sağlam bir şekilde anladığınızda, bir sonraki makalede onu uygulamaya hazır olacaksınız.
Seriye Genel Bakış
| # | Öğe | Odak |
|---|---|---|
| 1 | Buradasınız - RAG Nedir | Temeller ve mimari |
| 2 | TypeScript ve LangChain.js ile RAG | Pratik uygulama |
| 3 | Web Geliştirme için Vektör Veritabanı | Depolama ve benzerlik araması |
| 4 | OpenAI ve Antropik API'ler | Yüksek Lisans entegrasyonu |
| 5 | Ollama ile LLM Yerel | Şirket içi modeller |
| 6 | İnce ayar vs RAG | Neyi ne zaman kullanmalı |
| 7 | Yapay Zeka Aracıları: Mimari | Otonom sistemler |
| 8 | CI/CD Ardışık Düzeninde Yapay Zeka | DevOps otomasyonu |
Ne Öğreneceksiniz
- RAG nedir ve hangi sorunu çözer?
- Bir RAG (geri alma + oluşturma) sisteminin eksiksiz mimarisi
- Yerleştirmeler ve benzerlik araması nasıl çalışır?
- Belgeleri hazırlamak için parçalama stratejileri
- RAG ve ince ayar arasındaki fark
- Gerçek kullanım örnekleri: chatbot, anlamsal arama, Soru-Cevap
- RAG'ın sınırlamaları ve ne zaman kullanılmaması gerektiği
1. Sorun: Yüksek Lisans ve Statik Bilgi
Şirketinizin müşteri desteği için bir chatbot oluşturmak istediğinizi düşünün. Binlerce var dokümantasyon sayfaları, SSS'ler, teknik kılavuzlar ve çözümlenmiş bildirimler. GPT-4 veya Claude gibi bir LLM kullanıyorsunuz, ancak sonuç hayal kırıklığı yaratıyor: model ürünlerinizi tanımıyor, var olmayan özellikleri icat ediyor ve yanlış prosedürleri mutlak bir kesinlikle sağlar.
Yüksek Lisans'ın Üç Temel Sorunu
| Sorun | Tanım | Darbe |
|---|---|---|
| Bilgi Kesintisi | Model yalnızca eğitim verilerini biliyor | Özel verileriniz hakkında hiçbir şey bilmiyor |
| Halüsinasyonlar | Makul ama yanlış cevaplar üretin | Yüksek güven içeren yanlış bilgi |
| Alıntı Yok | Bilginin kaynağını gösteremiyor | Doğruluğu doğrulanamıyor |
Bu sorunlar daha iyi bir yönlendirmeyle kolayca çözülmez. Gerçek verilere ihtiyacımız var güncellenmiş ve alanınıza özel. RAG'ın yaptığı da tam olarak budur.
2. RAG Nedir: Erişimle Artırılmış Nesil
paçavra iki farklı aşamayı birleştiren bir mimaridir: geri alma İlgili belgelerin bir bilgi tabanından (geri getirilmesi) nesil (nesil) Bu belgelere dayanarak bir yanıt. Terim 2020 yılında araştırmacılar tarafından tanıtıldı Meta AI tarafından "Bilgi Yoğun NLP Görevleri için Erişimle Artırılmış Üretim" makalesinde.
Fikir basit ama güçlü: Modelden bir yanıt üretmesini istemeden önce, kullanıcının sorusuyla en alakalı belgeleri arayın ve bunları bilgi istemine ekleyin ek bağlam olarak. Modelin artık her şeyi "hatırlaması" gerekmiyor, yalnızca akıl yürütmesi gerekiyor sağlanan bilgiler üzerine.
LLM TRADIZIONALE:
Domanda utente --> [LLM] --> Risposta (basata solo su training data)
^-- Rischio allucinazione alto
RAG:
Domanda utente --> [Retrieval] --> Documenti rilevanti
|
v
Domanda + Documenti --> [LLM] --> Risposta (basata su dati reali)
^-- Rischio allucinazione basso
Pratik Analoji
RAG'ı bir olarak düşünün açık kitap sınavı sırasında öğrenci. Geleneksel Yüksek Lisans o, ezbere cevap vermesi gereken bir öğrencidir: çok şey biliyor ama kafası karışabilir veya icat edebilir. RAG ile öğrenci cevap vermeden önce notlarına ve kitaplarına bakabilir. Cevap somut kaynaklara dayandığı için daha kesin olacaktır.
3. RAG Sisteminin Komple Mimarisi
Bir RAG sistemi iki ana boru hattından oluşur: indeksleme hattı (çevrimdışı, bir defaya mahsus veya periyodik olarak gerçekleştirilir) ve sorgu hattı (her kullanıcı sorusuyla gerçek zamanlı olarak yürütülür).
3.1 Dizin Oluşturma Hattı (Çevrimdışı)
Bu aşama araştırma için belgeleri hazırlar. Adımlar şunlardır:
[Documenti Sorgente]
|
v
[1. Document Loader] -- Carica PDF, HTML, Markdown, CSV, database
|
v
[2. Text Splitter] --- Divide in chunk di dimensione gestibile
|
v
[3. Embedding Model] - Trasforma ogni chunk in un vettore numerico
|
v
[4. Vector Store] ---- Salva i vettori in un database vettoriale
3.2 Sorgu Hattı (Çevrimiçi)
Bu aşama kullanıcı talebini gerçek zamanlı olarak ele alır:
[Domanda Utente]
|
v
[1. Embedding Model] --- Stessa funzione usata nell'indicizzazione
|
v
[2. Similarity Search] - Cerca i chunk più simili nel vector store
|
v
[3. Context Assembly] -- Assembla i chunk trovati in un contesto
|
v
[4. Prompt Template] --- "Rispondi alla domanda basandoti su: [contesto]"
|
v
[5. LLM Generation] --- Genera la risposta finale
|
v
[Risposta con Citazioni]
Yerleştirmelerin tutarlılığına dikkat edin
Bunu kullanmak önemlidir aynı yerleştirme modeli her ikisi de aşamasında sorgulama aşamasına göre indeksleme. Farklı modeller kullanırsanız vektörler karşılaştırılabilir ve benzerlik araması düzgün çalışmayacaktır.
4. Gömmeler: RAG'ın Kalbi
Gli gömmeler bunlar metnin sayısal temsilleridir (vektörlerdir) semantik anlamı. Benzer anlama sahip iki cümlede "yakın" vektörler bulunacaktır. tamamen farklı kelimeler kullansalar bile çok boyutlu uzay.
Frase: "Il gatto dorme sul divano"
Embedding: [0.23, -0.45, 0.67, 0.12, -0.89, ...] // vettore a 1536 dimensioni
Frase: "Il felino riposa sul sofa"
Embedding: [0.22, -0.44, 0.68, 0.11, -0.88, ...] // vettore molto simile!
Frase: "Il prezzo dell'oro sale"
Embedding: [-0.56, 0.78, -0.12, 0.91, 0.34, ...] // vettore molto diverso
Popüler Yerleştirme Şablonları
| Modeli | Boyutlar | Sağlayıcılar | Maliyet |
|---|---|---|---|
text-embedding-3-small |
1536 | OpenAI | 0,02 ABD doları / 1 milyon jeton |
text-embedding-3-large |
3072 | OpenAI | 0,13 ABD doları / 1 milyon jeton |
voyage-3 |
1024 | Yolculuk Yapay Zekası | 0,06 ABD doları / 1 milyon jeton |
all-MiniLM-L6-v2 |
384 | SarılmaYüz (Ücretsiz) | Ücretsiz (kendi kendine barındırılan) |
nomic-embed-text |
768 | Ollama (yerel) | Ücretsiz (yerel) |
La kosinüs benzerliği için en yaygın ölçümdür yerleştirmeleri karşılaştırın. İki vektör arasındaki açıyı ölçer: 1,0 değeri vektörleri belirtir aynı, 0,0 ilişki olmadığını, -1,0 zıt anlamları belirtir.
function cosineSimilarity(a: number[], b: number[]): number {
if (a.length !== b.length) {
throw new Error('I vettori devono avere la stessa lunghezza');
}
let dotProduct = 0;
let normA = 0;
let normB = 0;
for (let i = 0; i < a.length; i++) {
dotProduct += a[i] * b[i];
normA += a[i] * a[i];
normB += b[i] * b[i];
}
return dotProduct / (Math.sqrt(normA) * Math.sqrt(normB));
}
// Esempio d'uso
const embedding1 = [0.23, -0.45, 0.67, 0.12];
const embedding2 = [0.22, -0.44, 0.68, 0.11];
const similarity = cosineSimilarity(embedding1, embedding2);
console.log(similarity); // ~0.999 - molto simili!
5. Parçalama Stratejileri
Il parçalama belgeleri parçalara bölme işlemidir (yığın) yönetilebilir boyutta. Bu aşama kritiktir: çok büyük parçalar dağılır yani çok küçük parçalar bağlamı kaybeder.
Temel Parçalama Parametreleri
- Parça Boyutu: Her parçanın maksimum boyutu (karakter veya simge olarak). Tipik olarak 500-2000 karakter
- Parça Örtüşmesi: Ardışık parçalar arasındaki örtüşme (parça boyutunun %10-20'si). Konseptleri yarıya kadar kesmekten kaçının
- Ayırıcılar: Kesmenin tercih edildiği noktalar (paragraflar, cümleler, başlıklar)
FIXED SIZE CHUNKING:
Testo: "AAAA|BBBB|CCCC|DDDD" (ogni | = taglio ogni N caratteri)
Pro: Semplice e veloce
Contro: Può tagliare a meta frasi e concetti
RECURSIVE CHARACTER SPLITTING:
Testo diviso per: "\n\n" -> "\n" -> "." -> " " -> ""
Pro: Rispetta la struttura del testo
Contro: Chunk di dimensioni variabili
SEMANTIC CHUNKING:
Usa embeddings per trovare i "punti di rottura" semantici
Pro: Chunk coerenti semanticamente
Contro: Più lento e costoso (richiede embeddings)
DOCUMENT-AWARE CHUNKING:
Rispetta la struttura del documento (titoli, sezioni, tabelle)
Pro: Mantiene il contesto strutturale
Contro: Richiede parsing specifico per formato
Documento originale (600 caratteri):
"Angular è un framework TypeScript per applicazioni web.
Supporta il rendering lato server (SSR) per migliorare
le performance. I componenti standalone eliminano la
necessità di NgModule. I Signals offrono reattività
fine-grained senza Zone.js."
Con chunk_size=200, overlap=50:
Chunk 1: "Angular è un framework TypeScript per applicazioni web.
Supporta il rendering lato server (SSR) per migliorare
le performance."
Chunk 2: "per migliorare le performance. I componenti standalone
eliminano la necessità di NgModule."
Chunk 3: "eliminano la necessità di NgModule. I Signals offrono
reattività fine-grained senza Zone.js."
Parçalamada Yaygın Hatalar
- Parçalar çok büyük (>4000 jeton): Model, bağlamın bazı kısımlarını göz ardı edebilir veya belirteç sınırını aşabilir
- Parçalar çok küçük (<100 jeton): Bağlam kaybı, parçalanmış cevaplar
- Sıfır Örtüşme: Konseptler yarıya indirildi, kurtarma tamamlanmadı
- Meta verileri yoksay: Belgenin başlığı, yazarı, tarihi gibi bilgilerin kaybı
6. RAG vs İnce Ayar: Ne Zaman Kullanılmalı Ne
En sık sorulan sorulardan biri şudur: "RAG kullanmalı mıyım yoksa modele ince ayar mı yapmalıyım?". Cevap, eklemek istediğiniz bilgi türüne ve nasıl kullanılacağına bağlıdır.
RAG ve İnce Ayar - Ayrıntılı Karşılaştırma
| bekliyorum | paçavra | İnce Ayar |
|---|---|---|
| Bilgi türü | Belirli gerçekler, veriler, belgeler | Stil, biçim, davranış |
| Güncelleme | Anında (belgeleri güncelle) | Yeniden eğitim gerektirir |
| Başlangıç maliyeti | Düşük (altyapı + yerleştirme) | Yüksek (GPU, etiketli veriler, zaman) |
| Sorgu başına maliyet | Ortam (geri alma + oluşturma) | Düşük (yalnızca nesil) |
| İzlenebilirlik | Yüksek (Kaynaklardan alıntı yapabilirsiniz) | Yok (entegre bilgi) |
| Halüsinasyonlar | Azaltılmış (bağlamdaki gerçek veriler) | Mümkün (öğrenilen bilgi) |
| Veri ölçeklenebilirliği | Milyonlarca belge | Eğitim seti ile sınırlıdır |
| Karmaşıklık | Medya (boru hattı + vektör DB) | Yüksek (eğitim, değerlendirme, dağıtım) |
Pratik Kural
Amerika paçavra modelin belirli bilgileri "bilmesini" istediğinizde (belgeler, SSS'ler, kılavuzlar). Amerika ince ayar modeli istediğinde belirli bir şekilde "davranmak" (ton, format, tepki tarzı). Birçok durumda, iki yaklaşımın birleşimi en iyi sonuçları üretir.
7. RAG'ın Gerçek Kullanım Durumları
RAG sadece teori değildir; her gün kullandığımız birçok ürünün temelini oluşturur. En yaygın kullanım senaryolarını ve RAG'ın bunları nasıl mümkün kıldığını burada bulabilirsiniz.
7.1 Kurumsal Sohbet Robotları
En popüler kullanım durumu. Müşteri sorularını temel alarak yanıtlayan bir sohbet robotu Şirketin gerçek belgelerine dayanarak: kılavuzlar, SSS'ler, çözümlenen bildirimler, dahili politikalar.
// Pseudocodice di un chatbot RAG
async function handleUserQuery(query: string): Promise<string> {
// 1. Cerca documenti rilevanti
const relevantDocs = await vectorStore.similaritySearch(query, 5);
// 2. Costruisci il contesto
const context = relevantDocs
.map(doc => `[Fonte: ${doc.metadata.source}]\n${doc.pageContent}`)
.join('\n\n');
// 3. Genera la risposta con contesto
const response = await llm.invoke(`
Sei un assistente del supporto clienti.
Rispondi SOLO basandoti sulle informazioni fornite.
Se non trovi la risposta nei documenti, dillo esplicitamente.
DOCUMENTI DI RIFERIMENTO:
${context}
DOMANDA DEL CLIENTE:
${query}
RISPOSTA:
`);
return response;
}
7.2 Anlamsal Arama
Geleneksel anahtar kelimeye dayalı aramanın aksine, RAG ile anlamsal arama şunları içerir Anlam sorgunun. "Şifrenizi nasıl sıfırlayabilirsiniz" sonuçları bulur belgede "kimlik bilgisi kurtarma prosedürü" yazmasına rağmen.
7.3 Belgeler Hakkında Soru-Cevap
Kullanıcıların geniş belge koleksiyonları hakkında doğal dilde sorular sormasına olanak tanır: yasal sözleşmeler, teknik belgeler, bilimsel makaleler, dahili bilgi tabanları.
7.4 Kod Asistanı
Özel kod tabanınızı bilen bir kod asistanı. Kaynak kodunu indeksleyin, Bağlamsallaştırılmış öneriler sağlamak için API belgeleri, yorumlar ve testler.
Kullanım Durumu Karşılaştırması
| Kullanım Örneği | Veri Kaynağı | Güncelleme Sıklığı | Karmaşıklık |
|---|---|---|---|
| Sohbet Robotu Desteği | SSS, kılavuzlar, biletler | Haftalık | Ortalama |
| Semantik Arama | Ürün kataloğu, makaleler | Günlük | Düşük |
| Soru-Cevap Dokümanları | PDF, sözleşmeler, raporlar | Talep üzerine | Ortalama |
| Kod Asistanı | Kaynak kodu, API belgeleri | Her taahhütte | Yüksek |
8. Tam bir RAG Boru Hattının Anatomisi
Boru hattının her bir bileşenini teknolojik seçeneklerle birlikte ayrıntılı olarak görelim uygulamada karşılaşacağınız.
+------------------+--------------------------------------------+
| Componente | Opzioni Tecnologiche |
+------------------+--------------------------------------------+
| Document Loader | LangChain loaders, Unstructured, custom |
| Text Splitter | RecursiveCharacter, Semantic, Markdown |
| Embedding Model | OpenAI, Voyage, HuggingFace, Ollama |
| Vector Store | Pinecone, Chroma, Weaviate, pgvector |
| Retriever | Similarity, MMR, Self-Query, Ensemble |
| Prompt Template | LangChain templates, custom |
| LLM | GPT-4, Claude, Llama, Mistral |
| Post-processing | Citation extraction, confidence scoring |
+------------------+--------------------------------------------+
8.1 Belge Yükleyiciler
Belge yükleyiciler çeşitli kaynaklardan metin çıkarır. Ekstraksiyonun kalitesi Cevapların kalitesini doğrudan etkiler.
Formato | Loader Consigliato | Note
-----------------+---------------------------+---------------------------
PDF | PDFLoader, PyPDFLoader | Attenzione a tabelle/immagini
HTML/Web | CheerioWebBaseLoader | Rimuove tag, estrae testo
Markdown | MarkdownTextSplitter | Preserva la struttura
CSV/Excel | CSVLoader | Una riga = un documento
JSON | JSONLoader | Configura il percorso dati
Database SQL | Custom loader | Query -> documenti
Confluence/Notion| API-based loader | Richiede autenticazione
Codice sorgente | TextLoader + filtri | Splitta per funzione/classe
8.2 Retriever: Benzerlik Aramasının Ötesinde
Avcı yalnızca en benzer parçaları bulmaz. Gelişmiş stratejiler var iyileşme kalitesini artırmak için.
Alma stratejileri
- Benzerlik Araması: En yüksek benzerlik puanına sahip k parçaları. Basit ama etkili
- MMR (Maksimum Marjinal Uygunluk): Uygunluk ve çeşitliliği dengeleyin. Birbirine çok benzeyen parçalardan kaçının
- Kendi Kendine Sorgulama: Model, sorudan filtreler çıkarır (ör. tarihe göre "2024 belgeleri" filtreleri)
- Topluluk: Daha iyi kapsam için birden fazla alıcıdan gelen sonuçları (ör. anahtar kelimeler + anlambilim) birleştirin
- Ana Belge: İlgili parçayı alır ancak tam bağlam için ana belgeyi döndürür
9. RAG'ın Sınırlamaları ve Ne Zaman Kullanılmaması Gerektiği
RAG sihirli bir çözüm değil. Her mimaride olduğu gibi bunun da bilmeniz gereken sınırlamaları vardır onu benimsemeden önce.
RAG Doğru Seçim OLMADIĞINDA
- Karmaşık akıl yürütme: RAG akıl yürütmeyi değil, gerçekleri sağlar. Çok adımlı analiz veya karmaşık mantıksal çıkarımlar için modelin kendi yeteneklerine sahip olması gerekir.
- Yapılandırılmış veriler: Tablolar arasında SQL toplamalarına, hesaplamalarına veya birleştirmelerine ihtiyacınız varsa RAG değil ilişkisel bir veritabanı kullanın
- Ultra hızlı gerçek zamanlı yanıtlar: Alma hattı gecikmeyi artırır (100-500 ms). 50 ms'den kısa sürede yanıtlara ihtiyacınız varsa önbelleğe almayı düşünün
- Bilgi tabanı çok küçük: Az sayıda belgeyle (<10 sayfa), geri çağırmaya gerek kalmadan her şeyi bilgi istemine sığdırabilirsiniz
- Çok dinamik veriler: Veriler her saniye değişiyorsa (örneğin borsa fiyatları), RAG güncelleme konusunda yeterince hızlı değildir
Yaygın Sorunlar ve Çözümler
| Sorun | Neden | Çözüm |
|---|---|---|
| Alakasız cevaplar | Çok büyük parçalanma | Parça boyutunu azaltın, örtüşmeyi artırın |
| Çok sık "Bilmiyorum" yanıtını veriyor | Geri alma çok kısıtlayıcı | K'yi (sonuç sayısı) artırın, MMR'yi kullanın |
| Kalıcı halüsinasyonlar | Yetersiz veya belirsiz bağlam | İstemi iyileştirin, açık talimatlar ekleyin |
| Yüksek gecikme | Bağlamda çok fazla parça var | K'yi azaltın, yeniden sıralamayı kullanın |
| Yüksek maliyetler | Sorgu başına çok fazla jeton var | Parçaları sıkıştırın, daha ucuz modeller kullanın |
10. RAG için Değerlendirme Metrikleri
RAG sisteminizin iyi çalışıp çalışmadığını bilmek için onu ölçmeniz gerekir. İşte ana ölçümler.
RAG metrikleri
| Metrik | Neyi ölçer | Hedef |
|---|---|---|
| Bağlam Uygunluğu | Alınan belgeler başvuruyla alakalı mı? | > 0,8 |
| Sadakat | Cevap sağlanan belgelere dayanıyor mu? | > 0,9 |
| Cevap Alaka Düzeyi | Cevap soruyla alakalı mı? | > 0,85 |
| Gecikme | Yanıt vermek için toplam süre | < 3 saniye |
| Halüsinasyon Oranı | Belgelerle desteklenmeyen taleplerin yüzdesi | < %5 |
Tool di Valutazione:
- RAGAS (Retrieval Augmented Generation Assessment)
- LangSmith (by LangChain) - tracing e valutazione
- Phoenix (by Arize) - osservabilità LLM
- DeepEval - framework di testing per LLM
- TruLens - valutazione feedback-driven
Metriche Composite:
RAG Score = (Context Relevance + Faithfulness + Answer Relevance) / 3
Sonraki Adımlar
Bu makalede RAG hakkında sağlam bir anlayış kazandınız: nedir, nasıl çalışır, mimarinin temel bileşenleri ve ne zaman kullanılacağı (veya kullanılmaması gerektiği). Rolü anladın yerleştirmelerin temelleri, parçalama stratejileri ve değerlendirme ölçümleri.
içinde sonraki makale teoriden pratiğe geçeceğiz: uygulayacağız kullanarak eksiksiz bir RAG sistemi TypeScript ve LangChain.js, bir vektör ile gerçek mağaza ve hafızalı bir konuşma arayüzü.
Ek Kaynaklar
- Orijinal RAG kağıdı: "Bilgi Yoğun NLP Görevleri için Erişimle Artırılmış Üretim" (Lewis ve diğerleri, 2020)
- LangChain.js Dokümanları: TypeScript'te uygulamaya yönelik resmi belgeler
- OpenAI Yemek Kitabı: OpenAI API'leriyle RAG'nin pratik örnekleri
- Çam Kozalağı Öğrenme Merkezi: Vektör veritabanları ve yerleştirmelere ilişkin kılavuzlar
- - RAGAS: RAG sistemlerini değerlendirmek için açık kaynaklı çerçeve







