from langchain_core.prompts import ChatPromptTemplatefrom langchain_anthropic import ChatAnthropicfrom langchain_core.output_parsers import StrOutputParserchain = ( ChatPromptTemplate.from_template("Translate to French: {text}") | ChatAnthropic(model="claude-haiku-4-5") | StrOutputParser())chain.invoke({"text": "Where is the library?"})
Pushback
Indirection tax. Reading LangChain code often takes longer than reading the underlying SDK call would. The abstraction can hide what's actually being sent to the model.
Churn. v0.1 → v0.2 → v0.3 broke a lot of tutorials. Pin versions and expect maintenance.
Anti-patterns baked in. Some defaults (chat history handling, retriever wrappers) hide problems you'd rather see.
When to use it
Prototyping a chain that touches many integrations (Slack, Google Drive, Postgres) and you want them in one place.
A team that's already using LangSmith for tracing. LangChain integrates more cleanly there.
Standard RAG pipelines where the abstractions match what you'd build anyway.
When to skip it
Single-provider apps (one model, one vector store). The native SDK is fine.
Anything where you'd benefit from full control over the prompt and tool call format.
Production systems that need stable APIs over a 2-3 year horizon.
For agent loops specifically, LangGraph is better-shaped than the original LangChain agent abstractions.