Agent Skills by ALSEL
汎用LLM・AI開発⭐ リポ 2品質スコア 69/100

langchain-patterns

LangChain、LangGraph、LiteLLMのパターン — チェーン構成(LCEL)、モデルサイズ横断的な構造化出力、RAG、モデルルーティング、Ollmaローカルモデル、およびプロバイダーに依存しない設計に対応しています。これらのツールを活用することで、複数のLLMモデルを組み合わせた複雑なワークフローの構築、様々なサイズのモデルからの一貫性のある出力形式の取得、検索拡張生成(RAG)による精度の高い回答生成、用途に応じた最適なモデルの自動選択、ローカル環境でのモデル実行、そして特定のLLMプロバイダーに縛られない柔軟なシステム設計が可能になります。

description の原文を見る

LangChain, LangGraph, LiteLLM patterns — chain composition (LCEL), structured output across model sizes, RAG, model routing, Ollama local models, and provider-agnostic design

SKILL.md 本文

重要: 使用前に必ず langchain-docs MCP に対してインポートとメソッドシグネチャを確認してください。LangChain API は頻繁に変更されます。

チェーン構成 (LCEL)

from langchain_core.prompts import ChatPromptTemplate
from langchain_core.runnables import RunnablePassthrough, RunnableParallel
from langchain_core.output_parsers import StrOutputParser

prompt = ChatPromptTemplate.from_messages([
    ("system", "You are a {role}."),
    ("human", "{input}")
])
chain = prompt | llm | StrOutputParser()

# Parallel execution
parallel = RunnableParallel(summary=summary_chain, keywords=keyword_chain)

# Branching
from langchain_core.runnables import RunnableBranch
branch = RunnableBranch(
    (lambda x: x["type"] == "code", code_chain),
    default_chain,
)

構造化出力 (デュアルモデル)

from pydantic import BaseModel, Field

class Entity(BaseModel):
    """Keep flat for small models. Use Field descriptions as implicit instructions."""
    name: str = Field(description="Entity name as it appears in text")
    entity_type: str = Field(description="One of: person, place, organization")
    confidence: float = Field(ge=0.0, le=1.0)

# Works across all providers (preferred)
structured = llm.with_structured_output(Entity, method="json_schema")

# For small Ollama models — force JSON mode:
from langchain_ollama import ChatOllama
small_llm = ChatOllama(model="qwen3:4b-instruct", format="json", temperature=0)

重要なポイント: method="json_schema" (JSON_MODE) は Ollama を含むすべてのプロバイダーで確実に動作します。method="function_calling" (TOOL) は小規模モデルの複雑なスキーマでは None を返す可能性があります。

LiteLLM ルーティング

# LiteLLM プロキシ経由 (マルチモデル構成に推奨)
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(base_url="http://litellm-proxy:4000", model="claude-sonnet-4-20250514")

# フォールバック付きダイレクト
from litellm import completion
response = completion(
    model="claude-sonnet-4-20250514",
    messages=messages,
    fallbacks=["gpt-4o", "ollama/qwen3:8b"],
)

Ollama / ローカルモデル

from langchain_ollama import ChatOllama

llm = ChatOllama(
    model="qwen3:4b-instruct",
    base_url="http://ollama:11434",
    temperature=0,
    format="json",       # Essential for structured output on small models
    # num_ctx=8192,      # Set explicitly if needed
)

ローカルモデルの重要なポイント:

  • 4B 命令チューニングモデルは、制約付き生成により 8B 以上のモデルより構造化タスクで優れたパフォーマンスを発揮できます。
  • 構造化出力の場合は思考モードを無効化してください。
  • VRAM を監視してください: 並行リクエストは OOM を引き起こします。
  • 命令チューニング済みのバリアントを使用し、ベースモデルは決して使わないでください。

LangGraph (ステートフルワークフロー)

from langgraph.graph import StateGraph, END
from typing import TypedDict

class State(TypedDict):
    input: str
    draft: str
    iteration: int

graph = StateGraph(State)
graph.add_node("generate", generate_node)
graph.add_node("review", review_node)
graph.set_entry_point("generate")
graph.add_conditional_edges("review", should_revise, {"revise": "generate", "accept": END})
app = graph.compile()

よくある落とし穴

  • シンプルな API 呼び出しで十分な場合に LangChain を使わないでください。
  • 常に max_tokens を明示的に設定してください。
  • OutputParserException を処理してください — 構造化出力は時々失敗します。
  • オブザーバビリティには コールバックまたは LangSmith を使用してください。
  • 決定論的な呼び出し (temp=0, 同じ入力) をキャッシュしてください。
  • LangChain のインポートは安定していないと仮定しないでください — 常にドキュメントに対して確認してください。

ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ

詳細情報

作者
pvliesdonk
リポジトリ
pvliesdonk/agents.md
ライセンス
MIT
最終更新
2026/3/21

Source: https://github.com/pvliesdonk/agents.md / ライセンス: MIT

本サイトは GitHub 上で公開されているオープンソースの SKILL.md ファイルをクロール・インデックス化したものです。 各スキルの著作権は原作者に帰属します。掲載に問題がある場合は info@alsel.co.jp または /takedown フォームよりご連絡ください。
原作者: pvliesdonk · pvliesdonk/agents.md · ライセンス: MIT