LangChain Mimarisi ve Temel Soyutlamalar
LLM'ler, ChatModels, PromptTemplates, OutputParsers ve Runnable'lar dâhil olmak üzere LangChain'in bileşen modelini ve bunların işlem hatlarında nasıl birleştirildiğini anlayın.
LangChain Mimarisi ve Temel Soyutlamalar, CoddyKit'te ücretsiz bir AI Engineering Academy dersidir. Bu, 4 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, AI Engineering Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. AI Engineering Academy kursu toplamda 4 dersten oluşur.
LangChain Aslında Nedir
LangChain, dil modelleriyle güçlendirilen uygulamalar oluşturmak için kullanılan bir çatıdır. Ham API çağrılarını ve birleştirici kodu kendiniz yazmak yerine LangChain, işlem hatlarına birleştirilebilen yeniden kullanılabilir bileşenler sağlar. Birleşik bir arayüz aracılığıyla birden çok LLM sağlayıcısını (OpenAI, Anthropic, Cohere, yerel modeller) destekler; bu nedenle sağlayıcı değiştirmek çok az kod değişikliği gerektirir.
Bileşen Modeline Genel Bakış
LangChain, yapı taşlarını farklı bileşen kategorileri altında düzenler. LLMs ve ChatModels, model sağlayıcılarını sarar. PromptTemplates, dinamik istem oluşturmayı yönetir. OutputParsers, ham model metnini yapılandırılmış Python nesnelerine dönüştürür. Runnables, her şeyi birleştirilebilir işlem hatlarında birbirine bağlayan evrensel arayüzdür.
LLM'ler ve ChatModels Arasındaki Fark
LangChain iki model arayüzünü birbirinden ayırır. LLM dize biçiminde bir istem alır ve dize biçiminde bir tamamlama döndürür; bu, daha eski metin tamamlama yaklaşımıdır. ChatModel bir ileti listesi (system, human, AI) alır ve bir ileti nesnesi döndürür. Modern OpenAI, Anthropic ve Gemini modellerinin tümü ChatModels'tır. Yeni uygulamalarda ChatModel kullanmayı tercih etmelisiniz.
from langchain_openai import ChatOpenAI
from langchain_core.messages import HumanMessage, SystemMessage
llm = ChatOpenAI(model='gpt-4o-mini')
response = llm.invoke([
SystemMessage(content='You are a helpful assistant.'),
HumanMessage(content='What is LangChain?')
])
print(response.content)PromptTemplates: Dinamik İstemler
PromptTemplate, çalışma zamanında yer tutucu değişkenlerle doldurulan bir istem tanımlamanızı sağlar. ChatPromptTemplate ise birden çok ileti içeren sohbet tarzı istemler için aynı işi yapar. Şablonlar, istemin yapısını çalışma zamanı değerlerinden ayırır; böylece istemler yeniden kullanılabilir, sınanabilir ve sürüm denetimi kolay olur.
from langchain_core.prompts import ChatPromptTemplate
template = ChatPromptTemplate.from_messages([
('system', 'You are an expert in {domain}.'),
('human', 'Explain {concept} in simple terms.')
])
# Fill in variables at runtime
messages = template.invoke({'domain': 'machine learning', 'concept': 'embeddings'})
print(messages)OutputParsers: Model Çıktısını Biçimlendirme
OutputParsers, bir modelden gelen ham dize çıktısını yapılandırılmış Python türlerine dönüştürür. StrOutputParser yalnızca içerik dizesini ayıklar. JsonOutputParser JSON ayrıştırması yapar. PydanticOutputParser ise Pydantic şemasına göre doğrulama gerçekleştirir. Ayrıştırıcılar ayrıca, modeli beklenen biçime yönlendirmek üzere istemlere ekleyebileceğiniz biçim talimatları üretir.
from langchain_core.output_parsers import StrOutputParser, JsonOutputParser
from pydantic import BaseModel
class MovieReview(BaseModel):
title: str
rating: int
summary: str
parser = JsonOutputParser(pydantic_object=MovieReview)
# parser.get_format_instructions() returns JSON schema instructions
print(parser.get_format_instructions()[:200])Runnable Arayüzü
Her LangChain bileşeni, üç temel yöntemi tanımlayan Runnable arayüzünü uygular: eşzamanlı tekil çağrılar için invoke(), belirteçleri tek tek aktarmak için stream() ve birden çok girdiyi paralel işlemek için batch(). Her bileşen bir Runnable olduğu için tümü, boru işleci kullanılarak aynı biçimde birleştirilebilir.
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(model='gpt-4o-mini')
# Single call
result = llm.invoke('What is 2+2?')
# Streaming tokens
for chunk in llm.stream('Tell me a joke.'):
print(chunk.content, end='', flush=True)
# Batch processing
results = llm.batch(['What is Paris?', 'What is Rome?'])Boru İşleciyle Birleştirme
boru işleci (|), RunnableSequence nesneleri oluşturmanın sözdizimsel kısayoludur. prompt | llm | parser yazdığınızda LangChain, her adımın çıktısının bir sonraki adımın girdisine aktığı bir zincir oluşturur. Bu, LCEL'in (LangChain Expression Language) temelini oluşturur ve eski, ayrıntılı zincir sınıflarının yerini alır.
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
prompt = ChatPromptTemplate.from_template('Summarize this in one sentence: {text}')
llm = ChatOpenAI(model='gpt-4o-mini')
parser = StrOutputParser()
# Chain composed with pipe operator
chain = prompt | llm | parser
result = chain.invoke({'text': 'LangChain is a framework for LLM applications...'})
print(result)Belge Yükleyicileri ve Metin Bölücüler
RAG uygulamaları için LangChain, çeşitli biçimlerdeki dosyaları (PDF, Word, HTML, CSV) okuyup page_content ve metadata alanlarına sahip Document nesnelerinden oluşan bir liste döndüren Document Loaders sağlar. Ardından Text Splitters, uzun belgeleri gömme ve alma işlemlerine uygun daha küçük parçalara böler.
from langchain_community.document_loaders import PyPDFLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
loader = PyPDFLoader('report.pdf')
docs = loader.load() # List of Document objects
splitter = RecursiveCharacterTextSplitter(
chunk_size=500,
chunk_overlap=50
)
chunks = splitter.split_documents(docs)
print(f'Split {len(docs)} pages into {len(chunks)} chunks')Çalıştırılabilirler Olarak Vektör Depoları
LangChain, vektör veritabanlarını (Chroma, Pinecone, pgvector) similarity_search() yöntemini sunan VectorStore nesneleri olarak kapsüller. Herhangi bir VectorStore'u .as_retriever() ile bir Retriever Runnable'ına dönüştürebilir ve böylece LCEL zincirlerinde birleştirilebilir hâle getirebilirsiniz. Retriever bir sorgu dizesi alır ve en alakalı ilk k belgeyi döndürür.
from langchain_openai import OpenAIEmbeddings
from langchain_community.vectorstores import Chroma
embeddings = OpenAIEmbeddings()
vectorstore = Chroma.from_documents(chunks, embeddings)
# Convert to Retriever Runnable
retriever = vectorstore.as_retriever(
search_type='similarity',
search_kwargs={'k': 5}
)
results = retriever.invoke('How does LangChain work?')
for doc in results:
print(doc.page_content[:100])Geri Çağrılar ve Gözlemlenebilirlik
LangChain'in callback system'i, bir zincirin yürütülmesindeki her olaya bağlanmanızı sağlar: bir LLM başladığında, belirteçler aktarıldığında, bir zincir tamamlandığında veya bir araç çağrıldığında. Yerleşik geri çağrılar arasında konsola günlük kaydı yapmak için StdOutCallbackHandler bulunur. LangSmith gibi üçüncü taraf tümleştirmeleri ortam değişkenleri aracılığıyla otomatik olarak bağlanır ve kod değişikliği gerektirmeden yürütmenin tamamına ilişkin izleri kaydeder.
from langchain.callbacks import StdOutCallbackHandler
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(
model='gpt-4o-mini',
callbacks=[StdOutCallbackHandler()]
)
# Now every call logs input/output automatically
# Or enable LangSmith tracing globally:
import os
os.environ['LANGCHAIN_TRACING_V2'] = 'true'
os.environ['LANGCHAIN_API_KEY'] = 'your-key'Zincirlerde Bellek ve Durum
Varsayılan olarak LangChain zincirleri durumsuzdur; her çağrı birbirinden bağımsızdır. Sohbet belleği eklemek için bir zinciri, sohbet geçmişini depolayıp ekleyen bir bellek bileşeniyle sarmalarsınız. RunnableWithMessageHistory, bellek eklemenin LCEL'e özgü yoludur; geçmişi oturum kimliğine göre yükleyen bir get_session_history işlevi alır.
from langchain_core.runnables.history import RunnableWithMessageHistory
from langchain_community.chat_message_histories import ChatMessageHistory
store = {} # session_id -> ChatMessageHistory
def get_session_history(session_id: str):
if session_id not in store:
store[session_id] = ChatMessageHistory()
return store[session_id]
with_history = RunnableWithMessageHistory(chain, get_session_history)
response = with_history.invoke(
{'input': 'Hi, my name is Alice'},
config={'configurable': {'session_id': 'user-1'}}
)Kısa Kontrol
LangChain Mimarisi ve Temel Soyutlamalar konusunu ne kadar anladığınızı sınayın.
Ders Özeti
Bu derste şunları öğrendiniz: LangChain'in bileşen modeli, LLM'leri, PromptTemplates'leri, OutputParsers'ı ve Retriever'ları ortak bir arayüze sahip Runnable'lar olarak düzenler; boru işleci (|), Runnable'ları LCEL aracılığıyla sıralı zincirlerde birleştirir; geri çağrılar ise iş mantığını değiştirmeden her adımda gözlemlenebilirlik sağlar. Sırada, LCEL ile zincir oluşturmayı ayrıntılı olarak inceleyeceğiz.
Sıkça Sorulan Sorular
“LangChain Mimarisi ve Temel Soyutlamalar” dersi ücretsiz mi?
Evet — “LangChain Mimarisi ve Temel Soyutlamalar” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve AI Engineering Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. AI Engineering Academy kursu toplamda 4 dersten oluşur.
“LangChain Mimarisi ve Temel Soyutlamalar” dersinde ne öğreneceğim?
LLM'ler, ChatModels, PromptTemplates, OutputParsers ve Runnable'lar dâhil olmak üzere LangChain'in bileşen modelini ve bunların işlem hatlarında nasıl birleştirildiğini anlayın. AI Engineering Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
AI Engineering Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te AI Engineering Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 1. dersidir.
“LangChain Mimarisi ve Temel Soyutlamalar” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu AI Engineering Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her AI Engineering Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- LangChain Mimarisi ve Temel Soyutlamalar
- LCEL ile Zincirler Oluşturma
- Dallanma ve Paralel Zincirler
- LangChain'de Akışlı Çıktı