
Harrison Chase, 2022’nin sonunda LangChain’i bir GitHub reposu olarak yayımladığında proje henüz birkaç dosyadan ibaretti. Birkaç ay içinde binlerce geliştirici katkı yapmıştı. Bu büyümenin tek açıklaması var: GPT-4 güçlüydü, ama onu gerçek bir uygulamaya bağlamak boşluklu ve yorucuydu. Hangi konuşmayı nerede saklıyorsunuz? PDF’i modele nasıl okutursunuz? Model bir API çağrısı yapması gerektiğinde ne oluyor?
LangChain bu soruların her birine somut bir yapıyla cevap verdi. Python ve TypeScript ekosisteminde LLM tabanlı uygulama geliştirmenin fiili başlangıç noktası oldu. Bu yazıda framework’ün nasıl çalıştığını, hangi parçalardan oluştuğunu ve gerçek projelerde nerede değer kattığını, nerede fazladan yük getirdiğini ele alıyoruz.
LangChain Nedir?
LangChain, büyük dil modellerini araçlara, veri kaynaklarına ve iş mantığına bağlayan açık kaynaklı bir Python ve TypeScript framework’üdür. Temel fikir şu: birden fazla bileşen zincire dizilir, her bileşen öncekinin çıktısını alır ve kendi çıktısını üretir. Bu zincirleme yaklaşımla “belgeyi yükle, parçalara böl, vektörleştir, benzer parçaları getir, LLM ile yanıt üret” gibi karmaşık bir pipeline’ı birkaç satır kodla ifade etmek mümkün oluyor.
- Kurucu: Harrison Chase
- Şirket: LangChain AI, San Francisco
- Lisans: MIT
- Desteklenen diller: Python, TypeScript/JavaScript
- Provider uyumluluğu: OpenAI, Anthropic, Google, Cohere, Ollama ve 50’den fazla LLM provider
Temel Kavramlar
LangChain’de beş ana kavram var; bunları anlamak framework’ün neden bu şekilde yapılandığını netleştirir.
Chain (Zincir)
Zincir, adım adım işlem dizisidir. En basit zincir şu üç bileşenden oluşur: prompt şablonu, LLM ve çıktı ayrıştırıcı. v0.1 sonrasında zincirleri tanımlamak için resmi API LangChain Expression Language (LCEL) oldu.
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
prompt = ChatPromptTemplate.from_template("Şu konuyu kısaca açıkla: {topic}")
llm = ChatOpenAI(model="gpt-4o")
parser = StrOutputParser()
chain = prompt | llm | parser
chain.invoke({"topic": "LangChain"})
LLM ve Chat Model Bağlantısı
LangChain, provider bağımlılığını soyutlar. OpenAI’dan Anthropic’e, Google Gemini’den Ollama’ya geçmek için yalnızca model nesnesini değiştirmeniz yeter; zincirin geri kalanı olduğu gibi çalışır.
# OpenAI
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(model="gpt-4o-mini")
# Anthropic
from langchain_anthropic import ChatAnthropic
llm = ChatAnthropic(model="claude-sonnet-4-6")
# Yerel Ollama
from langchain_ollama import ChatOllama
llm = ChatOllama(model="llama3.2")
Prompt Templates
Şablonlar, değişken yerleşimi, sistem mesajı yönetimi ve few-shot örneklerini tek bir yapıda toplar. ChatPromptTemplate çok turlu konuşma şablonlarını, FewShotChatMessagePromptTemplate ise örnek destekli şablonları yönetir.
Prompt mühendisliğinin temel kavramları ve şablon tasarım prensipleri hakkında kapsamlı bir yazı mevcut; LangChain şablonları bu prensiplerin doğrudan uygulaması.
Memory (Hafıza)
Hafıza, konuşma geçmişini saklamanın ve modele iletmenin yolunu tanımlar. LangChain v0.1’de ConversationBufferMemory, ConversationSummaryMemory gibi sınıflar vardı. v0.2 sonrasında bu işlevlerin büyük bölümü LangGraph’a taşındı; uzun konuşmaları yönetecek durum makineleri artık orada modelleniyor.
Retrievers ve RAG Zinciri
LangChain’in en çok kullanılan özelliği bu. RAG (Retrieval-Augmented Generation), dış belgelerden bilgi çekerek modelin yanıtını güçlendiren mimaridir. LangChain bu mimarinin her adımını kapsayan bileşenler sunar:
- Document Loaders: PDF, web sayfası, Notion, S3, GitHub ve 100’den fazla kaynak için hazır yükleyici
- Text Splitters: Belgeyi örtüşen parçalara böler;
RecursiveCharacterTextSplitteren yaygın kullanılan - Embedding Modelleri: Parçaları sayısal vektörlere dönüştürür. Embedding’in ne olduğu ve nasıl çalıştığı hakkında ayrıntılı makale mevcut
- Vector Stores: Embedding’leri saklar; Chroma, FAISS, Pinecone, pgvector desteklenir. Vektör veritabanı seçimi için karşılaştırma yazımıza bakabilirsiniz
- Retriever: Sorguya en benzer parçaları döndürür
from langchain_community.document_loaders import PyPDFLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_openai import OpenAIEmbeddings, ChatOpenAI
from langchain_chroma import Chroma
from langchain.chains import RetrievalQA
loader = PyPDFLoader("rapor.pdf")
docs = loader.load()
splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200)
chunks = splitter.split_documents(docs)
vectorstore = Chroma.from_documents(chunks, OpenAIEmbeddings())
retriever = vectorstore.as_retriever(search_kwargs={"k": 4})
qa_chain = RetrievalQA.from_chain_type(
llm=ChatOpenAI(model="gpt-4o"),
retriever=retriever
)
Tools ve Agents
LangChain, modelin dış dünyayla etkileşim kurmasını araçlar üzerinden modeller. Bir araç basit bir Python fonksiyonudur; @tool dekoratörüyle tanımlanır. Model, function calling mekanizması üzerinden hangi aracı ne zaman çağıracağına karar verir.
from langchain_core.tools import tool
@tool
def get_weather(city: str) -> str:
"""Bir şehrin mevcut hava durumunu getirir."""
return f"{city}: 22°C, güneşli" # Gerçekte bir API çağrısı olur
create_react_agent ile bu araçları kullanan bir ReAct ajanı oluşturmak birkaç satır kodla mümkün.
LCEL: LangChain Expression Language
LCEL, v0.1 sonrasında LangChain’in resmi zincir tanımlama API’si oldu. | operatörü bileşenleri birbirine bağlar; bu Python’un __or__ metodunun bir uyarlaması.
LCEL’in en çok işe yarayan üç davranışı şunlar: chain.stream(input) ile yanıt token token akar ve kullanıcı arayüzüne gerçek zamanlı çıktı göndermek için bunu kullanırsınız. await chain.ainvoke(input) ile event loop’u bloklamadan async çalışır; yüksek trafikli servislerde fark yaratır. chain.batch([input1, input2, ...]) ile aynı zinciri birden fazla girdi için paralel çalıştırabilirsiniz.
# Streaming örneği
for chunk in chain.stream({"topic": "LangChain"}):
print(chunk, end="", flush=True)
LangSmith: Gözlemlenebilirlik Katmanı
Üretimde çalışan bir LLM uygulaması hata yaptığında nereye bakacaksınız? LangSmith bu sorunun pratik cevabı.
LangSmith, LangChain AI’ın LLM uygulamalarını trace etmek, debug etmek ve değerlendirmek için geliştirdiği bir platform. LANGCHAIN_TRACING_V2=true ortam değişkenini ayarlayıp API anahtarını eklemek yeterli; geri kalanı otomatik çalışır.
Kurulumdan sonra her zincir çağrısının giriş ve çıkışını, geçen süreyi ve maliyeti görebilirsiniz. Retriever’ın hangi parçaları seçtiğini adım adım izleyebilir, A/B prompt testi yapabilir, regresyon test setleri oluşturabilirsiniz. Halüsinasyon oranını metrik olarak takip etmek de mümkün.
Üretim ortamına geçmeden önce LangSmith entegrasyonu kurmak, sonradan saatlerce log karıştırmaktan çok daha az yorucu.
LangGraph: Çok-Adımlı Agent Orkestrasyonu
LangGraph, LangChain ekosisteminin ajan orkestrasyonu framework’üdür. Klasik LangChain zincirleri doğrusal akışlarda yeterli; ama gerçek dünya uygulamaları çoğunlukla döngü gerektirir. “Arama yap, yeterli bilgi buldun mu? Hayır ise tekrar ara” gibi mantıkları ifade etmek için yönlü grafikler gerekir.
LangGraph’ta her adım bir Python fonksiyonu olan düğümlere (node), düğümler arası koşullu geçiş mantığına ve tüm grafik boyunca taşınan paylaşımlı bir durum (state) nesnesine sahipsiniz.
2025-2026 döneminde LangChain’in en aktif geliştirilen bileşeni LangGraph oldu. Multi-agent sistemler, insan denetimli döngüler (human-in-the-loop) ve uzun vadeli hafıza yönetimi LangGraph üzerinde inşa ediliyor. Agent framework karşılaştırma yazısında LangGraph, CrewAI ve AutoGen arasındaki farkları ayrıntılı ele aldık.
from langgraph.graph import StateGraph, END
from typing import TypedDict
class AgentState(TypedDict):
query: str
search_result: str
answer: str
def search_node(state: AgentState) -> AgentState:
# Arama yap, state'i güncelle
state["search_result"] = "..."
return state
def answer_node(state: AgentState) -> AgentState:
# Yanıt üret
state["answer"] = "..."
return state
graph = StateGraph(AgentState)
graph.add_node("search", search_node)
graph.add_node("answer", answer_node)
graph.add_edge("search", "answer")
graph.add_edge("answer", END)
graph.set_entry_point("search")
app = graph.compile()
LangChain ve LlamaIndex Karşılaştırması
Bu iki kütüphane sıklıkla aynı bağlamda anılır, ama farklı sorunlara odaklanırlar:
| Özellik | LangChain | LlamaIndex |
|---|---|---|
| Birincil odak | Geniş ekosistem, chain + agent | RAG-first, data connector |
| Öğrenme eğrisi | Yüksek abstraksiyon | Daha düz |
| Agent desteği | LangGraph ile kapsamlı | LlamaIndex Workflows |
| Data connector zenginliği | 100+ loader | Veri bağlantısına özel |
Pratikte ikisi birbirinin yerine geçmez; seçim kullanım senaryosuna bağlı. Yalnızca RAG ve veri kaynağı bağlantısı yeterliyse LlamaIndex daha az kurulum gerektirir. Agent ve zincir ağırlıklı projeler için LangChain daha kapsamlı altyapı sunar. İkisinin bir arada kullanıldığı projeler de yaygın.
Gerçek Dünya Kullanım Alanları
Şirket içi belge chatbotu: PDF, Word ve web sayfaları Chroma’ya yüklenir. Çalışanlar soru sorar, sistem ilgili parçaları getirir, GPT-4o yanıt üretir. Temel RAG pipeline’ı LangChain ile birkaç saatte kurulur.
Müşteri destek ajanı: Model, CRM API, e-posta gönderici ve ürün kataloğu araçlarına erişir. Kullanıcının sorusuna göre doğru aracı çağırır. LangGraph döngüsü yetersiz bilgi durumunda ek arama yapar.
Kod üretimi ve test döngüsü: LLM kod yazar, araç bu kodu çalıştırır, hata varsa model tekrar yazar. Bu “üret, test et, düzelt” döngüsü LangGraph’ın döngü desteğiyle doğal biçimde modellenir.
Çok dilli içerik pipeline’ı: Kaynak belgeler okunur, özetlenir, hedef dile çevrilir, format dönüşümü yapılır. Her adım ayrı bir zincir düğümüdür ve farklı modeller her adımda devreye girebilir.
Ne Zaman LangChain Kullanmamalı?
Tek turlu, basit soru-cevap: Kullanıcı soru gönderir, model yanıtlar. Araya başka bir adım girmiyorsa doğrudan API çağrısı daha az karmaşıklık getirir.
Çok küçük projeler: LangChain abstraksiyon katmanları ekler. Bu katmanlar büyük projede işi kolaylaştırır; küçük bir scriptte yalnızca bağımlılık yükü olarak kalır.
Kontrol ve öngörülebilirlik kritikse: Framework birçok davranışı gizler. Her adımın tam olarak ne yaptığını izlemek istiyorsanız alt seviyeli openai veya anthropic kütüphaneleri daha şeffaf.
Gecikme hassas servisler: Her abstraksiyon katmanı gecikme ekler. Latency kritik bir serviste framework maliyetini ölçmek gerekir; bazı durumlarda fark ihmal edilebilir, bazılarında belirgin.
Kurulum ve Hızlı Başlangıç
pip install langchain langchain-openai langchain-community langchain-chroma
Temel ortam değişkenleri:
export OPENAI_API_KEY="sk-..."
export LANGCHAIN_API_KEY="ls__..." # LangSmith tracing için
export LANGCHAIN_TRACING_V2="true"
Beş adımda çalışan bir RAG uygulaması:
from langchain_community.document_loaders import WebBaseLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_openai import OpenAIEmbeddings, ChatOpenAI
from langchain_chroma import Chroma
from langchain.chains import RetrievalQA
# 1. Belge yükle
loader = WebBaseLoader("https://example.com/dokuman")
docs = loader.load()
# 2. Parçala
splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)
chunks = splitter.split_documents(docs)
# 3. Vektörleştir ve depola
vectorstore = Chroma.from_documents(chunks, OpenAIEmbeddings())
# 4. Retriever oluştur
retriever = vectorstore.as_retriever(search_kwargs={"k": 4})
# 5. Soru-cevap zinciri kur ve kullan
qa = RetrievalQA.from_chain_type(
llm=ChatOpenAI(model="gpt-4o-mini"),
retriever=retriever
)
sonuc = qa.invoke({"query": "Bu belgede ne anlatılıyor?"})
print(sonuc["result"])
Bu beş adım, bir belgeye soru soran çalışan bir uygulama. Gerçek projelerde buna hata yönetimi, kaynak gösterme, LangSmith izleme ve kullanıcı arayüzü eklenir.
LangChain 2026’da Nerede?
Framework, v0.3 serisiyle daha modüler bir yapıya geçti. langchain-core temel soyutlamaları içerir; langchain-openai, langchain-anthropic gibi provider paketleri ayrı kurulur. Bu modülerlik, uygulamanın bağımlılık ağırlığını kontrol altında tutmayı kolaylaştırıyor.
LangGraph ise 2025-2026’da aktif geliştirmenin odak noktası. Multi-agent sistemler, insan denetimli döngüler ve uzun vadeli hafıza yönetimi LangGraph üzerinde inşa ediliyor. Topluluk bileşenlerini barındıran langchain-community paketi büyük kalır, ama bakımı topluluk tarafından yapılan bileşenler üretim kodunda dikkat ister.
LangChain’in gerçek değeri başlangıç hızında. İlk prototipi kısa sürede çalışır hâle getirirsiniz; hangi modelin nerede çalıştığını, veriyi nasıl işlediğinizi ve zincirin her adımını LangSmith üzerinden takip edebilirsiniz. İlerleyen aşamada bazı soyutlama katmanlarının sınırlarına çarpabilirsiniz. Ama bu nokta çoğu proje için aylarca ötede. Eğer “LLM’i nasıl entegre etsem” sorusunu sormakta harcadığınız süreyi kısaltmak istiyorsanız, LangChain mantıklı bir ilk adım.



