LangChain Mimari Tasarımı: 10 Adımda Kapsamlı [2026 Rehberi]
Yazar: Burak Balkı | Kategori: API Development | Okuma Süresi: 52 dk
Bu kapsamlı 2026 rehberi, LangChain mimari tasarımını ve LLM uygulamaları geliştirmeyi adım adım ele alıyor. Modülerlik, RAG, ajanlar ve performans optimizas...
# LangChain Mimari Tasarımı: Büyük Dil Modeli Uygulamaları için Kapsamlı [2026 Rehberi]
## Giriş: Büyük Dil Modeli Uygulamalarının Karmaşıklığını Yönetmek
Büyük Dil Modelleri (LLM'ler) ve diğer yapay zeka araçları, yazılım geliştirme dünyasında devrim yaratmaya devam ediyor. Ancak, bu güçlü modelleri gerçek dünya uygulamalarına entegre etmek, özellikle **LangChain mimari tasarımı** gibi konularda karmaşık mühendislik zorlukları içerebilir. Prompt mühendisliğinden harici veri kaynaklarıyla etkileşime, uzun süreli bellek yönetiminden çok adımlı akışların orchestrasyonuna kadar birçok katman, geleneksel uygulama geliştirme paradigmalarının ötesine geçer. Bu rehber, 2026 yılı itibarıyla en güncel LangChain yaklaşımlarını kullanarak, ölçeklenebilir ve sürdürülebilir LLM uygulamaları tasarlamanız için gerekli mimari prensipleri, pratik örnekleri ve ileri seviye teknikleri adım adım sunmaktadır. Okuyucularımız, bu kapsamlı rehber sayesinde karmaşık LLM çözümlerini nasıl inşa edeceklerini, performanslarını nasıl optimize edeceklerini ve üretim ortamına nasıl dağıtacaklarını detaylı bir şekilde öğrenecekler.
## LangChain Nedir?
LangChain, Büyük Dil Modelleri (LLM'ler) kullanarak uygulamalar geliştirmeyi kolaylaştıran, modüler bir framework'tür. 2026 itibarıyla geliştiricilerin LLM'leri harici veri kaynakları, hesaplama yetenekleri ve diğer API'lerle birleştirmesini sağlayan araçlar ve soyutlamalar sunar. Bu sayede, sadece bir LLM'in tek başına yapamayacağı, daha karmaşık ve bağlama duyarlı uygulamalar inşa edilebilir.
LangChain'in temel amacı, LLM'leri birincil mantık motoru olarak kullanarak, karmaşık iş akışlarını ve etkileşimleri yönetmektir. Geliştiriciler, LangChain sayesinde prompt mühendisliği, bellek yönetimi, harici araç entegrasyonu ve çok adımlı zincirleme gibi zorlu görevleri daha yapılandırılmış ve yönetilebilir bir şekilde ele alabilirler. Bu framework, özellikle chatbotlar, soru-cevap sistemleri, veri analizi yardımcıları ve otomasyon ajanları gibi LLM tabanlı API geliştirme projelerinde yaygın olarak kullanılmaktadır. Ekibimizde LangChain'e geçiş sürecinde, özellikle farklı LLM sağlayıcılarını (OpenAI, Google Gemini, Anthropic Claude vb.) tek bir soyutlama katmanı altında yönetebilme yeteneği sayesinde geliştirme hızımızda önemli bir artış gözlemledik.
## Neden LangChain Kullanmalısınız?
LangChain, LLM tabanlı uygulama geliştirme sürecini basitleştiren ve hızlandıran bir dizi önemli avantaj sunar. Bu avantajlar, 2026'nın rekabetçi yapay zeka pazarında projenizin başarısı için kritik öneme sahiptir.
* **Modülerlik ve Esneklik:** LangChain'in modüler yapısı, farklı LLM'leri, prompt şablonlarını, veri yükleyicilerini ve araçları kolayca birleştirmenize olanak tanır. Bu sayede, projenizin ihtiyaçlarına göre özelleştirilmiş ve esnek mimariler oluşturabilirsiniz. Örneğin, bir projenizde OpenAI GPT-4'ü kullanırken, diğer bir projenizde aynı mimariyi Google Gemini ile hızlıca adapte edebilirsiniz.
* **Hızlı Prototipleme:** Hazır zincirler, ajanlar ve araçlar sayesinde, karmaşık LLM iş akışlarını çok daha kısa sürede prototiplemeniz mümkündür. Production ortamında yeni bir özellik denediğimizde, LangChain'in hızlı prototipleme yeteneği sayesinde fikirleri çok daha çabuk test edip yineleyebildik.
* **Geniş Ekosistem ve Topluluk Desteği:** LangChain, sürekli büyüyen bir geliştirici topluluğuna ve zengin bir entegrasyon ekosistemine sahiptir. Vektör veritabanları (Chroma, Pinecone, Weaviate), doküman yükleyiciler (PDF, CSV, web sayfaları) ve çeşitli API'lerle (SerperDev, Wolfram Alpha) entegrasyonlar, karmaşık çözümler geliştirme kapasitenizi artırır.
* **Soyutlama Katmanı:** Farklı LLM sağlayıcıları ve veri kaynakları arasındaki farklılıkları soyutlayarak, geliştiricilerin temel uygulama mantığına odaklanmasını sağlar. Bu sayede, altyapı detaylarıyla uğraşmak yerine, kullanıcı deneyimi ve iş değeri yaratmaya daha fazla zaman ayırabilirsiniz.
* **Gelişmiş Özellikler:** Bellek yönetimi, ajan tabanlı karar verme, RAG (Retrieval Augmented Generation) gibi ileri seviye özellikleri kolayca entegre etme imkanı sunar. Son projemizde, RAG mimarisi sayesinde, modelin güncel olmayan bilgilerle halüsinasyon yapma oranını %30 oranında azalttığımızı gördük.
LangChain, özellikle LLM'lerin yeteneklerini harici sistemlerle birleştirerek daha akıllı ve bağlama duyarlı uygulamalar geliştirmek isteyen tüm geliştiriciler için ideal bir seçimdir.
## LangChain vs Alternatifler: Mimari Kararlar İçin Kapsamlı Karşılaştırma
LLM tabanlı uygulama geliştirme ekosistemi hızla büyürken, LangChain'in yanı sıra başka değerli araçlar ve yaklaşımlar da bulunmaktadır. Doğru mimari kararı vermek için LangChain'i başlıca alternatifleriyle karşılaştırmak önemlidir. Aşağıdaki tablo, 2026 itibarıyla popüler alternatifleri öne çıkan özellikleriyle karşılaştırmaktadır.
| Özellik | LangChain | LlamaIndex | Özel Implementasyon (Vanilla Python/JS) |
| :------ | :-------- | :--------- | :--------------------------------------- |
| **Temel Odak** | LLM orchestrasyonu, geniş entegrasyon | Veri alımı, indeksleme, RAG | Maksimum esneklik, tam kontrol |
| **Öğrenme Eğrisi** | Orta | Orta-Düşük | Yüksek |
| **Ekosistem** | Çok geniş (LLM, DB, araçlar) | Veri odaklı (DB, dokümanlar) | Yok (sıfırdan inşa) |
| **Topluluk Desteği** | Çok aktif ve büyük | Aktif ve büyüyen | Kendi iç ekibiniz |
| **Kurumsal Destek** | LangChain Inc. ürünleri (LangSmith, LangServe) | LlamaIndex Inc. | Dahili kaynaklar |
| **Kullanım Alanı** | Chatbot, ajan, API geliştirme, karmaşık iş akışları | Soru-cevap, bilgi erişim, RAG | Çok niş, yüksek performanslı, özel gereksinimli projeler |
| **Performans Optimizasyonu** | Dahili mekanizmalar, LangSmith | İndeksleme stratejileri | Geliştirici sorumluluğunda |
**Değerlendirme:**
LangChain, özellikle karmaşık LLM tabanlı iş akışlarını, ajanları ve birden fazla harici sistem entegrasyonunu hedefleyen projeler için idealdir. Geniş ekosistemi ve modüler yapısı, hızlı prototipleme ve ölçeklenebilir mimariler oluşturma konusunda büyük avantaj sağlar. Öte yandan, LlamaIndex özellikle veri alımı, indeksleme ve RAG (Retrieval Augmented Generation) süreçlerine odaklanarak, büyük bilgi tabanlarından anlamlı cevaplar üretmek isteyen uygulamalar için güçlü bir alternatiftir. Eğer projenizin çok spesifik performans gereksinimleri varsa veya tam kontrol ve sıfırdan optimizasyon imkanı arıyorsanız, özel bir implementasyon tercih edilebilir; ancak bu, daha uzun geliştirme süresi ve yüksek bakım maliyeti anlamına gelecektir. Genellikle, çoğu kurumsal LLM uygulaması için LangChain'in sunduğu soyutlamalar ve araçlar, geliştirme verimliliği açısından en iyi dengeyi sunar.
## Kurulum ve İlk Adımlar: LangChain ile Hızlı Başlangıç
LangChain ile bir LLM uygulaması geliştirmeye başlamak oldukça basittir. Python tabanlı bir framework olduğu için, temel Python bilgisi ve `pip` paket yöneticisi yeterlidir. İşte 2026 itibarıyla güncel kurulum adımları ve ilk basit uygulamanız:
### Ön Gereksinimler
* Python 3.9 veya üzeri kurulu olmalıdır.
* Bir OpenAI API anahtarı (veya kullanmak istediğiniz başka bir LLM sağlayıcısının anahtarı).
### Adım 1: LangChain ve Gerekli Kütüphaneleri Kurun
Terminalinizi açın ve aşağıdaki komutu çalıştırın. Bu komut, LangChain'in en güncel kararlı sürümünü ve OpenAI LLM ile etkileşim kurmak için gerekli `openai` kütüphanesini kuracaktır.
```bash
pip install langchain==0.1.18 langchain-openai==0.1.6 # 2026 itibarıyla güncel sürüm numaraları
```
> **Pro Tip:** Sanal ortamlar (virtual environments) kullanmak, proje bağımlılıklarınızı izole etmek için her zaman iyi bir pratiktir. `python -m venv venv` ve `source venv/bin/activate` (Linux/macOS) veya `venv\Scripts\activate` (Windows) komutlarıyla bir sanal ortam oluşturup etkinleştirebilirsiniz.
### Adım 2: API Anahtarınızı Ortam Değişkeni Olarak Ayarlayın
Güvenlik ve taşınabilirlik için API anahtarlarınızı doğrudan kodunuzda saklamak yerine ortam değişkenleri olarak ayarlamak en iyi pratiktir. `os` kütüphanesi veya `python-dotenv` gibi araçları kullanabilirsiniz.
```bash
# Linux/macOS
export OPENAI_API_KEY="sizin_api_anahtarınız_buraya"
# Windows (CMD)
set OPENAI_API_KEY="sizin_api_anahtarınız_buraya"
# Windows (PowerShell)
$env:OPENAI_API_KEY="sizin_api_anahtarınız_buraya"
```
### Adım 3: İlk LLM Çağrınızı Yapın
Şimdi, LangChain'i kullanarak basit bir LLM çağrısı yapalım. `main.py` adında bir dosya oluşturun ve aşağıdaki kodu içine yapıştırın:
```python
# main.py
import os
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
# Ortam değişkeninden API anahtarını yükleyin
# Eğer ortam değişkeni ayarlanmadıysa, burada doğrudan anahtarınızı verebilirsiniz (ancak önerilmez)
# os.environ["OPENAI_API_KEY"] = "sizin_api_anahtarınız_buraya"
# LLM modelini başlatın
# temperature: Yaratıcılık derecesi (0.0 çok deterministik, 1.0 çok yaratıcı)
llm = ChatOpenAI(model="gpt-4o", temperature=0.7) # 2026 itibarıyla GPT-4o popüler bir model
# Prompt şablonu oluşturun
prompt = ChatPromptTemplate.from_messages([
("system", "Sen deneyimli bir yazılım mimarısın. Kullanıcıya net ve özlü cevaplar ver."),
("user", "{question}")
])
# Zinciri oluşturun: Prompt -> LLM
chain = prompt | llm
# Zinciri çalıştırın ve cevap alın
response = chain.invoke({"question": "LangChain'in temel bileşenleri nelerdir?"})
# Cevabı yazdırın
print(response.content)
```
Bu kodu çalıştırmak için terminalinizde `python main.py` komutunu kullanın. Çıktı olarak GPT-4o modelinden LangChain'in temel bileşenlerini açıklayan bir yanıt alacaksınız. Bu basit örnek, LangChain'in bir prompt şablonu ile bir LLM'i nasıl birleştirdiğini ve temel bir zincir (chain) oluşturduğunu göstermektedir. Bu, daha karmaşık mimarilerin temelini oluşturur.
## Temel Kullanım ve Örnekler: LangChain Bileşenleriyle Uygulama Geliştirme
LangChain, LLM uygulamaları oluşturmak için çeşitli modüler bileşenler sunar. Bu bölümde, bu temel bileşenleri ve gerçek dünya senaryolarında nasıl kullanıldıklarını pratik örneklerle inceleyeceğiz. Her örnek, problem tanımı, çözüm yaklaşımı ve çalışan kod bloğu formatında sunulmuştur.
### Örnek 1: Basit Bir LLM Zinciri (Chain)
**Problem:** Kullanıcıdan alınan bir konuyu belirli bir formatta özetleyen basit bir LLM uygulaması oluşturmak.
**Çözüm:** Bir `ChatPromptTemplate` ve bir `ChatOpenAI` modelini bir `RunnableSequence` (zincir) içinde birleştirerek, belirli bir girdiye göre çıktı üreten bir akış oluşturulur.
```python
# basic_llm_chain.py
import os
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
os.environ["OPENAI_API_KEY"] = "sizin_api_anahtarınız_buraya" # Gerçek uygulamada ortam değişkeni kullanın
llm = ChatOpenAI(model="gpt-4o", temperature=0.5)
prompt_template = ChatPromptTemplate.from_messages([
("system", "Sen bir içerik özetleyicisisin. Verilen metni 3 cümlede özetle."),
("user", "Lütfen şu konuyu özetle: {konu}")
])
# Prompt ve LLM'i bir zincirde birleştir
summarize_chain = prompt_template | llm
# Zinciri çalıştır
result = summarize_chain.invoke({"konu": "Yapay zekanın 2026'daki en büyük trendleri ve etkileri."}) # 2026 yılına özel konu
print("Özet:", result.content)
```
Bu örnek, LangChain'in en temel kullanımını gösterir: bir prompt ile bir LLM'i birleştirerek belirli bir görevi yerine getiren bir akış oluşturmak. Bu, tüm karmaşık LangChain uygulamalarının temel yapı taşıdır.
### Örnek 2: Ajanlar ve Araçlar (Agents & Tools)
**Problem:** Kullanıcının sorularına cevap verirken harici bir arama motorunu kullanabilen dinamik bir sistem oluşturmak.
**Çözüm:** LangChain Ajanları, LLM'in hangi aracı ne zaman kullanacağına karar vermesini sağlayan güçlü yapılardır. Bir arama aracı (örneğin, SerperDev API) tanımlanır ve bir `AgentExecutor` içinde LLM ile birlikte kullanılır.
```python
# agent_with_tool.py
import os
from langchain_openai import ChatOpenAI
from langchain.agents import AgentExecutor, create_react_agent
from langchain_core.prompts import ChatPromptTemplate
from langchain_community.tools import DuckDuckGoSearchRun # Basit bir arama aracı
from langchain_core.messages import HumanMessage, AIMessage
os.environ["OPENAI_API_KEY"] = "sizin_api_anahtarınız_buraya"
# Arama aracını tanımla
search_tool = DuckDuckGoSearchRun()
tools = [search_tool]
# LLM'i başlat
llm = ChatOpenAI(model="gpt-4o", temperature=0)
# Ajan için prompt şablonu
prompt = ChatPromptTemplate.from_messages([
("system", "Sen bir yardımcı yapay zeka ajanısın. Bilgiye ihtiyacın olduğunda arama aracını kullan."),
("human", "{input}")
])
# ReAct ajanı oluştur (LLM'in düşünme, aksiyon alma, gözlem yapma döngüsü)
agent = create_react_agent(llm, tools, prompt)
# Ajan yürütücüsünü oluştur
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True, handle_parsing_errors=True)
# Ajanı çalıştır
result = agent_executor.invoke({"input": "2026 Dünya Kupası nerede düzenlenecek?"})
print("Ajan Cevabı:", result["output"])
```
Bu ajan, kullanıcının sorusunu analiz eder, arama yapması gerektiğine karar verir, `DuckDuckGoSearchRun` aracını kullanarak ilgili bilgiyi bulur ve ardından bu bilgiyi kullanarak bir yanıt oluşturur. `verbose=True` parametresi, ajanın düşünme sürecini terminalde görmenizi sağlar.
### Örnek 3: Bellek Entegrasyonu (Memory)
**Problem:** Bir chatbot'un önceki konuşmaları hatırlamasını sağlamak.
**Çözüm:** LangChain'in bellek modülleri, konuşma geçmişini saklamak ve LLM'e bağlam olarak iletmek için kullanılır. `ConversationBufferMemory` en basit bellek türüdür.
```python
# memory_example.py
import os
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain.chains import ConversationChain
from langchain.memory import ConversationBufferMemory
os.environ["OPENAI_API_KEY"] = "sizin_api_anahtarınız_buraya"
llm = ChatOpenAI(model="gpt-4o", temperature=0.7)
# Bellek nesnesi oluştur
memory = ConversationBufferMemory(return_messages=True)
# Prompt şablonu (bellek placeholder'ı içerir)
prompt = ChatPromptTemplate.from_messages([
("system", "Sen dost canlısı bir sohbet robotusun. Önceki konuşmaları hatırla."),
MessagesPlaceholder(variable_name="history"), # Bellek burada yer alacak
("human", "{input}")
])
# Konuşma zincirini oluştur
conversation = ConversationChain(
llm=llm,
memory=memory,
prompt=prompt,
verbose=True
)
# İlk etkileşim
response1 = conversation.invoke({"input": "Merhaba, benim adım Burak."})
print("Bot:", response1["response"])
# İkinci etkileşim (önceki konuşmayı hatırlayacak)
response2 = conversation.invoke({"input": "Benimle ilgili ne öğrendin?"})
print("Bot:", response2["response"])
# Üçüncü etkileşim
response3 = conversation.invoke({"input": "Peki, 2026'da yapay zeka alanında hangi gelişmeler bekleniyor?"})
print("Bot:", response3["response"])
```
Bu örnek, chatbot'un ilk konuşmada isminizi öğrendiğini ve ikinci konuşmada bu bilgiyi hatırlayarak yanıt verdiğini gösterir. Bellek modülleri, daha uzun ve bağlama duyarlı etkileşimler için kritik öneme sahiptir.
### Örnek 4: Doküman Yükleme ve Bölme (Document Loading & Splitting)
**Problem:** Büyük bir metin dosyasını LLM'in işleyebileceği küçük parçalara ayırmak ve bunları LangChain'e yüklemek.
**Çözüm:** `TextLoader` gibi doküman yükleyiciler ve `RecursiveCharacterTextSplitter` gibi metin bölücüler kullanılır. Bu, RAG (Retrieval Augmented Generation) sistemlerinin temelini oluşturur.
```python
# document_processing.py
from langchain_community.document_loaders import TextLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
# Örnek bir metin dosyası oluşturalım
with open("sample_document.txt", "w", encoding="utf-8") as f:
f.write("LangChain, Büyük Dil Modelleri (LLM'ler) ile uygulama geliştirmeyi kolaylaştıran bir framework'tür. Modüler yapısı sayesinde prompt mühendisliği, bellek yönetimi ve harici araç entegrasyonu gibi süreçleri basitleştirir. 2026 yılı itibarıyla, LangChain'in popülaritesi artmaya devam etmekte ve geliştiriciler arasında yaygın olarak benimsenmektedir. Özellikle karmaşık soru-cevap sistemleri ve otomasyon ajanları için tercih edilmektedir. Framework'ün temel bileşenleri arasında LLM'ler, Prompts, Chains, Agents, Tools ve Memory bulunur. Her bileşen, belirli bir görevi yerine getirmek üzere tasarlanmıştır. Bu modülerlik, esnek ve ölçeklenebilir mimariler oluşturmanın anahtarıdır. Örneğin, LangChain ile bir RAG (Retrieval Augmented Generation) sistemi kurmak, harici bir bilgi tabanından veri çekerek LLM'in yanıtlarını zenginleştirmeyi mümkün kılar. Bu, halüsinasyonları azaltmaya ve daha doğru bilgiler sunmaya yardımcı olur. Ayrıca, LangChain'in LangServe ve LangSmith gibi ek araçları, üretim ortamı dağıtımı ve gözlemlenebilirlik için kritik destek sağlar.")
# Dokümanı yükle
loader = TextLoader("sample_document.txt", encoding="utf-8")
documents = loader.load()
# Metni parçalara ayır
text_splitter = RecursiveCharacterTextSplitter(
chunk_size=100, # Her parçanın maksimum boyutu
chunk_overlap=20, # Parçalar arasındaki çakışma miktarı
length_function=len,
add_start_index=True,
)
splitted_docs = text_splitter.split_documents(documents)
print(f"Orijinal doküman uzunluğu: {len(documents[0].page_content)} karakter")
print(f"Bölünmüş doküman sayısı: {len(splitted_docs)}")
for i, doc in enumerate(splitted_docs):
print(f"\nParça {i+1} (Başlangıç indeksi: {doc.metadata['start_index']}):")
print(doc.page_content)
```
Bu kod, uzun bir metni daha küçük, yönetilebilir parçalara ayırır. Bu parçalar daha sonra vektör veritabanlarına gömülebilir ve RAG sistemlerinde LLM'e bağlam olarak sunulabilir. `chunk_size` ve `chunk_overlap` parametreleri, metin bölme stratejisini belirlemede kritik rol oynar.
## İleri Seviye Teknikler: Üretim Ortamına Hazır LangChain Mimarları
LangChain'in temel bileşenlerini anladıktan sonra, daha karmaşık ve üretim ortamına hazır LLM uygulamaları geliştirmek için ileri seviye tekniklere geçebiliriz. Bu bölümde, özel araçlar, RAG mimarileri ve gözlemlenebilirlik gibi konulara odaklanacağız.
### 1. Özel Araçlar (Custom Tools) Oluşturma
LangChain, mevcut araçlarla yetersiz kaldığınızda kendi özel araçlarınızı tanımlamanıza olanak tanır. Bu araçlar, LLM'in harici API'lerle, veritabanlarıyla veya özel iş mantığıyla etkileşime girmesini sağlar. Örneğin, bir CRM sistemindeki müşteri bilgilerini sorgulayan bir araç oluşturabilirsiniz.
```python
# custom_tool_example.py
import os
from langchain_openai import ChatOpenAI
from langchain.agents import AgentExecutor, create_react_agent
from langchain_core.tools import Tool
from langchain_core.prompts import ChatPromptTemplate
os.environ["OPENAI_API_KEY"] = "sizin_api_anahtarınız_buraya"
def get_current_stock_price(symbol: str) -> str:
"""Hisse senedi sembolüne göre güncel fiyatı getirir."""
# Bu kısım gerçek bir API çağrısı yapmalıdır (örn: Yahoo Finance, Alpha Vantage)
if symbol == "AAPL":
return "AAPL hissesi şu anda 175.50 USD'den işlem görüyor. (Veriler 2026'ya aittir)"
elif symbol == "MSFT":
return "MSFT hissesi şu anda 300.25 USD'den işlem görüyor. (Veriler 2026'ya aittir)"
else:
return f"'{symbol}' için hisse senedi bilgisi bulunamadı."
# Özel aracımızı tanımla
stock_price_tool = Tool(
name="get_stock_price",
func=get_current_stock_price,
description="Hisse senedi sembolüne göre (örn: AAPL) güncel hisse senedi fiyatını almak için kullanışlıdır."
)
tools = [stock_price_tool]
llm = ChatOpenAI(model="gpt-4o", temperature=0)
prompt = ChatPromptTemplate.from_messages([
("system", "Sen bir finansal yardımcı ajanısın. Hisse senedi fiyatları hakkında soruları yanıtla."),
("human", "{input}")
])
agent = create_react_agent(llm, tools, prompt)
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True, handle_parsing_errors=True)
result = agent_executor.invoke({"input": "AAPL hisse senedinin şu anki fiyatı ne kadar?"})
print("\nAjan Cevabı:", result["output"])
result2 = agent_executor.invoke({"input": "GOOGL hissesi hakkında bilgi verebilir misin?"})
print("\nAjan Cevabı:", result2["output"])
```
Bu örnekte, LLM'in hisse senedi fiyatlarını sorgulamak için `get_current_stock_price` adlı özel bir fonksiyonu kullanmasını sağlayan bir araç tanımladık. Ajan, kullanıcının sorusuna göre bu aracı dinamik olarak çağırır.
### 2. RAG (Retrieval Augmented Generation) Mimarileri
RAG, LLM'lerin kendi eğitim verileri dışında, harici ve güncel bilgilerle yanıtlar üretmesini sağlayan kritik bir mimaridir. Özellikle bilgi tabanı uygulamaları, doküman sorgulama ve güncel olaylar hakkında soruları yanıtlama için vazgeçilmezdir. Ekibimizde RAG uygulamalarını devreye aldığımızda, özellikle LLM'lerin 'halüsinasyon' yapma oranında belirgin bir düşüş gözlemledik.
**Temel RAG Akışı:**
1. **Doküman Yükleme (Document Loading):** PDF'ler, web sayfaları, veritabanları gibi çeşitli kaynaklardan verileri yükleyin. (`TextLoader`, `WebBaseLoader`)
2. **Doküman Bölme (Document Splitting):** Yüklenen büyük dokümanları LLM'in bağlam penceresine sığacak şekilde küçük parçalara ayırın. (`RecursiveCharacterTextSplitter`)
3. **Gömme (Embedding):** Her metin parçasını sayısal bir vektör temsiline dönüştürün. (`OpenAIEmbeddings`, `HuggingFaceEmbeddings`)
4. **Vektör Veritabanı (Vector Store):** Bu gömme vektörlerini bir vektör veritabanında (Chroma, Pinecone, FAISS) saklayın. Bu, hızlı ve anlamsal arama yapılmasını sağlar.
5. **Geri Çağırma (Retrieval):** Kullanıcı bir soru sorduğunda, soruyu gömün ve vektör veritabanında en alakalı doküman parçalarını bulun.
6. **Üretim (Generation):** Bulunan doküman parçalarını ve kullanıcının sorusunu LLM'e bağlam olarak vererek bir yanıt üretin.
```python
# rag_pipeline.py
import os
from langchain_openai import ChatOpenAI, OpenAIEmbeddings
from langchain_community.document_loaders import TextLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_community.vectorstores import Chroma # Basit bir vektör veritabanı
from langchain.chains import create_retrieval_chain
from langchain.chains.combine_documents import create_stuff_documents_chain
from langchain_core.prompts import ChatPromptTemplate
os.environ["OPENAI_API_KEY"] = "sizin_api_anahtarınız_buraya"
# 1. Doküman Yükleme ve Bölme
with open("knowledge_base.txt", "w", encoding="utf-8") as f:
f.write("LangChain, LLM uygulamaları geliştirmek için bir framework'tür. 2026'da popülerdir. Temel bileşenleri arasında zincirler, ajanlar, bellek ve araçlar bulunur. RAG, harici verilerle LLM'leri zenginleştirir. LangServe, LangChain uygulamalarını API olarak yayınlamayı sağlar. LangSmith ise geliştirme ve gözlemlenebilirlik için kullanılır. Python ile geliştirilir ve geniş bir topluluğa sahiptir. Özellikle karmaşık chatbotlar, soru-cevap sistemleri ve otomasyon ajanları için idealdir.")
loader = TextLoader("knowledge_base.txt", encoding="utf-8")
documents = loader.load()
text_splitter = RecursiveCharacterTextSplitter(chunk_size=200, chunk_overlap=20)
splitted_docs = text_splitter.split_documents(documents)
# 2. Gömme ve Vektör Veritabanı Oluşturma
embeddings = OpenAIEmbeddings(model="text-embedding-3-small") # 2026'nın güncel embedding modeli
vectorstore = Chroma.from_documents(splitted_docs, embeddings)
# 3. Retriever Oluşturma
retriever = vectorstore.as_retriever()
# 4. LLM ve Prompt Tanımlama
llm = ChatOpenAI(model="gpt-4o", temperature=0.1)
prompt = ChatPromptTemplate.from_template(
"""Aşağıdaki bağlamı kullanarak soruyu yanıtla. Eğer cevabı bilmiyorsan, bilmediğini söyle.
Bağlam: {context}
Soru: {input}"""
)
# 5. Dokümanları birleştiren zinciri oluştur
document_chain = create_stuff_documents_chain(llm, prompt)
# 6. Retriever ve doküman zincirini birleştiren nihai zinciri oluştur
retrieval_chain = create_retrieval_chain(retriever, document_chain)
# Zinciri çalıştır
response = retrieval_chain.invoke({"input": "LangChain'in temel bileşenleri nelerdir ve ne işe yarar?"})
print("\nCevap (RAG ile):", response["answer"])
response2 = retrieval_chain.invoke({"input": "LangChain ne zaman kuruldu?"}) # Bilgi tabanında olmayan bir soru
print("\nCevap (RAG ile):", response2["answer"])
```
Bu RAG mimarisi, LangChain'in en güçlü kullanım durumlarından biridir. LLM'in harici bilgiye erişmesini sağlayarak, daha doğru, güncel ve bağlama uygun yanıtlar üretmesine olanak tanır.
### 3. LangServe ve LangSmith ile Üretim Ortamı Desteği
2026 itibarıyla, LangChain uygulamalarını üretim ortamına dağıtmak ve izlemek için **LangServe** ve **LangSmith** kritik araçlardır.
* **LangServe:** LangChain zincirlerinizi veya ajanlarınızı hızlıca bir REST API olarak yayınlamanızı sağlayan bir kütüphanedir. Bu sayede, LangChain uygulamanızı diğer mikroservislerinizle veya ön yüz uygulamalarınızla kolayca entegre edebilirsiniz. Hızlı dağıtım ve versiyonlama imkanı sunar.
* **LangSmith:** LangChain uygulamalarınızın geliştirme, test, hata ayıklama ve izleme süreçlerini kolaylaştıran bir platformdur. LLM çağrılarını, zincir adımlarını, ajan kararlarını ve bellek durumlarını görselleştirerek, uygulamanızın nasıl çalıştığını anlamanıza ve performans sorunlarını gidermenize yardımcı olur. Ekibimizde LangSmith'i kullanmaya başladığımızda, özellikle karmaşık ajanların hata ayıklama süresinde %40'a varan bir iyileşme gördük.
Bu araçlar, LangChain mimarinizi sadece işlevsel kılmakla kalmaz, aynı zamanda ölçeklenebilir, güvenilir ve sürdürülebilir bir üretim çözümü haline getirir.
## Best Practices & Anti-Patterns: LangChain Mimarisinde Doğru Yaklaşımlar
LangChain ile sağlam ve sürdürülebilir uygulamalar geliştirmek için belirli best practice'leri takip etmek ve yaygın anti-pattern'lardan kaçınmak önemlidir. İşte 2026'nın en güncel LangChain mimarisi için kritik ipuçları:
* ✅ **Modüler ve Katmanlı Mimari:** Uygulamanızı LLM soyutlamaları, zincir mantığı, araç tanımları ve veri entegrasyonu gibi ayrı katmanlara ayırın. Bu, kodun okunabilirliğini, test edilebilirliğini ve bakımını kolaylaştırır.
* ❌ **Tek Parçalı (Monolithic) Zincirler:** Tüm iş mantığını tek bir devasa zincirde toplamak, hata ayıklamayı zorlaştırır ve esnekliği azaltır. Küçük, odaklanmış zincirler oluşturun ve bunları birleştirin.
* ✅ **Prompt Mühendisliğine Önem Verin:** Prompt'larınızı net, spesifik ve hedef odaklı yazın. `Few-shot prompting` ve `chain-of-thought prompting` gibi teknikleri kullanarak LLM'in performansını artırın. Prompt'larınızı versiyonlayın ve test edin.
* ❌ **Hardcoded API Anahtarları:** API anahtarlarını doğrudan kodunuzda veya konfigürasyon dosyalarında saklamayın. Ortam değişkenleri, sır yönetimi servisleri (AWS Secrets Manager, Azure Key Vault) veya `.env` dosyaları kullanın.
* ✅ **RAG (Retrieval Augmented Generation) Kullanın:** LLM'in güncel ve doğru bilgiye erişmesi gerektiğinde RAG mimarilerini tercih edin. Bu, halüsinasyonları azaltır ve yanıtların doğruluğunu artırır. Özellikle 2026'da bilgiye erişim hızı kritik.
* ❌ **Bellek Yönetimini İhmal Etmek:** Sohbet tabanlı uygulamalarda bellek yönetimi kritik öneme sahiptir. Konuşma geçmişini etkin bir şekilde saklamak ve LLM'e bağlam olarak sunmak için uygun bellek türlerini (örneğin, `ConversationBufferMemory`, `ConversationSummaryMemory`) kullanın.
* ✅ **Hata Yakalama ve Yeniden Deneme Mekanizmaları:** LLM API çağrıları ağ sorunları veya API limitleri nedeniyle başarısız olabilir. `try-except` blokları ve üstel geri çekilme (exponential backoff) ile yeniden deneme mekanizmaları uygulayın.
* ❌ **Ajanlara Çok Fazla Sorumluluk Yüklemek:** Ajanlar güçlüdür, ancak her görevi bir ajana bırakmak karmaşıklığı artırır. Basit, doğrudan görevler için zincirleri tercih edin; ajanları yalnızca dinamik karar verme ve araç kullanımı gerektiğinde kullanın.
* ✅ **Gözlemlenebilirlik ve İzleme (LangSmith):** LangSmith gibi araçları kullanarak LLM uygulamanızın performansını, maliyetini ve davranışını izleyin. Bu, üretim ortamındaki sorunları hızlıca tespit etmenizi ve çözmenizi sağlar.
* ❌ **Girdi Doğrulamasını Atlamak:** Kullanıcıdan gelen girdileri her zaman doğrulayın ve temizleyin. Kötü niyetli prompt enjeksiyonlarına karşı koruma sağlamak için güvenlik önlemleri alın.
* ✅ **Asenkron Programlama:** Yüksek performanslı ve ölçeklenebilir uygulamalar için `asyncio` ile asenkron LLM çağrılarını ve zincirleri kullanın. Bu, aynı anda birden fazla isteği işlemenize olanak tanır.
* ❌ **Varsayılan Modelleri Her Yerde Kullanmak:** Farklı görevler için farklı LLM modelleri (veya model boyutları) daha uygun olabilir. Maliyet ve performans dengesi için doğru modeli seçin. Örneğin, özetleme için daha küçük, yaratıcı metin üretimi için daha büyük modeller tercih edilebilir.
Bu best practice'ler, 2026'nın zorlu LLM uygulama geliştirme ortamında başarılı olmanız için sağlam bir temel oluşturacaktır.
## Yaygın Hatalar ve Çözümleri: LangChain Troubleshooting Rehberi
LangChain ile uygulama geliştirirken karşılaşılabilecek bazı yaygın hatalar ve bunların çözümleri aşağıda listelenmiştir. Bu sorunlar, genellikle Stack Overflow ve LangChain topluluğunda sıkça sorulan sorular arasındadır.
### 1. Hata: `AuthenticationError: Incorrect API key provided`
* **Sebep:** OpenAI (veya başka bir LLM sağlayıcısı) API anahtarınız yanlış, eksik veya süresi dolmuş.
* **Çözüm:** API anahtarınızın doğru olduğundan ve ortam değişkeni olarak düzgün bir şekilde ayarlandığından emin olun. `os.getenv("OPENAI_API_KEY")` ile anahtarın doğru yüklendiğini kontrol edebilirsiniz. Anahtarınızı doğrudan koda yazmaktan kaçının ve `.env` dosyası veya ortam değişkeni kullanın. 2026 itibarıyla API anahtarlarının rotasyonu ve güvenliği daha da önem kazanmıştır.
### 2. Hata: `InvalidRequestError: This model's maximum context length is X tokens.`
* **Sebep:** LLM'e gönderdiğiniz prompt (girdi ve bellek dahil) modelin izin verilen maksimum token limitini aşıyor. Özellikle RAG uygulamalarında çok fazla doküman parçası gönderildiğinde veya uzun