langchain-performance-tuning
Optimize LangChain application performance: latency, throughput, streaming, caching, batch processing, and connection pooling. Trigger: "langchain performance", "langchain optimization", "langchain latency", "langchain slow", "speed up langchain".
Best use case
langchain-performance-tuning is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
Optimize LangChain application performance: latency, throughput, streaming, caching, batch processing, and connection pooling. Trigger: "langchain performance", "langchain optimization", "langchain latency", "langchain slow", "speed up langchain".
Teams using langchain-performance-tuning should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/langchain-performance-tuning/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How langchain-performance-tuning Compares
| Feature / Agent | langchain-performance-tuning | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
Optimize LangChain application performance: latency, throughput, streaming, caching, batch processing, and connection pooling. Trigger: "langchain performance", "langchain optimization", "langchain latency", "langchain slow", "speed up langchain".
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
Related Guides
Best AI Skills for Claude
Explore the best AI skills for Claude and Claude Code across coding, research, workflow automation, documentation, and agent operations.
ChatGPT vs Claude for Agent Skills
Compare ChatGPT and Claude for AI agent skills across coding, writing, research, and reusable workflow execution.
SKILL.md Source
# LangChain Performance Tuning
## Overview
Optimize LangChain apps for production: measure baseline latency, implement caching, batch with concurrency control, stream for perceived speed, optimize prompts for fewer tokens, and select the right model for each task.
## Step 1: Benchmark Baseline
```typescript
async function benchmark(
chain: { invoke: (input: any) => Promise<any> },
input: any,
iterations = 5,
) {
const times: number[] = [];
for (let i = 0; i < iterations; i++) {
const start = performance.now();
await chain.invoke(input);
times.push(performance.now() - start);
}
times.sort((a, b) => a - b);
return {
mean: (times.reduce((a, b) => a + b, 0) / times.length).toFixed(0) + "ms",
median: times[Math.floor(times.length / 2)].toFixed(0) + "ms",
p95: times[Math.floor(times.length * 0.95)].toFixed(0) + "ms",
min: times[0].toFixed(0) + "ms",
max: times[times.length - 1].toFixed(0) + "ms",
};
}
// Usage
const results = await benchmark(chain, { input: "test" }, 10);
console.table(results);
```
## Step 2: Streaming (Perceived Performance)
```typescript
import { ChatOpenAI } from "@langchain/openai";
import { ChatPromptTemplate } from "@langchain/core/prompts";
import { StringOutputParser } from "@langchain/core/output_parsers";
const chain = ChatPromptTemplate.fromTemplate("{input}")
.pipe(new ChatOpenAI({ model: "gpt-4o-mini", streaming: true }))
.pipe(new StringOutputParser());
// Non-streaming: user waits 2-3s for full response
// Streaming: first token in ~200ms, user sees progress immediately
const stream = await chain.stream({ input: "Explain LCEL" });
for await (const chunk of stream) {
process.stdout.write(chunk);
}
// Express SSE endpoint for web apps
app.post("/api/chat/stream", async (req, res) => {
res.setHeader("Content-Type", "text/event-stream");
res.setHeader("Cache-Control", "no-cache");
res.setHeader("Connection", "keep-alive");
const stream = await chain.stream({ input: req.body.input });
for await (const chunk of stream) {
res.write(`data: ${JSON.stringify({ text: chunk })}\n\n`);
}
res.write("data: [DONE]\n\n");
res.end();
});
```
## Step 3: Batch Processing with Concurrency
```typescript
import { ChatOpenAI } from "@langchain/openai";
import { ChatPromptTemplate } from "@langchain/core/prompts";
import { StringOutputParser } from "@langchain/core/output_parsers";
const chain = ChatPromptTemplate.fromTemplate("Summarize: {text}")
.pipe(new ChatOpenAI({ model: "gpt-4o-mini" }))
.pipe(new StringOutputParser());
const inputs = articles.map((text) => ({ text }));
// Sequential: ~10s for 10 items (1s each)
// const results = [];
// for (const input of inputs) results.push(await chain.invoke(input));
// Batch: ~2s for 10 items (parallel API calls)
const results = await chain.batch(inputs, {
maxConcurrency: 10,
});
// Benchmark comparison
console.time("sequential");
for (const i of inputs.slice(0, 5)) await chain.invoke(i);
console.timeEnd("sequential");
console.time("batch");
await chain.batch(inputs.slice(0, 5), { maxConcurrency: 5 });
console.timeEnd("batch");
```
## Step 4: Caching
```typescript
// In-memory cache (single process, resets on restart)
const cache = new Map<string, string>();
async function cachedInvoke(
chain: any,
input: Record<string, any>,
): Promise<string> {
const key = JSON.stringify(input);
const cached = cache.get(key);
if (cached) return cached;
const result = await chain.invoke(input);
cache.set(key, result);
return result;
}
// Cache hit: ~0ms (vs ~500-2000ms for API call)
```
```python
# Python — built-in caching
from langchain_core.globals import set_llm_cache
from langchain_community.cache import SQLiteCache, InMemoryCache
# Option 1: In-memory (single process)
set_llm_cache(InMemoryCache())
# Option 2: SQLite (persistent, survives restarts)
set_llm_cache(SQLiteCache(database_path=".langchain_cache.db"))
# Option 3: Redis (distributed, production)
from langchain_community.cache import RedisCache
import redis
set_llm_cache(RedisCache(redis.Redis.from_url("redis://localhost:6379")))
```
## Step 5: Model Selection by Task
```typescript
import { ChatOpenAI } from "@langchain/openai";
// Fast + cheap: simple tasks, classification, extraction
const fast = new ChatOpenAI({
model: "gpt-4o-mini", // ~200ms TTFT, $0.15/1M input
temperature: 0,
});
// Powerful + slower: complex reasoning, code generation
const powerful = new ChatOpenAI({
model: "gpt-4o", // ~400ms TTFT, $2.50/1M input
temperature: 0,
});
// Route based on task
import { RunnableBranch } from "@langchain/core/runnables";
const router = RunnableBranch.from([
[(input: any) => input.task === "classify", classifyChain],
[(input: any) => input.task === "reason", reasoningChain],
defaultChain,
]);
```
## Step 6: Prompt Optimization
```typescript
// Shorter prompts = fewer input tokens = lower latency + cost
// BEFORE (150+ tokens):
const verbose = `You are an expert AI assistant specialized in software
engineering. Your task is to carefully analyze the following code and
provide a comprehensive review covering all aspects including...`;
// AFTER (20 tokens, same quality):
const concise = "Review this code. List issues and fixes:\n\n{code}";
// Token counting (Python)
// import tiktoken
// enc = tiktoken.encoding_for_model("gpt-4o-mini")
// print(len(enc.encode(prompt))) # check before deploying
```
## Performance Impact Summary
| Optimization | Latency Improvement | Cost Impact |
|-------------|---------------------|-------------|
| Streaming | First token 80% faster | Neutral |
| Caching | 99% on cache hit | Major savings |
| Batch processing | 50-80% for bulk ops | Neutral |
| gpt-4o-mini vs gpt-4o | ~2x faster TTFT | ~17x cheaper |
| Shorter prompts | 10-30% | 10-50% cheaper |
| maxConcurrency tuning | Linear scaling | Neutral |
## Error Handling
| Error | Cause | Fix |
|-------|-------|-----|
| Batch partially fails | Rate limit on some items | Lower `maxConcurrency`, add `maxRetries` |
| Stream hangs | Network timeout | Set `timeout` on model, handle disconnect |
| Cache stale data | Content changed upstream | Add TTL or version key to cache |
| High memory usage | Large cache | Use LRU eviction or Redis |
## Resources
- [LangChain Streaming Guide](https://js.langchain.com/docs/how_to/streaming/)
- [Batch Processing](https://js.langchain.com/docs/how_to/batch/)
- [OpenAI Latency Guide](https://platform.openai.com/docs/guides/latency-optimization)
## Next Steps
Use `langchain-cost-tuning` for cost optimization alongside performance.Related Skills
running-performance-tests
Execute load testing, stress testing, and performance benchmarking. Use when performing specialized testing. Trigger with phrases like "run load tests", "test performance", or "benchmark the system".
workhuman-performance-tuning
Workhuman performance tuning for employee recognition and rewards API. Use when integrating Workhuman Social Recognition, or building recognition workflows with HRIS systems. Trigger: "workhuman performance tuning".
workhuman-cost-tuning
Workhuman cost tuning for employee recognition and rewards API. Use when integrating Workhuman Social Recognition, or building recognition workflows with HRIS systems. Trigger: "workhuman cost tuning".
wispr-performance-tuning
Wispr Flow performance tuning for voice-to-text API integration. Use when integrating Wispr Flow dictation, WebSocket streaming, or building voice-powered applications. Trigger: "wispr performance tuning".
wispr-cost-tuning
Wispr Flow cost tuning for voice-to-text API integration. Use when integrating Wispr Flow dictation, WebSocket streaming, or building voice-powered applications. Trigger: "wispr cost tuning".
windsurf-performance-tuning
Optimize Windsurf IDE performance: indexing speed, Cascade responsiveness, and memory usage. Use when Windsurf is slow, indexing takes too long, Cascade times out, or the IDE uses too much memory. Trigger with phrases like "windsurf slow", "windsurf performance", "optimize windsurf", "windsurf memory", "cascade slow", "indexing slow".
windsurf-cost-tuning
Optimize Windsurf licensing costs through seat management, tier selection, and credit monitoring. Use when analyzing Windsurf billing, reducing per-seat costs, or implementing usage monitoring and budget controls. Trigger with phrases like "windsurf cost", "windsurf billing", "reduce windsurf costs", "windsurf pricing", "windsurf budget".
webflow-performance-tuning
Optimize Webflow API performance with response caching, bulk endpoint batching, CDN-cached live item reads, pagination optimization, and connection pooling. Use when experiencing slow API responses or optimizing request throughput. Trigger with phrases like "webflow performance", "optimize webflow", "webflow latency", "webflow caching", "webflow slow", "webflow batch".
webflow-cost-tuning
Optimize Webflow costs through plan selection, CDN read optimization, bulk endpoint usage, and API usage monitoring with budget alerts. Use when analyzing Webflow billing, reducing API costs, or implementing usage monitoring for Webflow integrations. Trigger with phrases like "webflow cost", "webflow billing", "reduce webflow costs", "webflow pricing", "webflow budget".
vercel-performance-tuning
Optimize Vercel deployment performance with caching, bundle optimization, and cold start reduction. Use when experiencing slow page loads, optimizing Core Web Vitals, or reducing serverless function cold start times. Trigger with phrases like "vercel performance", "optimize vercel", "vercel latency", "vercel caching", "vercel slow", "vercel cold start".
vercel-cost-tuning
Optimize Vercel costs through plan selection, function efficiency, and usage monitoring. Use when analyzing Vercel billing, reducing function execution costs, or implementing spend management and budget alerts. Trigger with phrases like "vercel cost", "vercel billing", "reduce vercel costs", "vercel pricing", "vercel expensive", "vercel budget".
veeva-performance-tuning
Veeva Vault performance tuning for REST API and clinical operations. Use when working with Veeva Vault document management and CRM. Trigger: "veeva performance tuning".