langchain-performance-tuning
LangChainアプリケーションのパフォーマンスとレイテンシーを最適化します。レスポンス時間の短縮、スループットの向上、LangChainパイプラインの効率改善が必要な場合に活用できます。「langchain performance」「langchain optimization」「langchain latency」「langchain slow」「speed up langchain」といったフレーズで呼び出されます。
description の原文を見る
Optimize LangChain application performance and latency. Use when reducing response times, optimizing throughput, or improving the efficiency of LangChain pipelines. Trigger with phrases like "langchain performance", "langchain optimization", "langchain latency", "langchain slow", "speed up langchain".
SKILL.md 本文
LangChain パフォーマンスチューニング
概要
低レイテンシ、高スループット、効率的なリソース利用を実現するために LangChain アプリケーションを最適化します。
前提条件
- 動作する LangChain アプリケーション
- パフォーマンスベースラインの測定
- プロファイリングツールの利用可能性
手順
ステップ 1: ベースラインパフォーマンスの測定
import time
from functools import wraps
from typing import Callable
import statistics
def benchmark(func: Callable, iterations: int = 10):
"""Benchmark a function's performance."""
times = []
for _ in range(iterations):
start = time.perf_counter()
func()
elapsed = time.perf_counter() - start
times.append(elapsed)
return {
"mean": statistics.mean(times),
"median": statistics.median(times),
"stdev": statistics.stdev(times) if len(times) > 1 else 0,
"min": min(times),
"max": max(times),
}
# Usage
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(model="gpt-4o-mini")
def test_call():
llm.invoke("Hello!")
results = benchmark(test_call, iterations=5)
print(f"Mean latency: {results['mean']:.3f}s")
ステップ 2: レスポンスキャッシングの有効化
from langchain_core.globals import set_llm_cache
from langchain_community.cache import InMemoryCache, SQLiteCache, RedisCache
# Option 1: In-memory cache (single process)
set_llm_cache(InMemoryCache())
# Option 2: SQLite cache (persistent, single node)
set_llm_cache(SQLiteCache(database_path=".langchain_cache.db"))
# Option 3: Redis cache (distributed, production)
import redis
redis_client = redis.Redis.from_url("redis://localhost:6379")
set_llm_cache(RedisCache(redis_client))
# Cache hit = ~0ms latency vs ~500-2000ms for API call
ステップ 3: バッチ処理の最適化
import asyncio
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
llm = ChatOpenAI(model="gpt-4o-mini")
prompt = ChatPromptTemplate.from_template("{input}")
chain = prompt | llm
# Sequential (slow)
def process_sequential(inputs: list) -> list:
return [chain.invoke({"input": inp}) for inp in inputs]
# Batch (faster - automatic batching)
def process_batch(inputs: list) -> list:
batch_inputs = [{"input": inp} for inp in inputs]
return chain.batch(batch_inputs, config={"max_concurrency": 10})
# Async (fastest - true parallelism)
async def process_async(inputs: list) -> list:
batch_inputs = [{"input": inp} for inp in inputs]
return await chain.abatch(batch_inputs, config={"max_concurrency": 20})
# Benchmark: 10 items
# Sequential: ~10s (1s each)
# Batch: ~2s (parallel API calls)
# Async: ~1.5s (optimal parallelism)
ステップ 4: ストリーミングによる体感パフォーマンスの向上
from langchain_openai import ChatOpenAI
# Non-streaming: User waits for full response
llm = ChatOpenAI(model="gpt-4o-mini")
response = llm.invoke("Tell me a story") # Wait 2-3 seconds
# Streaming: First token in ~200ms
llm_stream = ChatOpenAI(model="gpt-4o-mini", streaming=True)
for chunk in llm_stream.stream("Tell me a story"):
print(chunk.content, end="", flush=True)
ステップ 5: プロンプト長の最適化
import tiktoken
def count_tokens(text: str, model: str = "gpt-4o-mini") -> int:
"""Count tokens in text."""
encoding = tiktoken.encoding_for_model(model)
return len(encoding.encode(text))
def optimize_prompt(prompt: str, max_tokens: int = 1000) -> str:
"""Truncate prompt to fit token limit."""
encoding = tiktoken.encoding_for_model("gpt-4o-mini")
tokens = encoding.encode(prompt)
if len(tokens) <= max_tokens:
return prompt
return encoding.decode(tokens[:max_tokens])
# Example: Long context optimization
system_prompt = "You are a helpful assistant." # ~5 tokens
user_context = "Here is the document: " + long_document # Could be 10000+ tokens
# Optimize by summarizing or chunking context
ステップ 6: コネクションプーリング
import httpx
from langchain_openai import ChatOpenAI
# Configure connection pooling for high throughput
transport = httpx.HTTPTransport(
retries=3,
limits=httpx.Limits(
max_connections=100,
max_keepalive_connections=20
)
)
# Use shared client across requests
http_client = httpx.Client(transport=transport, timeout=30.0)
# Note: OpenAI SDK handles this internally, but for custom integrations:
llm = ChatOpenAI(
model="gpt-4o-mini",
http_client=http_client # Reuse connections
)
ステップ 7: モデル選択の最適化
# Match model to task complexity
# Fast + Cheap: Simple tasks
llm_fast = ChatOpenAI(model="gpt-4o-mini", temperature=0)
# Powerful + Slower: Complex reasoning
llm_powerful = ChatOpenAI(model="gpt-4o", temperature=0)
# Router pattern: Choose model based on task
from langchain_core.runnables import RunnableBranch
def classify_complexity(input_dict: dict) -> str:
"""Classify input complexity."""
text = input_dict.get("input", "")
# Simple heuristic - replace with classifier
return "complex" if len(text) > 500 else "simple"
router = RunnableBranch(
(lambda x: classify_complexity(x) == "simple", prompt | llm_fast),
prompt | llm_powerful # Default to powerful
)
パフォーマンスメトリクス
| 最適化 | レイテンシの改善 | コストへの影響 |
|---|---|---|
| キャッシング | キャッシュヒット時 90-99% | 大幅削減 |
| バッチ処理 | 一括処理時 50-80% | 中立 |
| ストリーミング | 体感 80% 以上 | 中立 |
| プロンプト短縮 | 10-30% | コスト削減 |
| コネクションプーリング | 5-10% | 中立 |
| モデルルーティング | 20-50% | コスト削減 |
出力物
- パフォーマンスベンチマーク設定
- キャッシング実装
- 最適化されたバッチ処理
- 体感パフォーマンス向上のためのストリーミング
リソース
次のステップ
パフォーマンスと並行して API コストを最適化するには langchain-cost-tuning を使用してください。
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- Brmbobo
- リポジトリ
- Brmbobo/Web2podcast
- ライセンス
- MIT
- 最終更新
- 2026/1/26
Source: https://github.com/Brmbobo/Web2podcast / ライセンス: MIT
関連スキル
agent-browser
AI エージェント向けのブラウザ自動化 CLI です。ウェブサイトとの対話が必要な場合に使用します。ページ遷移、フォーム入力、ボタンクリック、スクリーンショット取得、データ抽出、ウェブアプリのテスト、ブラウザ操作の自動化など、あらゆるブラウザタスクに対応できます。「ウェブサイトを開く」「フォームに記入する」「ボタンをクリックする」「スクリーンショットを取得する」「ページからデータを抽出する」「このウェブアプリをテストする」「サイトにログインする」「ブラウザ操作を自動化する」といった要求や、プログラマティックなウェブ操作が必要なタスクで起動します。
anyskill
AnySkill — あなたのプライベート・スキルクラウド。GitHubを基盤としたリポジトリからエージェントスキルを管理、同期、動的にロードできます。自然言語でクラウドスキルを検索し、オンデマンドでプロンプトを自動ロード、カスタムスキルのアップロードと共有、スキルバンドルの一括インストールが可能です。OpenClaw、Antigravity、Claude Code、Cursorに対応しています。
engram
AIエージェント向けの永続的なメモリシステムです。バグ修正、意思決定、発見、設定変更の後はmem_saveを使用してください。ユーザーが「覚えている」「記憶している」と言及した場合、または以前のセッションと重複する作業を開始する際はmem_searchを使用します。セッション終了前にmem_session_summaryを使用して、コンテキストを保持してください。
skyvern
AI駆動のブラウザ自動化により、任意のウェブサイトを自動化できます。フォーム入力、データ抽出、ファイルダウンロード、ログイン、複数ステップのワークフロー実行など、ユーザーがウェブサイトと連携する必要があるときに使用します。Skyvernは、LLMとコンピュータビジョンを活用して、未知のサイトも自動操作可能です。Python SDK、TypeScript SDK、REST API、MCPサーバー、またはCLIを通じて統合できます。
pinchbench
PinchBenchベンチマークを実行して、OpenClawエージェントの実世界タスクにおけるパフォーマンスを評価できます。モデルの機能テスト、モデル間の比較、ベンチマーク結果のリーダーボード提出、またはOpenClawのセットアップがカレンダー、メール、リサーチ、コーディング、複数ステップのワークフローにどの程度対応しているかを確認する際に使用します。
openui
OpenUIとOpenUI Langを使用してジェネレーティブUIアプリを構築できます。これらはLLM生成インターフェースのためのトークン効率的なオープン標準です。OpenUI、@openuidev、ジェネレーティブUI、LLMからのストリーミングUI、AI向けコンポーネントライブラリ、またはjson-render/A2UIの置き換えについて述べる際に使用します。スキャフォルディング、defineComponent、システムプロンプト、Renderer、およびOpenUI Lang出力のデバッグに対応しています。