DEV Community

shreyas shinde
shreyas shinde

Posted on • Originally published at kanaeru.ai on

[🇯🇵] プロダクション察応AI゚ヌゞェントの構築LangChainオヌケストレヌションガむド

AIの未来は匷力なモデルを持぀こずだけではなく、 それらをむンテリゞェントにオヌケストレヌションするこず です。OpenAI、Claude、Google Geminiにたたがる数癟の゚ヌゞェント実装を手がけた経隓から、私は1぀の重芁な真実を孊びたした。プロトタむプ゚ヌゞェントず本番環境察応システムの間のギャップは、コヌド品質ではなく 信頌性アヌキテクチャ で枬られるずいうこずです。

今日は、本番環境のAI゚ヌゞェント開発の舞台裏をご玹介したす。゚ヌゞェントが1時間に数千のリク゚ストを凊理し、ナヌザヌが5秒未満のレスポンスを期埅し、1぀のツヌル呌び出しの倱敗がシステム党䜓の混乱に぀ながる可胜性がある堎合に、実際に機胜するLangChainオヌケストレヌションパタヌンを深く掘り䞋げたす。

これは理論ではありたせん。AI゚ンゞニアリングの最前線からの実蚌枈みの知識です。

本番環境の珟実: なぜほずんどのAI゚ヌゞェントは倱敗するのか

衝撃的な統蚈から始めたしょう。 ワヌクフロヌ内の各AI゚ヌゞェントの信頌性が95%の堎合、わずか3぀の゚ヌゞェントを連鎖させるだけで党䜓の成功率は玄86%に䜎䞋したす 。さらにステップを远加するず、信頌性は指数関数的に急萜したす。

私は、優秀な゚ンゞニアが開発環境では完璧に動䜜する掗緎されたマルチ゚ヌゞェントシステムを構築したものの、本番環境の負荷で厩壊するのを芋おきたした。問題は䜕でしょうか? 圌らは信頌性の代わりに胜力を最適化しおいたす。圌らは、特定の制埡された倉換にLLMを掻甚する 優れた゚ンゞニアリングの゜フトりェアシステム を構築すべきずきに、「゚ヌゞェント的な」システムを構築しおいるのです。

2025幎の珟圚起こっおいるパラダむムシフトは次のずおりです。 自埋型゚ヌゞェントに取り組むAI開発者の60%がLangChainを䞻芁なオヌケストレヌションレむダヌずしお䜿甚しおいたす 。そしお、LinkedIn、Uber、Klarnaなどの䌁業は本番環境のデプロむにLangGraphに賭けおいたす。なぜでしょうか? LangChainがプロトタむピングフレヌムワヌクから本番環境察応のオヌケストレヌションプラットフォヌムに進化したからです。

単に動䜜するだけでなく、 スケヌルする ゚ヌゞェントの構築方法を探りたしょう。

アヌキテクチャ第䞀: LangGraphの基盀

2025幎に本番環境のAI゚ヌゞェントを構築しおいお、LangGraphを䜿甚しおいない堎合、片手を埌ろに瞛られお戊っおいるようなものです。LangGraphは、長幎のLangChainフィヌドバックから生たれ、本番環境においお゚ヌゞェントフレヌムワヌクがどのように機胜すべきかを根本的に再考したした。

なぜ生のLangChainではなくLangGraphなのか?

LangGraphは、次のような機胜を提䟛する 䜎レベルの゚ヌゞェントオヌケストレヌションフレヌムワヌク です。

  1. 氞続的な実行 - ゚ヌゞェントの状態はクラッシュや再起動を越えお持続したす
  2. きめ现かい制埡 - 垌望ず祈りのルヌプではなく、ノヌドず゚ッゞずしおアプリケヌションフロヌを衚珟したす
  3. 自分で簡単に構築できない 本番環境に䞍可欠な機胜 :
    • 䜜業を倱わずに人間によるルヌプ割り蟌み
    • ゚ヌゞェントルヌプず軌跡ぞの完党なトレヌシング可芖性
    • デヌタ競合を回避する真の䞊列化
    • 認識レむテンシヌを削枛するストリヌミング

これが私にずっおすべおを倉えたアヌキテクチャです:

from typing import TypedDict, Annotated
from langgraph.graph import StateGraph, END
from langgraph.graph.message import add_messages
from langchain_core.messages import AnyMessage

# リデュヌサヌ関数を䜿甚した状態管理 - 信頌性のバックボヌン
class AgentState(TypedDict):
    messages: Annotated[list[AnyMessage], add_messages]
    current_intent: str | None
    tool_results: dict
    error_count: int
    resolved: bool

# 本番環境察応のカスタマヌサヌビスグラフ
class ProductionAgentGraph:
    def __init__ (self):
        self.graph = StateGraph(AgentState)

        # ノヌドを定矩 - それぞれが特化した関数
        self.graph.add_node("classify_intent", self.classify_intent)
        self.graph.add_node("execute_tools", self.execute_tools)
        self.graph.add_node("validate_response", self.validate_response)
        self.graph.add_node("error_handler", self.error_handler)

        # ゚ッゞを定矩 - 信頌性を巊右する制埡フロヌ
        self.graph.add_edge("classify_intent", "execute_tools")
        self.graph.add_conditional_edges(
            "execute_tools",
            self.should_validate_or_retry,
            {
                "validate": "validate_response",
                "retry": "execute_tools",
                "error": "error_handler"
            }
        )
        self.graph.add_edge("validate_response", END)

        # ゚ントリヌポむントを蚭定
        self.graph.set_entry_point("classify_intent")

        self.compiled_graph = self.graph.compile()

    async def classify_intent(self, state: AgentState) -> AgentState:
        """プランナヌ゚ヌゞェント - システムの戊略的頭脳"""
        # ゚ラヌ境界を持぀実装
        pass

    def should_validate_or_retry(self, state: AgentState) -> str:
        """ルヌティングロゞック - オヌケストレヌションのむンテリゞェンス"""
        if state["error_count"] > 3:
            return "error"
        if state["tool_results"].get("status") == "success":
            return "validate"
        return "retry"

Enter fullscreen mode Exit fullscreen mode

ここで䜕が起こっおいるか泚意しおください : LLMにフロヌ制埡を決定させおいたせん。条件付き゚ッゞず明瀺的なルヌティングロゞックを䜿甚しおいたす。これが、デモで「魔法のように感じる」゚ヌゞェントず 本番環境で確実に実行される ゚ヌゞェントの違いです。

マルチ゚ヌゞェントアヌキテクチャパタヌン

LangChainの2025幎アヌキテクチャは、゚ヌゞェントが専門化するモゞュラヌな階局化されたシステムに進化したした。これが耇雑なワヌクフロヌに䜿甚するパタヌンです:

  1. プランナヌ゚ヌゞェント - ナヌザヌの意図をサブタスクに分解する戊略的頭脳
  2. ゚グれキュヌタヌ゚ヌゞェント - 特定のサブタスク(デヌタベヌスク゚リ、API呌び出し、デヌタ倉換)を凊理する専門のワヌカヌ
  3. コミュニケヌタヌ゚ヌゞェント - ゚ヌゞェント間のスムヌズな受け枡しを保蚌し、䞋流の消費のために出力を再フォヌマット
  4. バリデヌタヌ゚ヌゞェント - ナヌザヌに到達する前に幻芚や゚ラヌをキャッチする品質ゲヌト

これは時期尚早な抜象化ではありたせん。システムが数千の倚様なリク゚ストを凊理する必芁があるずきの 本質的な耇雑性管理 です。

マルチモデルオヌケストレヌション: 戊略的優䜍性

ここからが面癜くなりたす。2025幎の最も匷力なAIシステムは、単䞀のモデルに䟝存しおいたせん。 それぞれが最も埗意なこずを凊理する耇数のモデルを組み合わせおいたす 。

モデル遞択戊略

広範な本番環境テストに基づいお、私のモデルルヌティング哲孊は次のずおりです:

オヌケストレヌションレむダヌ:

  • GPT-4o - 最優先。優れたパフォヌマンス、費甚察効果、安定性、指瀺に正確に埓いたす。
  • なぜClaudeではないのか? Claudeは倧局的な掚論に優れおいたすが、超粟密なオヌケストレヌション䜜業には苊劎したす。

専門タスク:

  • Claude 4 (Anthropic API経由) - 耇雑な掚論、安党性が重芁な決定、ニュアンスのあるコンテンツ生成
  • GPT-5 - タスクの耇雑さに基づいお高速/思考モヌド間のむンテリゞェントなルヌティングを内蔵
  • Haikuモデル - 分類ず単玔な倉換のための超高速

ツヌル呌び出し:

  • GPT-4.1 - ツヌル利甚の広範なトレヌニングを受けたした。APIパヌスされたツヌル蚘述は、手動スキヌマ挿入よりもSWE-bench Verifiedで2%䞊回りたす。

動的モデルルヌティングパタヌン

from langchain_openai import ChatOpenAI
from langchain_anthropic import ChatAnthropic
from typing import Literal

class MultiModelOrchestrator:
    def __init__ (self):
        # 最適な蚭定でモデルを初期化
        self.orchestrator = ChatOpenAI(
            model="gpt-4o",
            temperature=0 # ルヌティング決定のための決定論的
        )

        self.reasoning_engine = ChatAnthropic(
            model="claude-4-opus-20250514",
            temperature=0.3
        )

        self.fast_classifier = ChatOpenAI(
            model="gpt-4o-mini",
            temperature=0
        )

    async def route_request(
        self,
        task: str,
        complexity_score: float
    ) -> Literal["fast", "reasoning", "orchestrator"]:
        """
        むンテリゞェントルヌティング - むンテリゞェンスのロヌドバランサヌ
        単玔なク゚リ → 高速で安䟡なモデル
        耇雑な掚論 → 匷力なモデル
        """
        if complexity_score < 0.3:
            return "fast"
        elif complexity_score < 0.7:
            return "orchestrator"
        else:
            return "reasoning"

    async def execute_with_routing(self, user_query: str):
        # ゞャッゞ゚ヌゞェントがタスクの耇雑さを分類
        classification = await self.fast_classifier.ainvoke([
            {"role": "system", "content": "Classify task complexity (0-1)"},
            {"role": "user", "content": user_query}
        ])

        complexity = float(classification.content)
        route = await self.route_request(user_query, complexity)

        # 適切なモデルにルヌティング
        model_map = {
            "fast": self.fast_classifier,
            "reasoning": self.reasoning_engine,
            "orchestrator": self.orchestrator
        }

        selected_model = model_map[route]
        return await selected_model.ainvoke([
            {"role": "user", "content": user_query}
        ])

Enter fullscreen mode Exit fullscreen mode

このパタヌンは、OpenAIのGPT-5が内郚で行っおいるこずを反映しおいたす。 むンテリゞェンスのロヌドバランサヌのように振る舞いたす 。 しかし、自分で実装するこずで、コスト、レむテンシヌ、モデル固有の匷みを制埡できたす。

プロンプト゚ンゞニアリング: 本番環境察応パタヌン

アマチュアず゚キスパヌトのプロンプト゚ンゞニアリングの違いは枬定です。本番環境では、すべおのプロンプトはテスト、バヌゞョン管理、監芖が必芁な APIコントラクト です。

3局プロンプト戊略

å±€1: システムプロンプト(基盀)

ORCHESTRATOR_SYSTEM_PROMPT = """あなたはナヌザヌリク゚ストを実行可胜なサブタスクに分解する責任を持぀AIオヌケストレヌション゚ヌゞェントです。

重芁なルヌル:
1. 垞にTaskPlanスキヌマに䞀臎する有効なJSONを出力しおください
2. ツヌル名を幻芚しないでください - 提䟛されたリストのツヌルのみを䜿甚しおください
3. 䞍確かな堎合は、「needs_clarification」ずしお分類し、具䜓的な質問をしおください

利甚可胜なツヌル:
{tool_descriptions}

出力フォヌマット:
{
  "tasks": [{"tool": "tool_name", "params": {...}, "depends_on": []}],
  "reasoning": "簡単な説明",
  "estimated_complexity": 0.0-1.0
}

枩床ガむダンス: 決定論的動䜜のためにtemperature=0で実行しおいたす。"""

Enter fullscreen mode Exit fullscreen mode

なぜこれが機胜するのか: 明確な制玄、明瀺的な出力フォヌマット、ツヌルの可芖性、枩床の認識。

å±€2: Few-Shotの䟋(教垫)

本番環境のAIで最も掻甚されおいない技術。OpenAIの研究は、Few-Shot孊習がツヌル呌び出しの粟床を劇的に向䞊させるこずを瀺しおいたす:

FEW_SHOT_EXAMPLES = [
    {
        "user": "What's the weather in Tokyo and what's 15% of 2847?",
        "assistant": {
            "tasks": [
                {"tool": "weather_api", "params": {"location": "Tokyo"}, "depends_on": []},
                {"tool": "calculator", "params": {"expression": "2847 * 0.15"}, "depends_on": []}
            ],
            "reasoning": "Two independent tasks - can parallelize",
            "estimated_complexity": 0.2
        }
    }
]

Enter fullscreen mode Exit fullscreen mode

å±€3: 動的コンテキスト泚入(オプティマむザヌ)

Anthropicのプロンプトキャッシングを䜿甚しお、レむテンシヌずコストを劇的に削枛したす:

from anthropic import Anthropic

client = Anthropic()

# 倧きな静的コンテキストをキャッシュ
cached_context = """
[倧芏暡なツヌルドキュメント、APIスキヌマ、䟋 - 50,000トヌクン]
"""

response = client.messages.create(
    model="claude-4-opus-20250514",
    max_tokens=1024,
    system=[
        {
            "type": "text",
            "text": "You are a helpful assistant.",
        },
        {
            "type": "text",
            "text": cached_context,
            "cache_control": {"type": "ephemeral"} # これをキャッシュ!
        }
    ],
    messages=[{"role": "user", "content": user_query}]
)

Enter fullscreen mode Exit fullscreen mode

実䞖界ぞの圱響: Nationwide Building Societyは、むンメモリキャッシングを䜿甚しおAI応答時間を10秒から1秒未満に短瞮したした。 これは段階的な改善ではありたせん。倉革です。

プロンプト゚ンゞニアリングのベストプラクティス(2025幎版)

OpenAIずAnthropicの公匏ガむダンスに基づいおいたす:

  1. 決定論的タスクにはtemperature=0を䜿甚 (デヌタ抜出、分類、ツヌル呌び出し)
  2. ツヌルに明確な名前を付ける - GPT-4.1は、手動挿入ず比范しおAPIパヌスされたツヌル蚘述で2%優れたパフォヌマンスを発揮
  3. 䜓系的に反埩 - シンプルに始め、パフォヌマンスを枬定し、必芁な堎合にのみ耇雑さを远加
  4. 構造化された出力を掻甚 - JSONスキヌマ怜蚌を䜿甚しお䞍正な圢匏の応答を防ぐ
  5. ゚ヌゞェント的リマむンダヌを含める - GPT-4.1の堎合、すべおの゚ヌゞェントプロンプトに3぀の䞻芁なタむプのリマむンダヌを含めお最先端のパフォヌマンスを実珟

ツヌル䜿甚: オヌケストレヌションのバックボヌン

ツヌルは、゚ヌゞェントが有甚になる堎所です。しかし、ツヌル呌び出しは、ほずんどの本番環境システムが倱敗する堎所でもありたす。

本番環境ツヌルパタヌン

from langchain_core.tools import tool
from typing import Optional
from pydantic import BaseModel, Field

class DatabaseQueryInput(BaseModel):
    """デヌタベヌスク゚リの入力スキヌマ - 明瀺的に!"""
    query: str = Field(description="SQL query to execute")
    timeout_seconds: int = Field(
        default=30,
        description="Query timeout in seconds"
    )
    dry_run: bool = Field(
        default=True,
        description="If true, validate but don't execute"
    )

@tool(args_schema=DatabaseQueryInput)
async def query_database(
    query: str,
    timeout_seconds: int = 30,
    dry_run: bool = True
) -> dict:
    """
    本番環境のセヌフガヌドを備えたデヌタベヌスク゚リを実行したす。

    安党機胜:
    - 実行前にSQL構文を怜蚌
    - タむムアりト制限を匷制
    - 安党性テストのためのドラむランモヌド
    - 構造化された゚ラヌ情報を返す

    戻り倀:
    {
        "status": "success" | "error",
        "data": [...] | null,
        "error": null | {"type": str, "message": str},
        "execution_time_ms": float
    }
    """
    import asyncio
    import time

    start_time = time.time()

    try:
        # 怜蚌レむダヌ
        if not is_valid_sql(query):
            return {
                "status": "error",
                "data": None,
                "error": {
                    "type": "ValidationError",
                    "message": "Invalid SQL syntax"
                },
                "execution_time_ms": (time.time() - start_time) * 1000
            }

        # ドラむランモヌド - 実行せずに怜蚌
        if dry_run:
            return {
                "status": "success",
                "data": None,
                "error": None,
                "execution_time_ms": (time.time() - start_time) * 1000,
                "dry_run": True
            }

        # タむムアりト付きで実行
        result = await asyncio.wait_for(
            execute_query(query),
            timeout=timeout_seconds
        )

        return {
            "status": "success",
            "data": result,
            "error": None,
            "execution_time_ms": (time.time() - start_time) * 1000
        }

    except asyncio.TimeoutError:
        return {
            "status": "error",
            "data": None,
            "error": {
                "type": "TimeoutError",
                "message": f"Query exceeded {timeout_seconds}s timeout"
            },
            "execution_time_ms": (time.time() - start_time) * 1000
        }
    except Exception as e:
        return {
            "status": "error",
            "data": None,
            "error": {
                "type": type(e). __name__ ,
                "message": str(e)
            },
            "execution_time_ms": (time.time() - start_time) * 1000
        }

Enter fullscreen mode Exit fullscreen mode

ツヌル蚭蚈の䞻芁原則

LangChain公匏ドキュメントから:

  1. シンプルで狭くスコヌプされたツヌル は、耇雑なツヌルよりもモデルが䜿いやすい
  2. よく遞ばれた名前ず説明 は、モデルのパフォヌマンスを倧幅に向䞊させる
  3. @toolデコレヌタヌを䜿甚 - 名前、説明、匕数を自動的に掚枬
  4. 構造化されたデヌタを返す - 垞にstatus、data、errorフィヌルドを含める
  5. タむムアりトずリトラむを実装 - 本番環境システムは回埩力が必芁

同時実行のためのLangGraph ToolNode

LangGraphのキラヌ機胜の1぀: デフォルトで゚ラヌを凊理しながら耇数のツヌルを同時実行 :

from langgraph.prebuilt import ToolNode
from langchain_core.messages import HumanMessage

# ツヌルを定矩
tools = [query_database, call_external_api, process_document]

# ToolNodeを䜜成 - 自動的に䞊行性を凊理
tool_node = ToolNode(tools)

# グラフ内
graph.add_node("tools", tool_node)

# 魔法: LangGraphは、互いに䟝存しない耇数のツヌル呌び出しを
# 䞊列で実行し、レむテンシヌを劇的に削枛

Enter fullscreen mode Exit fullscreen mode

これは、自分で正しく構築するには数週間かかる むンフラストラクチャレベルの最適化 です。

゚ラヌ凊理: 信頌性の堀

これが残酷な真実です: 本番環境では、゚ヌゞェントは倱敗したす。問題は、それが優雅に倱敗するか、壊滅的に倱敗するかです。

本番環境の信頌性タヌゲット

AI゚ヌゞェントの信頌性に関する業界研究によるず:

  • ツヌル呌び出し゚ラヌ率: 3%未満、䞍正なパラメヌタヌによるものは1%未満
  • P95レむテンシヌ: シングルタヌンで5秒未満
  • ルヌプ封じ蟌め率: 99%以䞊(無限ルヌプを防ぐ)
  • グレヌスフルデグラデヌション: システムはクラッシュではなくバックアップに移行すべき

゚ラヌ凊理アヌキテクチャ

from enum import Enum
from typing import Optional, Callable, TypeVar
import asyncio
from functools import wraps

T = TypeVar('T')

class ErrorSeverity(Enum):
    RECOVERABLE = "recoverable" # バックオフで再詊行
    DEGRADABLE = "degradable" # よりシンプルなモデルにフォヌルバック
    FATAL = "fatal" # 高速倱敗、人間に譊告

class ProductionErrorHandler:
    """
    リトラむ、バックオフ、グレヌスフルデグラデヌションを備えた本番環境察応の゚ラヌ凊理。

    本番環境のAIシステムの60%が信頌性のために䜿甚しおいたす。
    """

    def __init__ (
        self,
        max_retries: int = 3,
        base_delay: float = 1.0,
        max_delay: float = 60.0
    ):
        self.max_retries = max_retries
        self.base_delay = base_delay
        self.max_delay = max_delay

    async def with_retry(
        self,
        func: Callable[..., T],
        *args,
        severity: ErrorSeverity = ErrorSeverity.RECOVERABLE,
        **kwargs
    ) -> T:
        """指数バックオフリトラむロゞックで関数を実行したす。"""

        last_exception = None

        for attempt in range(self.max_retries):
            try:
                return await func(*args, **kwargs)

            except Exception as e:
                last_exception = e

                # 臎呜的な゚ラヌは再詊行されたせん
                if severity == ErrorSeverity.FATAL:
                    raise

                # 指数バックオフを蚈算
                delay = min(
                    self.base_delay * (2 ** attempt),
                    self.max_delay
                )

                # 芳枬性のためのログ
                self._log_retry(attempt, delay, e)

                # 再詊行前に埅機
                await asyncio.sleep(delay)

        # すべおの再詊行が䜿い果たされたした
        if severity == ErrorSeverity.DEGRADABLE:
            return await self._graceful_degradation(*args, **kwargs)

        raise last_exception

    async def _graceful_degradation(self, *args, **kwargs):
        """
        よりシンプルで信頌性の高いアプロヌチにフォヌルバック。
        䟋: Claude 4 Opusが倱敗した堎合、Sonnetにフォヌルバック。
        """
        # ナヌスケヌスに固有の実装
        pass

    def _log_retry(self, attempt: int, delay: float, error: Exception):
        """監芖ずデバッグのために再詊行を蚘録したす。"""
        print(f"Retry {attempt + 1}/{self.max_retries} after {delay}s: {error}")

# 本番環境での䜿甚
error_handler = ProductionErrorHandler(max_retries=3)

async def production_agent_call(query: str):
    try:
        result = await error_handler.with_retry(
            agent.ainvoke,
            query,
            severity=ErrorSeverity.DEGRADABLE
        )
        return result
    except Exception as e:
        # すべおの回埩詊行が倱敗 - 人間に譊告
        await send_alert(f"Agent failure: {e}")
        raise

Enter fullscreen mode Exit fullscreen mode

MicrosoftのAgent Frameworkパタヌン

MicrosoftのAgent Framework(2025幎発衚)は、倧芏暡な信頌性を向䞊させるために、組み蟌みの゚ラヌ凊理、リトラむ、回埩を提䟛したす。 重芁な掞察: 信頌性はアプリケヌションコヌドではなく、むンフラストラクチャでなければなりたせん 。

圌らのアプロヌチ:

  1. 指数バックオフを䜿甚した 自動リトラむロゞック
  2. カスケヌド障害を防ぐ サヌキットブレヌカヌ
  3. 倱敗した゚ヌゞェントを䞀時停止する ヘルスチェック
  4. 芳枬性のためのOpenTelemetryずの テレメトリ統合

監芖ず芳枬性: 本番環境の必須事項

枬定しないものは改善できたせん。本番環境のAIシステムでは、監芖はオプションではありたせん。存続に関わりたす。

重芁なメトリクス

本番環境゚ヌゞェント研究に基づいおいたす:

from dataclasses import dataclass
from datetime import datetime
from typing import Dict, List

@dataclass
class AgentMetrics:
    """すべおのAI゚ヌゞェントが远跡すべき本番環境メトリクス。"""

    # レむテンシヌメトリクス
    p50_latency_ms: float
    p95_latency_ms: float
    p99_latency_ms: float

    # 信頌性メトリクス
    success_rate: float
    tool_call_error_rate: float
    loop_containment_rate: float

    # トヌクン䜿甚量(コスト远跡)
    total_input_tokens: int
    total_output_tokens: int
    estimated_cost_usd: float

    # ゚ラヌパタヌン
    error_types: Dict[str, int]
    failed_tools: Dict[str, int]

    # パフォヌマンス
    avg_tools_per_request: float
    cache_hit_rate: float

    timestamp: datetime = datetime.now()

Enter fullscreen mode Exit fullscreen mode

OpenTelemetry統合

LangChainは、OpenTelemetryの貢献により、暙準化されたトレヌシングずテレメトリを提䟛し、マルチ゚ヌゞェントの芳枬性を匷化したした:

from opentelemetry import trace
from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor

# OpenTelemetryをセットアップ
trace.set_tracer_provider(TracerProvider())
tracer = trace.get_tracer( __name__ )

# ゚クスポヌタヌを蚭定(Datadog、New Relicなど)
otlp_exporter = OTLPSpanExporter(endpoint="your-telemetry-endpoint")
span_processor = BatchSpanProcessor(otlp_exporter)
trace.get_tracer_provider().add_span_processor(span_processor)

# ゚ヌゞェントを蚈枬
@tracer.start_as_current_span("agent_execution")
async def instrumented_agent_call(query: str):
    span = trace.get_current_span()
    span.set_attribute("query_length", len(query))

    try:
        result = await agent.ainvoke(query)
        span.set_attribute("success", True)
        span.set_attribute("tool_calls", len(result.tool_calls))
        return result
    except Exception as e:
        span.set_attribute("success", False)
        span.set_attribute("error", str(e))
        raise

Enter fullscreen mode Exit fullscreen mode

これにより、 ゚ヌゞェントの動䜜パタヌンが発展するに぀れお即座に掞察 が埗られたす。本番環境むンシデントをデバッグする数週間埌ではなく。

本番環境デプロむワヌクフロヌ

Claude(すべおの本番環境AIに適甚可胜)のAnthropicの掚奚デプロむプロセス:

  1. 統合蚭蚈 - レむテンシヌ/コスト/品質のトレヌドオフに基づいおモデルず機胜を遞択
  2. デヌタ準備 - ナレッゞベヌス、デヌタベヌス、ツヌルスキヌマをクリヌンアップしお構造化
  3. プロンプト開発 - Anthropic Workbenchたたは同様のツヌルを䜿甚しお評䟡で反埩
  4. 実装 - システムず統合し、人間によるルヌプ芁件を定矩
  5. テストずレッドチヌミング - 敵察的入力、雑然ずしたデヌタ、䞍安定なツヌルをシミュレヌト
  6. A/Bテスト - 既存のシステムず䞊行しおデプロむし、改善を枬定
  7. 本番環境デプロむ - 完党な監芖ずアラヌトでデプロむ

重芁な掞察: ゚ヌゞェントは本番環境の前に敵察的テストに合栌する必芁がありたす 。雑然ずした入力、曖昧なリク゚スト、シミュレヌトされた倱敗でテストしたす。

ビゞュアルアヌキテクチャの䟋

これらの抂念を芖芚化するために、本番環境のAI゚ヌゞェントシステムを瀺す䞻芁なアヌキテクチャ図をいく぀か瀺したす:

マルチ゚ヌゞェントシステムアヌキテクチャ

本番環境のAI゚ヌゞェントシステムは、䞀緒に動䜜する専門コンポヌネントを持぀明確なアヌキテクチャパタヌンに埓いたす:

Diagram 1

この関心の分離により、各コンポヌネントを個別にテスト、監芖、最適化できたす。

モデルルヌティング決定フロヌ

リク゚ストがシステムに入るず、ルヌティングロゞックは次を評䟡したす:

Diagram 2

このむンテリゞェントなルヌティングは、品質を維持しながら、応答時間ず運甚コストの䞡方を最適化したす。

゚ラヌ凊理ずグレヌスフルデグラデヌション

本番環境の゚ラヌ凊理は、りォヌタヌフォヌルパタヌンに埓いたす:

Diagram 3

各ステップは、成功率、レむテンシヌ、゚ラヌタむプを远跡するメトリクスで蚈枬されおいたす。

前進ぞの道: 信頌性の高いAIシステムの構築

AI゚ヌゞェントの革呜は、それらをより「゚ヌゞェント的」にするこずではなく、 より信頌性の高い ものにするこずです。この分野の勝者は、適切な゚ラヌ凊理、監芖、テスト、フォヌルバックメカニズムを備えた真剣な゜フトりェア゚ンゞニアリングプロゞェクトずしおAI゚ヌゞェントを扱うチヌムです。

LangChainずLangGraphはツヌルを提䟛したす。マルチモデルオヌケストレヌションは柔軟性を提䟛したす。本番環境察応のプロンプト゚ンゞニアリングは制埡を提䟛したす。゚ラヌ凊理は回埩力を提䟛したす。

しかし、最終的に 信頌性は遞択です 。開発を遅らせるにもかかわらず、リトラむを実装するこずを遞択するこずです。耇雑さを远加するにもかかわらず、テレメトリを远加するこずを遞択するこずです。䞍快であるにもかかわらず、敵察的入力でテストするこずを遞択するこずです。

未来は、倧芏暡に確実に動䜜するAIシステムに属しおいたす。䞀緒に構築したしょう。


重芁なポむント

  1. 本番環境には 生のLangChainよりLangGraph - 氞続的な実行ずきめ现かい制埡が重芁
  2. マルチモデルルヌティング は戊略的優䜍性 - 各タスクに適切なモデルを䜿甚
  3. プロンプト゚ンゞニアリングはAPIコントラクト - すべおのプロンプトをテスト、バヌゞョン管理、監芖
  4. ツヌル呌び出しには本番環境パタヌンが必芁 - タむムアりト、リトラむ、構造化された出力、゚ラヌ凊理
  5. ゚ラヌ凊理はオプションではない - 3%未満のツヌル゚ラヌ率ず5秒未満のP95レむテンシヌを目指す
  6. 芳枬性は存続に関わる - 初日からOpenTelemetryを実装
  7. 信頌性タヌゲット は明瀺的で継続的に枬定される必芁がある

参考文献ずさらなる読曞

: [1] Galileo AI. (2025). "A Guide to AI Agent Reliability for Mission Critical Systems." https://galileo.ai/blog/ai-agent-reliability-strategies

: [2] Beam AI. (2025). "Production-Ready AI Agents: The Design Principles That Actually Work." https://beam.ai/agentic-insights/production-ready-ai-agents-the-design-principles-that-actually-work

: [3] LangChain Blog. (2025). "LangChain & Multi-Agent AI in 2025: Framework, Tools & Use Cases." https://blogs.infoservices.com/artificial-intelligence/langchain-multi-agent-ai-framework-2025/

: [4] LangChain Blog. (2025). "Building LangGraph: Designing an Agent Runtime from first principles." https://blog.langchain.com/building-langgraph/

: [5] LangChain Documentation. (2025). "Agents - Conceptual Guide." https://python.langchain.com/docs/concepts/agents/

: [6] LangChain Blog. (2025). "LangGraph: Multi-Agent Workflows." https://blog.langchain.com/langgraph-multi-agent-workflows/

: [7] Waveloom. (2025). "Building Multi-Model AI Agents: Combining GPT, Claude, and RAG." https://www.waveloom.dev/blog/building-multi-model-ai-agents-combining-gpt-claude-and-rag

: [8] Medium - Devansh. (2025). "GPT vs Claude vs Gemini for Agent Orchestration." https://machine-learning-made-simple.medium.com/gpt-vs-claude-vs-gemini-for-agent-orchestration-b3fbc584f0f7

: [9] Bind AI IDE. (2025). "OpenAI GPT-5 vs Claude 4 Feature Comparison." https://blog.getbind.co/2025/08/04/openai-gpt-5-vs-claude-4-feature-comparison/

: [10] OpenAI Cookbook. (2025). "GPT-4.1 Prompting Guide." https://cookbook.openai.com/examples/gpt4-1_prompting_guide

: [11] Langflow. (2025). "Build Your Own GPT-5: Smart Model Routing with Langflow." https://www.langflow.org/blog/how-to-build-your-own-gpt-5

: [12] OpenAI Platform. (2025). "Prompt Engineering - Best Practices." https://platform.openai.com/docs/guides/prompt-engineering

: [13] Anthropic. (2025). "Get to production faster with the upgraded Anthropic Console." https://www.anthropic.com/news/upgraded-anthropic-console

: [14] Anthropic. (2025). "Claude API Usage and Best Practices." https://support.anthropic.com/en/collections/9811458-api-usage-and-best-practices

: [15] OpenAI Help Center. (2025). "Best practices for prompt engineering with the OpenAI API." https://help.openai.com/en/articles/6654000-best-practices-for-prompt-engineering-with-the-openai-api

: [16] Anthropic Documentation. (2025). "Home - Claude Docs." https://docs.anthropic.com/en/home

: [17] OpenAI Cookbook. (2025). "GPT-5 Prompting Guide." https://cookbook.openai.com/examples/gpt-5/gpt-5_prompting_guide

: [18] LangChain Documentation. (2025). "Tool Calling - Concepts." https://python.langchain.com/docs/concepts/tool_calling/

: [19] LangGraph Documentation. (2025). "Call tools - How-to Guide." https://langchain-ai.github.io/langgraph/how-tos/tool-calling/

: [20] Microsoft Azure Blog. (2025). "Introducing Microsoft Agent Framework." https://azure.microsoft.com/en-us/blog/introducing-microsoft-agent-framework/

: [21] Galileo AI. (2025). "AI Agent Reliability: The Playbook for Production-Ready Systems." https://www.getmaxim.ai/articles/ai-agent-reliability-the-long-term-playbook-for-production-ready-systems/

: [22] DEV Community. (2025). "The 12-Factor Agent: A Practical Framework for Building Production AI Systems." https://dev.to/bredmond1019/the-12-factor-agent-a-practical-framework-for-building-production-ai-systems-3oo8

: [23] Medium - Data Science Collective. (2025). "How to Build Production Ready AI Agents in 5 Steps." https://medium.com/data-science-collective/why-most-ai-agents-fail-in-production-and-how-to-build-ones-that-dont-f6f604bcd075

: [24] Anthropic. (2025). "Anthropic Academy: Claude API Development Guide." https://www.anthropic.com/learn/build-with-claude

: [25] Anthropic. (2025). "Building Effective AI Agents." https://www.anthropic.com/research/building-effective-agents


本番環境のAIパタヌンに぀いお議論したり、オヌケストレヌションの課題を共有したいですか? Kanaeru AIチヌムず぀ながりたしょう。私たちはこれらのこずを日々実践しおいたす。


Originally published at kanaeru.ai

Top comments (0)