İçeriğe geç

RAG nedir?

Önüne doğru parçalar konan model doğru cevabı kaynağıyla verdi. Bu düzeneğin bir adı var; adı da ne yaptığını söylüyor.

soruR · Retrievalbul: en ilgili parçalarembed · ara · rerankvector DBingest ile bir kere dolduA · Augmentedekle: prompt’a koykurallar + kaynaklar + soruG · Generationyaz: model yazaraynı gemma3:4bcevap+ [1]
  1. Adın açılımı

    RAG = Retrieval-Augmented Generation. Üç kelime, sırayla çalışan üç iş: bul, ekle, yaz.

  2. R · Retrieval: bul

    Soru, dokümanlardan önceden hazırlanmış parçalar arasında aranır ve en ilgili birkaçı seçilir. Bizde iki dosya: 6-retrieve.ts (arama) ve 7-rerank.ts (rerank).

  3. A + G · ekle ve yaz

    Seçilen parçalar numaralanıp sorunun önüne konur, üstüne kurallar eklenir. Model cevabı bu girdiden yazar ve kaynağın numarasını ekler. İkisi tek dosyada, 8-answer.ts.

  4. Tek cümlede

    RAG ilgili parçaları bulur, prompt’a ekler; model cevabı bu parçalardan yazar.

npm run ask bir soruyu 6-retrieve.ts, 7-rerank.ts ve 8-answer.ts dosyalarından geçirir:

src/cli/ask.ts
// npm run ask -- "question" [--prompt] [--bare] [--k 8]
// The online half, steps 6–8 for any question: retrieve → rerank → answer.
// --prompt print the exact text the model receives
// --bare first ask the model with NO sources (step 0), for comparison
// --k N how many chunks the retriever hands on
import { cli } from "../lib/config.js";
import { run as bare } from "../steps/0-bare.js";
import { run as retrieve } from "../steps/6-retrieve.js";
import { run as rerank } from "../steps/7-rerank.js";
import { run as answer } from "../steps/8-answer.js";
import { exitOnError } from "./errors.js";
const question = cli.positionals[0];
if (!question) {
console.error('usage: npm run ask -- "How much is the international per diem?" [--prompt] [--bare] [--k 8]');
process.exit(1);
}
try {
if (cli.flags.bare) await bare(question);
await retrieve(question);
await rerank();
await answer();
} catch (e) {
exitOnError(e);
}
Sorun RAG ne yapar Bugün nerede görüyoruz
Özel veri Modelin hiç görmediği şirket dokümanını her soruda önüne koyar RAG’siz / RAG’li
Güncellik Yeni sürüm gelince yeniden ingest; eğitim yok Veri değişince
Kaynak gösterme Cevap, hangi parçadan geldiğini [1] ile söyler F · Cevap üretimi
Erişim kontrolü Yalnızca İK’ya açık doküman, aramada filtreyle dışarıda kalır E · Retrieval ve rerank · Güvenlik
Uydurma Kaynakta yoksa “bilmiyorum” demesi tasarlanabilir F · Cevap üretimi
  • Stil ve format. Modelin nasıl konuştuğu RAG’in işi değil: prompt ya da fine-tune. Modeli değiştiren bu ikinci yol sıradaki sayfada: RAG mı fine-tune mı?
  • Hesap. Model yine bir dil modeli; kaynaktaki sayılarla işlem yaparken yanılabilir. Bunu bugün ölçmedik.
  • Kötü veri. Yanlış, eski ya da birbiriyle çelişen doküman, doğru bulunsa da yanlış cevap üretir.
  • Modelin okuma hatası. Doğru parça önündeyken bile model yanlış satırı okuyabilir. Ayrıntısı: Sınırlar ve RAG türleri.

Bugün kurduğumuz, RAG’in en sade biçimi (naive RAG) artı rerank. Başka türleri ve hangi hatayı düzelttikleri: Sınırlar ve RAG türleri.

RAG demek vector DB demek mi?

Hayır. “Bul” adımı anahtar kelime araması, bir SQL sorgusu ya da bir API çağrısı da olabilir. Vector araması yaygın, çünkü kelimeyi değil anlamı arar; ne kadar iyi aradığını C · Embedding sayfasında ölçüyoruz.

RAG bir kütüphane mi, bir ürün mü?

Bir düzenek, bir tasarım kalıbı. Bugün her adımı kendimiz, düz TypeScript’le yazıyoruz; framework’ler aynı adımları paketler. Adımları bir kez elle kurmak, framework’ün içinde ne olduğunu görmeyi sağlar.

RAG modeli değiştirmez, modele verilen girdiyi değiştirir.