LangChain
LangChain provides composable primitives for LLM applications: models, retrievers, tools, and chains. LCEL pipe syntax connects steps into pipelines.
Search across all documentation pages
LangChain provides composable primitives for LLM applications: models, retrievers, tools, and chains. LCEL pipe syntax connects steps into pipelines.
from langchain_openai import ChatOpenAI, OpenAIEmbeddings
from langchain_chroma import Chroma
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.runnables import RunnablePassthrough
llm = ChatOpenAI(model="gpt-4o-mini")
retriever = Chroma(embedding_function=OpenAIEmbeddings()).as_retriever()"""langchain.py - RAG chain with LCEL."""
from langchain_openai import ChatOpenAI, OpenAIEmbeddings
from langchain_chroma import Chroma
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.runnables import RunnablePassthrough
from langchain_text_splitters import RecursiveCharacterTextSplitter
docs = ["pytest runs tests with fixtures.", "FastAPI uses Pydantic for validation."]
splits = RecursiveCharacterTextSplitter(chunk_size=200).split_text("\n".join(docs))
vectorstore = Chroma.from_texts(splits, OpenAIEmbeddings())
retriever = vectorstore.as_retriever(search_kwargs={"k": 2})
prompt = ChatPromptTemplate.from_template(
"Answer from context only:\n{context}\n\nQuestion: {question}"
)
def format_docs(docs):
return "\n---\n".join(d.page_content for d in docs)
chain = (
{"context": retriever | format_docs, "question": RunnablePassthrough()}
| prompt
| ChatOpenAI(model="gpt-4o-mini", temperature=0)
| StrOutputParser()
)
print(chain.invoke("How does pytest work?"))langchain-core primitives.| Alternative | Use When | Don't Use When |
|---|---|---|
| LangChain | Multi-step LLM pipelines | Single API call |
| LlamaIndex | Data-centric RAG | Simple chains |
| LangGraph | Stateful agents | Linear pipelines |
| Raw SDK | Full control, learning | Complex multi-step apps |
Stack versions: This page was written for Python 3.14.0 (stable 3.14, maintenance 3.13), FastAPI 0.115+, Django 5.2, Flask 3.1, Pydantic 2, PyTorch 2.6+, pandas 2.2+, Polars 1.x, ruff 0.9+, and uv 0.6+.
Reviewed by Chris St. John·Last updated Jul 16, 2026