Local AI

Ollama ve LangChain ile Gerçek Zamanlı Kurumsal Bilgi Erişimi için Yerel RAG Boru Hattı Oluşturma

Veri gizliliği ve gecikme süresinin (latency) kritik öneme sahip olduğu bir çağda, işletmeler bulut bağımlı Büyük Dil Modellerinden (LLM) uzaklaşmayı giderek daha fazla tercih ediyor. Ollama kullanarak modelleri yerel olarak barındırarak ve LangChain ile bunları yöneterek geliştiriciler, hassas veriyi kuruluşun güvenlik duvarı içinde tutan Birleştirilmiş Üretim (RAG) boru hattı oluşturabilir. Bu yaklaşım sadece güvenliği artırmakla kalmaz, aynı zamanda çıkarım maliyetlerini ve gecikme süresini de azaltır.

Bu kılavuz, yerel bir RAG sisteminin mimari bileşenlerini adım adım açıklar ve Python kullanarak pratik bir uygulama sağlar. Kurumsal belgeleri işleme, bunları yerel olarak gömme (embedding) ve bilgi tabanına gerçek zamanlı sorgulama yapmaya odaklanacağız.

Neden Yerelde Çalışmalı?

Bulut tabanlı LLM API'leri kolaylık sağlar ancak kurumsal kullanım durumları için önemli dezavantajlar taşır. Verinin sınırları aşması (crossing borders) endişeleri, öngörülemez API maliyetleri ve ağ gecikmesi, gerçek zamanlı uygulamaları engelleyebilir. Yerel çıkarım bu sorunları şu şekilde çözer:

  • Veri Egemenliği: Ham belge verisi sunucunuzdan hiç çıkmaz.
  • Maliyet Etkinliği: Token başına ücret yoktur; sadece elektrik ve donanım maliyetini ödersiniz.
  • Özelleştirme: Yerel donanım kullanarak ince ayar yapmak veya bağlam penceresini genişletmek kolaydır.

Mimari Genel Bakış

Yerel bir RAG boru hattı genellikle dört ana aşamadan oluşur: İşleme (Ingestion), Gömme (Embedding), Depolama ve Üretim ile Erişim. Bu eğitim için, yerel yürütme için optimize edilmiş olan Mistral modelini (Ollama üzerinden) üretim ve nomic-embed-text modelini gömme için kullanacağız.

Ortamın Hazırlanması

Koda dalmadan önce Ollama'nın yüklü ve çalışır durumda olduğundan emin olun. Gerekli modelleri çekin:

ollama pull mistral
ollama pull nomic-embed-text

Ardından, gerekli Python kütüphanelerini yükleyin:

pip install langchain langchain-community langchain-huggingface unstructured

RAG Zincirinin Uygulanması

Çözümümüzün çekirdeği, belge işleme için LangChain'in UnstructuredFileLoader (not: orijinal metinde 'SimplesLoader' geçse de kod örneğinde 'UnstructuredFileLoader' kullanılmıştır, kodu referans alıyoruz) ve metni vektörleştirmek için OllamaEmbeddings kullanır. Aşağıdaki komut dosyası, yerel bir PDF belgesine sorgulama yapan minimum uygulanabilir ürün (MVP) için bir örnek sunar.

from langchain_community.document_loaders import UnstructuredFileLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_community.embeddings import OllamaEmbeddings
from langchain_community.vectorstores import FAISS
from langchain_community.llms import Ollama
from langchain.chains import RetrievalQA
import os

# 1. Belgeleri Yükle ve Parçalara Ayır
loader = UnstructuredFileLoader("enterprise_policy.pdf")
documents = loader.load()

text_splitter = RecursiveCharacterTextSplitter(
    chunk_size=1000, 
    chunk_overlap=200
)
docs = text_splitter.split_documents(documents)

# 2. Gömmeleri Yerel Olarak Oluştur
embeddings = Ollama(model="nomic-embed-text")

# 3. Vektör Veritabanında Depola (FAISS)
db = FAISS.from_documents(docs, embeddings)

# 4. LLM ve Erişim Zincirini Başlat
llm = Ollama(model="mistral", temperature=0.1)
qa_chain = RetrievalQA.from_chain_type(
    llm=llm, 
    chain_type="stuff", 
    retriever=db.as_retriever(),
    return_source_documents=True
)

# 5. Sisteme Sorgu Gönder
query = "Şirketin uzaktan çalışma politikası nedir?"
result = qa_chain.invoke({"query": query})
print(result['result'])

Üretim İçin Pratik Düşünceler

Yukarıdaki komut dosyası gösterim amaçlı işlevsel olsa da, üretim seviyesindeki sistemler ek katmanlar gerektirir. İlk olarak, bu boru hattını bir REST API olarak dağıtmak ve ön uç uygulamalarının RAG sistemiyle asenkron olarak etkileşime girmesini sağlamak için LangChain'in LangServe kullanımını düşünün. İkinci olarak, doğruluğu artırmak için yeniden sıralama (re-ranking) adımları uygulayın. FAISS hızlı erişim sağlar, ancak sonuçları LLM'ye geçirmeden önce daha iyi ilgililik için yeniden puanlamak üzere bir çapraz kodlayıcı (cross-encoder) modeli kullanılabilir.

Son olarak, GPU kullanımınızı izleyin. Yerel çıkarım donanım yoğunlukludur. nvtop gibi araçlar, yoğun kurumsal kullanım sırasında sistem aşırı yüklenmesini önlemek için toplu iş boyutlarını ve eşzamanlılık sınırlarını optimize etmenize yardımcı olabilir.

Sonuç

Ollama ve LangChain ile yerel bir RAG boru hattı oluşturmak, işletmelerin güvenliği veya hızdan ödün vermeden yapay zekanın potansiyelinden yararlanmasını sağlar. Veriyi yerel tutarak riski azaltırken, modelleri belirli alan ihtiyaçlarına göre uyarlama esnekliğini de korursunuz. Yerel model performansı iyileştikçe, bu mimari güvenli ve gerçek zamanlı bilgi erişim sistemleri için standart haline gelecektir.

Share: