LangChain für Data Scientists 2026: LLMs, Agents und Interview-Fragen
LangChain 0.3 für Data Science beherrschen: LCEL-Chains, RAG-Muster, ReAct-Agents und Memory-Systeme. Inklusive Interview-Fragen und Produktions-Deployment-Strategien.

LangChain 0.3 hat sich als De-facto-Framework für die Entwicklung LLM-gestützter Anwendungen in produktiven Data-Science-Workflows etabliert. Dieses Tutorial behandelt die zentralen Abstraktionen, Agent-Architekturen und Retrieval-Muster, mit denen Data Scientists sowohl in realen Projekten als auch in technischen Interviews konfrontiert werden.
LangChain Expression Language (LCEL) ermöglicht deklarative Chain-Komposition mit Streaming, Parallelisierung und Fallbacks. Die LCEL-Syntax sollte vor dem Einstieg in Agents beherrscht werden – die meisten Interview-Fragen setzen Vertrautheit mit Pipe-Operatoren und Runnables voraus.
Verständnis der LangChain-Kernkomponenten
LangChain organisiert die LLM-Orchestrierung in vier primäre Abstraktionen: Models, Prompts, Chains und Agents. Jede Abstraktion baut auf der vorherigen auf und schafft ein komponierbares System für komplexe KI-Workflows.
Die Model-Schicht umhüllt verschiedene LLM-Anbieter (OpenAI, Anthropic, lokale Modelle) hinter einer einheitlichen Schnittstelle. Diese Abstraktion ermöglicht den Wechsel zwischen Anbietern ohne Änderung der Anwendungslogik – entscheidend für Kostenoptimierung und Anbieterflexibilität.
# langchain_setup.py
from langchain_openai import ChatOpenAI
from langchain_anthropic import ChatAnthropic
from langchain_core.messages import HumanMessage, SystemMessage
# Initialize with specific model and temperature
openai_model = ChatOpenAI(
model="gpt-4o",
temperature=0.1, # Lower temperature for deterministic outputs
max_tokens=2048
)
# Anthropic model with same interface
anthropic_model = ChatAnthropic(
model="claude-sonnet-4-20250514",
temperature=0.1
)
# Both models accept identical message format
messages = [
SystemMessage(content="You are a data science expert."),
HumanMessage(content="Explain gradient boosting in one sentence.")
]
# Swap models without changing message structure
response = openai_model.invoke(messages)Die einheitliche Schnittstelle bedeutet, dass Datenpipelines basierend auf Kosten-, Latenz- oder Leistungsanforderungen zwischen Anbietern wechseln können.
Chains mit LCEL-Pipe-Syntax erstellen
LangChain Expression Language ersetzt die veraltete LLMChain-Klasse durch eine flexiblere Pipe-basierte Syntax. LCEL-Chains sind Runnables, die standardmäßig Streaming, Batching und asynchrone Ausführung unterstützen.
# lcel_chain.py
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser, JsonOutputParser
from pydantic import BaseModel, Field
# Define structured output schema
class DataInsight(BaseModel):
metric: str = Field(description="The metric being analyzed")
trend: str = Field(description="Upward, downward, or stable")
confidence: float = Field(description="Confidence score 0-1")
# Create prompt template with variables
prompt = ChatPromptTemplate.from_messages([
("system", "Analyze the following data and extract insights."),
("human", "Dataset: {dataset_description}\nFocus on: {metric}")
])
# LCEL chain with pipe operator
model = ChatOpenAI(model="gpt-4o", temperature=0)
parser = JsonOutputParser(pydantic_object=DataInsight)
chain = prompt | model | parser # Pipe syntax composes runnables
# Invoke with input dictionary
result = chain.invoke({
"dataset_description": "Monthly sales data showing 15% increase",
"metric": "revenue growth"
})
# Returns: DataInsight(metric='revenue growth', trend='upward', confidence=0.85)LCEL-Chains handhaben automatisch die Typkonvertierung zwischen Komponenten. Das Prompt-Template gibt einen PromptValue aus, den das Modell in eine Antwort umwandelt, die der Parser in das Pydantic-Schema strukturiert.
Retrieval-Augmented Generation für Datenanwendungen
RAG-Muster verbessern LLM-Antworten mit domänenspezifischem Kontext, der aus Vektordatenbanken abgerufen wird. Für Data-Science-Anwendungen ermöglicht RAG die Abfrage von Dokumentation, früheren Analysen oder Domänenwissensbasen.
# rag_pipeline.py
from langchain_openai import OpenAIEmbeddings, ChatOpenAI
from langchain_chroma import Chroma
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.runnables import RunnablePassthrough
# Initialize embeddings and vector store
embeddings = OpenAIEmbeddings(model="text-embedding-3-small")
vectorstore = Chroma(
collection_name="data_docs",
embedding_function=embeddings,
persist_directory="./chroma_db"
)
# Create retriever with relevance threshold
retriever = vectorstore.as_retriever(
search_type="similarity_score_threshold",
search_kwargs={"score_threshold": 0.7, "k": 4}
)
# RAG prompt with context injection
rag_prompt = ChatPromptTemplate.from_messages([
("system", """Answer based on the provided context only.
Context: {context}
If the context doesn't contain relevant information, say so."""),
("human", "{question}")
])
# Format documents into context string
def format_docs(docs):
return "\n\n".join(doc.page_content for doc in docs)
# RAG chain with parallel retrieval
rag_chain = (
{"context": retriever | format_docs, "question": RunnablePassthrough()}
| rag_prompt
| ChatOpenAI(model="gpt-4o", temperature=0)
)
# Query with automatic retrieval
answer = rag_chain.invoke("What normalization method works best for skewed distributions?")Der RunnablePassthrough bewahrt die ursprüngliche Frage, während der Retriever parallel den Kontext abruft. Dieses Muster skaliert auf Produktions-Workloads mit minimalem Latenz-Overhead.
Bereit für deine Data Science & ML-Interviews?
Übe mit unseren interaktiven Simulatoren, Flashcards und technischen Tests.
ReAct-Agents für Datenaufgaben implementieren
Agents erweitern Chains um Tool-Calling-Fähigkeiten und Reasoning-Schleifen. Das ReAct-Muster (Reasoning + Acting) verschachtelt Denk- und Handlungsschritte, wodurch Agents mehrstufige Probleme lösen können.
# react_agent.py
from langchain_openai import ChatOpenAI
from langchain_core.tools import tool
from langgraph.prebuilt import create_react_agent
import pandas as pd
import numpy as np
# Define data analysis tools
@tool
def calculate_statistics(data: str, column: str) -> str:
"""Calculate descriptive statistics for a column in CSV data."""
df = pd.read_csv(pd.io.common.StringIO(data))
stats = df[column].describe()
return stats.to_string()
@tool
def detect_outliers(data: str, column: str, method: str = "iqr") -> str:
"""Detect outliers using IQR or Z-score method."""
df = pd.read_csv(pd.io.common.StringIO(data))
values = df[column]
if method == "iqr":
q1, q3 = values.quantile([0.25, 0.75])
iqr = q3 - q1
outliers = values[(values < q1 - 1.5 * iqr) | (values > q3 + 1.5 * iqr)]
else: # z-score
z_scores = np.abs((values - values.mean()) / values.std())
outliers = values[z_scores > 3]
return f"Found {len(outliers)} outliers: {outliers.tolist()[:10]}"
@tool
def correlation_analysis(data: str, col1: str, col2: str) -> str:
"""Calculate Pearson correlation between two columns."""
df = pd.read_csv(pd.io.common.StringIO(data))
corr = df[col1].corr(df[col2])
return f"Correlation between {col1} and {col2}: {corr:.4f}"
# Create ReAct agent with tools
model = ChatOpenAI(model="gpt-4o", temperature=0)
tools = [calculate_statistics, detect_outliers, correlation_analysis]
agent = create_react_agent(
model=model,
tools=tools,
state_modifier="You are a data analyst. Use tools to analyze data step by step."
)
# Agent reasons about which tools to use
result = agent.invoke({
"messages": [("human", "Analyze the sales column for outliers and basic stats")]
})Der @tool-Decorator registriert Funktionen als Agent-Tools mit automatischer Schema-Generierung aus Type-Hints und Docstrings. Der Agent entscheidet basierend auf den Aufgabenanforderungen, wann jedes Tool aufgerufen wird.
Memory-Muster für konversationelle Analytik
Langlaufende Datenanalysesitzungen erfordern Konversations-Memory, um den Kontext über Interaktionen hinweg aufrechtzuerhalten. LangChain bietet mehrere Memory-Strategien, die für verschiedene Anwendungsfälle optimiert sind.
# memory_patterns.py
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain_core.chat_history import InMemoryChatMessageHistory
from langchain_core.runnables.history import RunnableWithMessageHistory
# Initialize model and prompt with history placeholder
model = ChatOpenAI(model="gpt-4o", temperature=0.1)
prompt = ChatPromptTemplate.from_messages([
("system", "You are a data science assistant helping with analysis."),
MessagesPlaceholder(variable_name="history"), # Inject conversation history
("human", "{input}")
])
chain = prompt | model
# Session-based message store
message_stores = {}
def get_session_history(session_id: str):
if session_id not in message_stores:
message_stores[session_id] = InMemoryChatMessageHistory()
return message_stores[session_id]
# Wrap chain with message history
chain_with_history = RunnableWithMessageHistory(
chain,
get_session_history,
input_messages_key="input",
history_messages_key="history"
)
# Conversation maintains context across invocations
config = {"configurable": {"session_id": "analysis_session_1"}}
response1 = chain_with_history.invoke(
{"input": "I'm analyzing customer churn data with 50k rows"},
config=config
)
# Later in the same session
response2 = chain_with_history.invoke(
{"input": "What sampling strategy should I use for this dataset size?"},
config=config
) # Agent remembers the 50k rows contextProduktions-Deployments ersetzen typischerweise InMemoryChatMessageHistory durch Redis- oder PostgreSQL-gestützte Speicher für Persistenz über Server-Neustarts hinweg.
LangChain-Interview-Fragen und Antworten
Technische Interviews für ML-Engineering- und Data-Science-Positionen beinhalten zunehmend LangChain-Fragen. Diese bewerten typischerweise das Verständnis von Kernabstraktionen, Produktionsüberlegungen und Debugging-Strategien.
Interviewer konzentrieren sich auf drei Bereiche: Chain-Kompositionsmuster, RAG-Optimierungstechniken und Agent-Zuverlässigkeitsstrategien. Erwarten Sie, eine Retrieval-Pipeline auf dem Whiteboard zu entwerfen oder ein Halluzinationsszenario zu debuggen.
F: Erklären Sie den Unterschied zwischen Chains und Agents in LangChain.
Chains führen eine vorbestimmte Sequenz von Operationen aus – Prompt zu Modell zu Parser – ohne Laufzeitentscheidungen. Agents fügen eine Reasoning-Schleife hinzu, die dynamisch Tools basierend auf Zwischenergebnissen auswählt. Chains eignen sich für strukturierte Workflows wie Datentransformations-Pipelines; Agents handhaben offene Aufgaben, die adaptive Tool-Auswahl erfordern.
F: Wie reduzieren Sie Halluzinationen in einer RAG-Anwendung?
Mehrere Strategien wirken zusammen: Erhöhung der Retrieval-Präzision mit Hybrid-Suche (Kombination aus Dense- und Sparse-Retrievern), Hinzufügen von Relevanz-Scoring zum Filtern von Chunks mit niedriger Konfidenz, Einbeziehung von Quellenattribution in Prompts, Implementierung von Antwortverifikation gegen abgerufenen Kontext und Verwendung niedrigerer Temperature-Einstellungen für faktische Abfragen. Die Feature-Engineering-Muster für Embedding-Qualität beeinflussen ebenfalls die Retrieval-Genauigkeit.
F: Was sind Runnables und warum verwendet LangChain sie?
Runnables sind die Basisabstraktion, die das Runnable-Protokoll mit invoke, stream, batch und ainvoke-Methoden implementiert. Jede Komponente – Prompts, Modelle, Parser, Retriever – ist ein Runnable. Diese Einheitlichkeit ermöglicht Komposition mit dem Pipe-Operator, wobei Ausgabetypen automatisch zu Eingabeerwartungen passen. Runnables bieten auch integrierte Parallelisierung, Retry-Logik und Streaming ohne zusätzlichen Code.
F: Wie würden Sie Streaming-Antworten für eine Chat-Oberfläche implementieren?
# streaming_example.py
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
prompt = ChatPromptTemplate.from_template("Explain {concept} in detail")
model = ChatOpenAI(model="gpt-4o", streaming=True)
chain = prompt | model
# Stream yields chunks as they arrive
for chunk in chain.stream({"concept": "backpropagation"}):
print(chunk.content, end="", flush=True)Die stream-Methode liefert AIMessageChunk-Objekte mit partiellen Antworten. Für Webanwendungen werden diese Chunks typischerweise in Server-Sent Events oder WebSocket-Verbindungen eingespeist.
F: Beschreiben Sie Strategien zum Testen von LangChain-Anwendungen.
Das Testen von LLM-Anwendungen erfordert mehrere Ansätze: Unit-Tests mit gemockten Modellantworten für deterministisches Chain-Verhalten, Integrationstests mit echten Modellen für Prompt-Effektivität, Evaluierungsdatensätze mit erwarteten Ausgaben zur Regressionserkennung und Tracing-Tools wie LangSmith für Produktions-Debugging. Die Model-Schicht sollte während der CI gemockt werden, um API-Kosten und Flakiness zu vermeiden.
Überlegungen zum Produktions-Deployment
Das Deployment von LangChain-Anwendungen erfordert Aufmerksamkeit für Latenz, Kosten und Zuverlässigkeit über das hinaus, was Entwicklungsumgebungen offenbaren.
Produktions-RAG-Anwendungen können erhebliche Token-Kosten verursachen. Implementieren Sie Token-Zählung-Middleware, setzen Sie Budget-Alerts und erwägen Sie Caching-Strategien für wiederholte Abfragen. Eine einzelne Agent-Schleife mit mehreren Tool-Aufrufen kann Tausende von Tokens pro Anfrage verbrauchen.
Caching reduziert sowohl Latenz als auch Kosten für wiederholte Abfragen. Die Caching-Schicht von LangChain speichert Modellantworten, die nach Prompt-Hash verschlüsselt sind:
# caching_setup.py
from langchain_core.globals import set_llm_cache
from langchain_community.cache import RedisCache
import redis
# Redis cache for distributed deployments
redis_client = redis.Redis(host="localhost", port=6379)
set_llm_cache(RedisCache(redis_client))
# Subsequent identical queries hit cache
model = ChatOpenAI(model="gpt-4o")
response1 = model.invoke("What is gradient descent?") # API call
response2 = model.invoke("What is gradient descent?") # Cache hitFür MLOps-Pipelines sollte LangChain mit Experiment-Tracking integriert werden, um Prompt-Versionen, Modellkonfigurationen und Antwortqualitätsmetriken über die Zeit zu überwachen.
Fang an zu üben!
Teste dein Wissen mit unseren Interview-Simulatoren und technischen Tests.
Fazit
- LangChain 0.3 organisiert LLM-Orchestrierung in Models, Prompts, Chains und Agents – jede Abstraktion komponierbar über LCEL-Pipe-Syntax
- RAG-Implementierungen erfordern abgestimmte Retrieval-Schwellenwerte, Relevanz-Scoring und Kontextformatierung für Produktionsgenauigkeit
- ReAct-Agents handhaben mehrstufige Datenaufgaben durch Reasoning über Tool-Auswahl zur Laufzeit
- Memory-Muster erhalten den Konversationskontext über Analysesitzungen hinweg mittels sitzungsbasierter Message-Stores
- Interview-Vorbereitung sollte Chain-vs-Agent-Unterscheidungen, Halluzinations-Reduktionsstrategien und Runnable-Kompositionsmuster abdecken
- Produktions-Deployments benötigen Caching, Token-Budgetierung und Observability-Tooling für Kosten- und Zuverlässigkeitsmanagement
Tags
Teilen
Verwandte Artikel

RAG und LLMs 2026: Retrieval-Augmented Generation im Data-Science-Interview
RAG-Interviewleitfaden für Data Science 2026. Behandelt RAG-Pipelines, Vektordatenbanken, Chunking-Strategien, Embeddings, Agentic RAG und Graph RAG.

MLOps 2026: MLflow, Model Registry und technische Interviewfragen
MLOps-Interviewfragen zum ML-Lebenszyklus, MLflow-Experiment-Tracking, zur Model-Registry-Beförderung, zu Deployment-Mustern, Drift-Monitoring und System Design für 2026 – mit Python-Code und Antworten.

Feature Engineering für Machine Learning: Techniken und Interview-Fragen 2026
Feature Engineering für ML-Interviews meistern: Skalierung, Encoding, Feature Selection und zeitbasierte Features mit Python-Codebeispielen.