Retrieval-augmented Generation ile Gelişmiş Metin Üretimi
Geleneksel LLM tabanlı sistemlerin eğitim verileriyle sınırlı kaldığı bir ortamda, retrieval-augmented generation (RAG) önemli bir iyileştirme sunmaktadır. RAG, metin üretimini ilgili dış bilgileri entegre ederek geliştirir. Agentic RAG ise, LLM ve geri alma mekanizmalarıyla entegre edilmiş otonom sistemlerden faydalanarak bir adım daha ileri gitmektedir. Bu sayede, bu sistemler karar verebilir, değişen gereksinimlere uyum sağlayabilir ve dinamik olarak karmaşık akıl yürütme görevlerini yerine getirebilir.
RAG Ajanı Oluşturma Atölyesi
Bu RAG ajanı oluşturma atölyesine yönelik rehber, size şunları kazandıracaktır:
- Agentic RAG’ın temel ilkeleri hakkında anlayış, NVIDIA’nın açık veri ve ağırlıklara sahip açık model ailesi olan Nemotron hakkında bilgi.
- Agentic RAG sistemlerini LangGraph kullanarak nasıl oluşturacağınız hakkında bilgi.
- Taşınabilir bir geliştirme ortamı.
- Kendi özelleştirilmiş agentic RAG sisteminiz, paylaşıma hazır olarak NVIDIA Launchable’ı kullanma imkanı.
Video ile Tanıtım
Atölyenin Başlatılması
Atölyeyi bir NVIDIA Launchable olarak başlatın:
Jupyter Lab ortamınız çalışmaya başladıktan sonra, Jupyterlab Başlatıcısı’nda NVIDIA DevX Öğrenme Yolu bölümünü bulun. Laboratuvar talimatlarını açmak için Agentic RAG sekmesine tıklayarak başlayın.
Sıralama Ayarlarının Yapılması
Bu atölyeyi takip edebilmek için birkaç proje sırrını toplamanız ve yapılandırmanız gerekecek.
- NGC API Anahtarı: Bu, NVIDIA yazılımına, modellere, konteynerlere ve daha fazlasına erişim sağlar.
- (isteğe bağlı) LangSmith API Anahtarı: Bu, atölyenin LangChain platformuna bağlanmasını sağlamak için kullanılır.
Jupyterlab Başlatıcısı’ndaki Sırlar Yöneticisi sekmesini kullanarak bu gizli bilgileri atölye geliştirme ortamınız için yapılandırabilirsiniz. Sıraların başarıyla eklenip eklenmediğini loglar sekmesinden doğrulayın.
RAG Mimarisi ile Tanışma
Atölye ortamınız kurulduktan sonra, inşa edeceğiniz agentic RAG sisteminin mimarisini anlamak için bir sonraki adım.
RAG, LLM’lerin yeteneklerini dış bilgileri dahil ederek geliştirir. Geleneksel dil modelleri, yanıtlarını yalnızca eğitim verilerindeki bilgilere dayanarak oluştururken; RAG, harici bir bilgi tabanından alınan ilgili yapılandırılmamış verileri kullanarak yanıt üretme gücü sunar.
RAG sisteminin tipik akışı:
- İstekte Bulunma: Kullanıcı doğal dil sorgusu oluşturur.
- Embedding Modeli: İstek vektörlere dönüştürülür.
- Vektör Veritabanı Arama: Kullanıcının isteği bir vektöre dönüştürüldükten sonra, sistem, anlamsal olarak indekslenmiş belgelere hızlı erişim sağlayarak bağlam açısından ilgili veri parçalarını arar.
- Yeniden Sıralama Modeli: Alınan veri parçaları, en uygun verilerin önceliklendirilmesi amacıyla yeniden sıralanır.
- LLM: LLM, alınan verilere dayalı yanıtlar üretir.
Bu yaklaşım, dil modelinin yalnızca eğitim verilerinden öte, güncel ve belirli bilgilere erişmesini sağlar ve daha çok yönlü ve etkili hale getirir.
ReAct Ajan Mimarisi ile Anlayış
Geleneksel LLM tabanlı uygulamalardan farklı olarak, ajanlar dinamik olarak araç seçebilir, karmaşık akıl yürütme sürecini içerebilir ve durumun gereksinimlerine göre analiz yaklaşımlarını uyarlayabilir.

ReAct Ajanları, araç çağrıma ile desteklenen “akıl yürütme ve eylem” üzerinden çalışan basit agentic bir mimaridir. Eğer LLM, isteği aldıktan sonra herhangi bir araç çağrısı talep ediyorsa, bu araçlar çalıştırılacak ve sohbet geçmişine eklenecektir.
Kod Öğrenme ve Uygulama
Artık kavramları anladığımıza göre, teknik uygulamaya dalalım. Temel bileşenler ile başlayacak ve tam agentic RAG sistemine doğru ilerleyeceğiz:
- Modeller
- Aletler
- Veri Alma
- Metin Bölme
- Vektör Veritabanı Alma
- Belgeleri Alma ve Yeniden Sıralama
- Alıcı Araç Oluşturma
- Ajan Yapılandırması
Temeller: Modeller
Atölye, ajanın çalışmasını sağlayan temel model için NVIDIA NIM uç noktalarını kullanır. NVIDIA NIM, yüksek performanslı çıkarım yetenekleri sunmaktadır. Bu yetenekler arasında:
- Alet Bağlama: İşlev çağrısı için yerleşik destek.
- Yapılandırılmış Çıktı: Pydantic modelleri için yerleşik destek.
- Asenkron İşlemler: Paralel işleme için tam asenkron/davet desteği.
- Kurumsal Güvenilirlik: Üretim düzeyinde çıkarım altyapısı.
Bu örnek, NVIDIA NIM aracılığıyla ChatNVIDIA LangChain bağlantısını göstermektedir:
from langchain_nvidia_ai_endpoints import ChatNVIDIA
LLM_MODEL = "nvidia/nvidia-nemotron-nano-9b-v2"
llm = ChatNVIDIA(model=LLM_MODEL, temperature=0.6, top_p=0.95, max_tokens=8192)
LLM tabanlı uygulamanın kalitesini sağlamak için, ajanın karar verme süreçlerini netleştirmek ve belirsizliği ortadan kaldırmak adına net talimatlar alması önemlidir. code/rag_agent.py
içinden bir örnek:
SYSTEM_PROMPT = (
"You are an IT help desk support agent.n"
"- Use the 'company_llc_it_knowledge_base' tool for questions likely covered by the internal IT knowledge base.n"
"- Always write grounded answers. If unsure, say you don't know.n"
"- Cite sources inline using [KB] for knowledge base snippets.n"
"- If the knowledge base doesn't contain sufficient information, clearly state what information is missing.n"
"- Keep answers brief, to the point, and conversational."
)
Bu talimat, RAG tabanlı uygulamalar için güvenilir LLM yönlendirmesinin bazı temel ilkelerini içermektedir:
- Rol Tanımlaması: Ajanın uzmanlığının ve sorumluluklarının net bir ifadesi.
- Alet Kullanımı: Ajanın hangi görevler için hangi araçları kullanması gerektiğine dair talimatlar.
- Temel Bilgilere Dayandırma: Güvenilir kaynaklardan yanıt sağlamanın ve belirsizliği kabullenmenin önemi.
- Kaynak Belirtilmesi: saydamlığı sağlamak için kaynakları belirtme yönergeleri.
- İletişim Tarzı: Beklenen iletişim tarzını belirleme.
İçinde, code/rag_agent.py
, IT Yardım Masası ajanının kullanıcı sorgularına yanıt vermesi için gerekli olan modelleri tanımlıyoruz:
- LLM Modeli, Nemotron Nano 9b V2, yanıtlar üretmek için kullanılan temel akıl yürütme modelidir.
- NVIDIA NeMo Alıcı Gömülü Modeli, Llama 3.2 EmbedQA 1b V2, belgeleri vektör gömülü temsillerine dönüştürmek için kullanılır.
- NeMo Alıcı Yeniden Sıralama Modeli, Llama 3.2 RerankQA 1b V2, en alakalı belgelerin yeniden sıralanması için kullanılır.
Bu modeller, IT Yardım Masası ajanın kullanıcı sorgularına doğru yanıt vermesini sağlamak için dil üretimi, belge alma ve yeniden sıralama kabiliyetlerinin bir kombinasyonunu kullanır.
Temeller: Aletler
RAG ajanı, ./data/it-knowledge-base
dizininde sağlanan bilgi tabanına erişebilir. Alıcı aracı, ajanın kullanıcının sorgusuna ilişkin belge araması yapmasını sağlar.
Bir vektör veritabanı, vektörleştirilmiş gömülü temsillerinin sayısal verilerini depolar, indeksler ve sorgular ve böylece metin, görüntü ve ses gibi yapılandırılmamış verilere hızlı benzerlik aramaları yapar. Bu amaçla, küçük veritabanları oluşturmak için verimli bir yöntemdir, biz de bellek içi FAISS veritabanını kullanacağız. Veri alımında, bilgi tabanındaki verileri kullanmak amacıyla metin alımına odaklanacağız.
Temeller: Veri Alım Süreci
Kullanılan gömme modeli, NeMo Alıcı llama-3.2-nv-embedqa-1b-v2. Bu model, belgeler ve sorgular için gömülü temsiller oluşturularak bilgi tabanından ilgili belgelerin verimli bir şekilde alınmasına yardımcı olur.
Belgelerin alımı için, belgeleri parçalayacak, bu parçaları vektörlere gömecek ve ardından bunları veritabanına ekleyeceğiz. Bunu yapmadan önce, verileri ./data/it-knowledge-base
dizinimizden yüklemek için LangChain DirectoryLoader’ı kullanmamız gerekiyor.
from langchain_community.document_loaders import DirectoryLoader, TextLoader
# Verileri oku
_LOGGER.info(f"Reading knowledge base data from {DATA_DIR}")
data_loader = DirectoryLoader(
DATA_DIR,
glob="**/*",
loader_cls=TextLoader,
show_progress=True,
)
docs = data_loader.load()
Temeller: Metin Bölme
Belge bölme, iki şeyle kontrol edilir: parça boyutu ve parça örtüşmesi.
Parça boyutu, her bir metin parçasının maksimum uzunluğunu tanımlar. Bu, her parçanın dil modelleri ve geri alma sistemleri tarafından işlenmesi için optimize edilmesini sağlar. Çok büyük bir parça boyutu, belirli sorgular için daha az ilginç bilgiler içerebilirken, çok küçük olanlar önemli bağlamı atlayabilir.
Parça örtüşmesi, arka arkaya parçalar arasında örtüşen token sayısını tanımlar. Hedef, parçalar arasındaki sürekliliği sağlayarak alınan bilgilere tutarlılık kazandırmaktır.
Metin bölme işlemini verimli bir şekilde gerçekleştirmek için RecursiveCharacterTextSplitter aracını kullanıyoruz. Bu araç, belgeleri karakter uzunluğuna dayalı olarak daha küçük parçalara bölmek için çalışır ve bu sayede her parça belirlenen parça boyutu ve örtüşme parametrelerine uygun olur. Bu, büyük belgelerin işlenmesi için oldukça faydalıdır ve bilgi almanın genel doğruluğunu artırır.
from langchain.text_splitter import RecursiveCharacterTextSplitter
CHUNK_SIZE = 800
CHUNK_OVERLAP = 120
_LOGGER.info(f"Ingesting {len(docs)} documents into FAISS vector database.")
splitter = RecursiveCharacterTextSplitter(
chunk_size=CHUNK_SIZE, chunk_overlap=CHUNK_OVERLAP
)
chunks = splitter.split_documents(docs)
Temeller: Vektör Veritabanı Alımı
İlgili bilgilerin verimli bir şekilde alınabilmesi için büyük belge hacmimizi bir vektör veritabanına aktarmamız gerekiyor. Belgeleri yönetilebilir parçalara ayırdıktan sonra, her belge parçası için vektör gömme işlemleri gerçekleştirmek için gömme modelini kullanıyoruz.
Bu gömmeler, parçaların anlamsal içeriğinin sayısal temsilleridir. Yüksek kaliteli gömmeler, benzerlik aramalarını verimli hale getirerek, sistemin kullanıcı sorgusuna en uygun olan parçaları hızlıca belirlemesine olanak tanır.
Oluşturulan gömmeleri bellek içi FAISS veritabanında depolamak, gerçek zamanlı bilgi alımı için hızlı indeksleme ve sorgulama yetenekleri sağlar. Bu örnekte, LangChain‘in FAISS from_documents yöntemi, belge parçaları için gömmeleri oluşturma ve bunları FAISS vektör deposunda depolama işlemlerini tek bir işlev çağrısıyla kolayca gerçekleştirmektedir.
from langchain_community.vectorstores import FAISS
from langchain_nvidia_ai_endpoints import NVIDIAEmbeddings,
embeddings = NVIDIAEmbeddings(model=RETRIEVER_EMBEDDING_MODEL, truncate="END")
vectordb = FAISS.from_documents(chunks, embeddings)
Bu adımları takip ederek ve gömme modelinin gücünden faydalanarak IT Yardım Masası ajanının, bilgi tabanından ilgili bilgileri verimli bir şekilde almasını ve işlemesini sağlamış olacağız.
Temeller: Belge Alıcısı ve Yeniden Sıralayıcı
Vektör veritabanımızın doldurulmasıyla birlikte, içerik alma zincirini kurma adımına geçebiliriz. Bu, hem gömme aşamasını hem de arama aşamasını içeren bir iş akışı oluşturmayı içerir.
Gömme aşamasında, kullanıcı sorguları, önceki belge parçaları için kullandığımız gömme modeliyle gömülere dönüştürülür. Bu, sorgular ve belge parçalarının aynı anlamsal uzayda temsil edilmesini sağlar ve doğru benzerlik karşılaştırmalarına olanak tanır.
Bu örnekte, alıcıyı başlatmak için altyapı çalışması yapacağız ve kullanıcı sorgu ile karşılaştırıldığında en benzer altı sonucu arayacağız.
# imports already handled
kb_retriever = vectordb.as_retriever(search_type="similarity", search_kwargs={"k": 6})
Kullanıcıların sorgularının gömmeleri, vektör veritabanında saklanan gömmelerle karşılaştırılır. En benzer belge parçaları alınır ve yanıtlar oluşturmak için kullanılır.
Gömme ve yeniden sıralama modelinin her ikisi için de, NVIDIA NeMo Alıcı Gösterim mikro hizmetlerini kullanacağız. LangChain, vektör veritabanı nesnemizden gömme ve görüntüleme aşamalarını içeren temel bir alma zinciri oluşturmamıza olanak tanır.
Alınan belgelerin doğruluk ve sıralamasını artırmak için NVIDIA Yeniden Sıralama sınıfını kullanabiliriz. Yeniden sıralayıcı modeli, alınan belge parçalarını kullanıcı sorgusuna daha ilgili olanlara göre sıralar ve en alakalı bilgileri önce sunar. Bu örnekte, yeniden sıralayıcıyı şu şekilde başlatıyoruz:
from langchain_nvidia_ai_endpoints import NVIDIARerank
reranker = NVIDIARerank(model=RETRIEVER_RERANK_MODEL)
Temeller: Alıcı Araç Oluşturma
Belge alıcısını ve belge yeniden sıralayıcısını kullanarak son belge alıcısını aşağıdaki şekilde oluşturabiliriz:
RETRIEVER = ContextualCompressionRetriever(
base_retriever=kb_retriever,
base_compressor=reranker,
)
LangChain ContextualCompressionRetriever, bir alıcıyı ek işlem adımları ile birleştirmeyi kolaylaştırır, bu yararlı alım zincirini yeniden sıralama modeliyle bağlar. Şimdi, ReAct Ajanımızı etkinleştirecek alıcı aracını oluşturabiliriz.
Bu örnekte, başlangıçta LangChain araçları paketini kullanarak alıcı aracını şu şekilde başlatıyoruz:
from langchain.tools.retriever import create_retriever_tool
RETRIEVER_TOOL = create_retriever_tool(
retriever=RETRIEVER,
name="company_llc_it_knowledge_base",
description=(
"Search the internal IT knowledge base for Company LLC IT related questions and policies."
),
)
Temeller: Ajan Yapılandırması
Vektör veritabanımız ve alıcı zincirimiz oluşturulduktan sonra, ajan grafiğimizi oluşturma zamanı geldi. Bu ajan grafiği, modelin görevini yerine getirmek için atabileceği adımları haritalayan bir akış diyagramı işlevi görmektedir. Geleneksel adım adım LLM uygulamalarında bunlara “zincirler” denirken, dinamik ve doğrusal olmayan karar verme süreçlerini içeren iş akışlarına ise “grafikler” denir. Ajan, görevin bağlamı ve gereksinimlerine göre farklı yollar seçebilir ve farklı karar düğümlerine dallanabilir.
Grafik oluşturmak için LangGraph, ReAct Ajan Grafiği yaratacak bir fonksiyon sunmaktadır. Bu örnekte, şu şekilde kullanacağımız:
from langgraph.prebuilt import create_react_agent
AGENT = create_react_agent(
model=llm,
tools=[RETRIEVER_TOOL],
prompt=SYSTEM_PROMPT,
)
Ajan grafiği oluşturarak, IT Yardım Masası ajanın karmaşık karar verme süreçlerini yönetim için dinamik ve esnek bir iş akışı sağlarız. Bu yaklaşım, ajanın bilgiyi verimli bir şekilde alma ve işleme, doğru yanıtlar sağlama ve çeşitli senaryolara uyum sağlama yeteneğini artırır.
Ajanınızı Çalıştırma
Tebrikler! Ajanınızı başarıyla oluşturdunuz! Şimdi, deneme zamanı.
Ajansası başlatmak için, kodunuzun yer aldığı dizine gidin. Oradan, LangGraph CLI ile Ajan API’nizi başlatın. Ajanınız, kodunuza yaptığınız değişiklikler yüklenirken otomatik olarak yeniden yüklenir.
langraph dev
Ajanla sohbet etmek için Simple Agents Client içerisinde basit bir Streamlit uygulaması bulunmaktadır. Ayrıca, Jupyter Başlatıcı sayfasından Streamlit İstemcisine erişebilirsiniz. Kenar çubuğunda, rag_agent istemcisini seçtiğinizden emin olun ve sohbet etmeye başlayın!
Ajanslarınız daha karmaşık hale geldikçe, iç düzenlemelerini yönetmek zorlaşabilir. İzleme, ajanın her adımını görselleştirmenize yardımcı olur, bu da ajanın davranışını hata ayıklamak ve optimize etmek için daha kolay hale getirir. Atölyede, isteğe bağlı olarak LANGSMITH_API_KEY ayarlayabilir ve LangSmith kontrol panelinde izleme yapabilirsiniz.
Yerel NIM Mikro Hizmetlerine Geçiş
Bu atölye, nvidia-nemotron-nano-9b-v2 LLM’ini NVIDIA API Kataloğu’ndan kullanmaktadır. Bu API’ler birçok modeli değerlendirmek, hızlı deneyler yapmak ve başlamak için ücretsizdir. Ancak, üretimde sınırsız performans ve kontrol için modelleri yerel olarak NVIDIA NIM mikro hizmet konteynerleriyle dağıtmak daha uygun.
Tipik bir geliştirme iş akışında, hem ajandanız hem de NIM kapsayıcıları arka planda çalışır, böylece çoklu görev yapabilir ve hızlı bir biçimde ilerleyebilirsiniz. Bu egzersiz için, NIM’i yükleme için rahatça izlemenizi sağlamak amacıyla ön planda çalıştıracağız.
Öncelikle, NGC konteyner kayıt sistemine giriş yapmalısınız:
echo $NVIDIA_API_KEY |
docker login nvcr.io
--username '$oauthtoken'
--password-stdin
Bir sonraki adım, NIM konteynerlerinin indirilen model dosyalarını kaydetmesi için bir konum oluşturmaktır.
docker volume create nim-cache
Sonrasında, bir Docker çalışma komutu kullanarak NIM konteyner görüntüsünü ve model veri dosyalarını çekmeli ve modeli yerel, OpenAI uyumlu bir API arkasında barındırmalısınız.
docker run -it --rm
--name nemotron
--network workbench
--gpus 1
--shm-size=16GB
-e NGC_API_KEY=$NVIDIA_API_KEY
-v nim-cache:/opt/nim/.cache
-u $(id -u)
-p 8000:8000
nvcr.io/nim/nvidia/nvidia-nemotron-nano-9b-v2:latest
Birkaç dakika çalıştırdıktan sonra, “Uygulama başlatma tamamlandı” yazısını gördüğünüzde NIM’in çıkarım için hazır olduğunu anlayacaksınız.
INFO 2025-09-10 16:31:52.7 on.py:48] Waiting for application startup.
INFO 2025-09-10 16:31:52.239 on.py:62] Application startup complete.
INFO 2025-09-10 16:31:52.240 server.py:214] Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit)
...
INFO 2025-09-10 16:32:05.957 metrics.py:386] Avg prompt throughput: 0.2 tokens/s, Avg generation throughput: 1.1 tokens/s, Running: 0 reqs, Swapped: 0 reqs, Pending: 0 reqs, GPU KV cache usage: 0.0%, CPU KV cache usage: 0.0%.
Artık yerel NIM çalıştırdığınıza göre, oluşturduğunuz rag_agent.py
dosyasındaki ajanı buna yönlendirmemiz gerekiyor.
llm = ChatNVIDIA(
base_url="http://nemotron:8000/v1",
model=LLM_MODEL,
temperature=0.6,
top_p=0.95,
max_tokens=8192
)
LangGraph sunucunuz hâlâ çalışıyorsa, Simple Agents Client’a geri dönüp ajana tekrar yanıt vermeyi deneyebilirsiniz. Her şey başarılı olduysa, değişiklik fark edilmeyecek!
Sonuç ve Sonraki Adımlar
Bu atölye, temel kavramlardan karmaşık agentic sistemlere kadar kapsamlı bir yol sunmakta, üretim düzeyinde araçlar ve tekniklerle uygulamalı öğrenmeyi vurgulamaktadır.
Bu atölyeyi tamamlayarak, geliştiriciler şunlara pratik deneyim kazanacaktır:
- Temel kavramlar: Standart ve agentic RAG arasındaki farkları anlama.
- Durum yönetimi: Karmaşık durum geçişlerini ve sürekliliği uygulama.
- Alet entegrasyonu: Agentic alet çağırma yeteneklerini oluşturma ve yönetme.
- Modern AI yığını: LangGraph, NVIDIA NIM ve ilgili araçlarla çalışma.
Daha Fazla Bilgi Edinin
Uygulamalı öğrenme, ipuçları ve püf noktaları için Nemotron Lab canlı yayınına katılın, “NVIDIA Nemotron ile RAG Ajanı Oluşturma” konulu seminerleri takip edin.
- NVIDIA Nemotron’u Hugging Face üzerinden deneyin. Atölyeyi GitHub’da inceleyin.
- Sorularınızı Nemotron geliştirici forumu veya Nemotron kanalı üzerinden sorun.
- Daha fazla bilgi edinmek mi istiyorsunuz? “NVIDIA Nemotron ile OpenRouter’da Rapor Üretici AI Ajanı Oluşturma” konulu aynı NVIDIA DevX atölyesine katılın.
Agentic AI, Nemotron ve daha fazlası hakkında en son gelişmelerden haberdar olmak için NVIDIA haberlerine abone olabilir, topluluğa katılabilir ve NVIDIA AI’yı LinkedIn, Instagram, X ve Facebook üzerinde takip edebilirsiniz.
Yardımcı video eğitimleri ve canlı yayınları buradan keşfedin.