LangChain is the most widely used LLM framework, with millions of downloads and a massive ecosystem. It makes complex patterns like RAG, agents, and chains easy to build. But it comes with a hidden cost that most teams don't notice until their API bill arrives.
LangChain wraps your LLM calls with additional prompt templating, memory management, and chain orchestration. Each layer adds tokens:
We measured a simple RAG chain in LangChain vs direct API calls. The LangChain version used 340% more tokens for the same output due to template overhead and default memory settings.
LangChain's default memory class stores every message in the conversation history and sends it all with every request. For a 20-turn conversation with 200 tokens per turn, that's 4,000 tokens of history injected into every call — growing quadratically with conversation length.
The fix is to use ConversationSummaryMemory or ConversationBufferWindowMemory with a small window:
from langchain.memory import ConversationBufferWindowMemory # Only keep last 3 exchanges instead of everything memory = ConversationBufferWindowMemory(k=3)
LangChain agents using the ReAct pattern include a verbose reasoning trace in every prompt. A typical agent prompt with 5 tools can easily be 800-1,200 tokens before your actual query is even added. For an agent making 10 tool calls per task, that's 8,000-12,000 tokens of overhead per task.
LangChain is genuinely useful for:
Skip LangChain when:
The first step is visibility. Wrap your LangChain LLM with Tokoscope to see exactly how many tokens each chain step is consuming:
from langchain_openai import ChatOpenAI from tokoscope import wrap_openai import openai # Wrap the underlying client wrapped_client = wrap_openai(openai.OpenAI(), api_key="ts_live_...") # Use it with LangChain llm = ChatOpenAI(client=wrapped_client.chat.completions)
Tokoscope shows token usage per call, per chain, and per endpoint. Free to start.
Get started free →