LLM SDK App Development

article technology medium #llm-sdk#agent-framework#anthropic-sdk#openai-sdk#mcp#langchain#langgraph#llm-application
Created: 2026-05-28 Updated:

LLM アプリ開発 SDK を 10 セクション (公式 SDK / マルチプロバイダ抽象 / Agent / MCP / 構造化出力 / RAG / 観測性 / コスト・キャッシュ・バッチ / 選定 / 落とし穴) で俯瞰、tech-69 上のアプリ層を整理。

LLM SDK App Development

LLM アプリ開発は推論サービング (tech-69) 上のアプリ層で、公式 SDK / マルチプロバイダ抽象 / Agent / MCP / 構造化出力 / RAG / 観測性 / キャッシュ・バッチの 7 層。抽象化漏れ (P4) とトークン会計ドリフト (P1) は不可避。

公式プロバイダ SDK

Anthropic (anthropic Py / @anthropic-ai/sdk TS): Messages API、tool_use/tool_result、Prompt Caching (cache_control: {type: "ephemeral"} 5 分 TTL・最大 4 ポイント・90% 削減)、Streaming (text_delta/input_json_delta)、Message Batches (50% 割引)、Files/Citations/Computer use、API 内 MCP 接続 (mcp_servers 2025、GA 未確認)。OpenAI (openai Py/TS): Responses API (2025、previous_response_id ステートフル、Assistants は収束予定)、Structured Outputs (strict: true で JSON Schema 100% 準拠、additionalProperties: false 必須)、Batch (50%/24h)、Embeddings。Google GenAI (google-genai、2024-Q4 GA): Gemini、マルチモーダル、responseSchema、検索 Grounding、1M tokens、Vertex AI 切替。AWS Bedrock (Converse API でモデル横断統一)、Azure OpenAI (AzureOpenAI + デプロイ名)。他: Mistral / Cohere / Groq / Together / Fireworks / DeepSeek (OpenAI 互換) / Ollama / llama-cpp-python (GGUF)。

マルチプロバイダ抽象化

LiteLLM は 100+ プロバイダを OpenAI 互換に統一、Proxy は REST サーバでコスト追跡・LB・フォールバック・レート制限を内蔵。LangChain 0.3.x は LCEL (chain = prompt | llm | parser)、ChatAnthropic/ChatOpenAI/ChatGoogleGenerativeAI が統一 .invoke()/.stream()/.batch()@tool + .bind_tools()、旧 Memory は LangGraph state へ移行。LlamaIndex 0.12.x (RAG 特化): VectorStoreIndex + as_query_engine()、ハイブリッドリトリーバ、LlamaHub。Vercel AI SDK (ai 4.x、Next.js/Edge): generateText/streamText/generateObject (Zod) + useChatHaystack 2.x (パイプライン)、Semantic Kernel (@kernel_function + StepwisePlanner)、Instructor (response_model + 自動リトライ)、Outlines / Guidance / XGrammar / llguidance は制約デコードで JSON Schema/EBNF を 100% 準拠生成。

Agent フレームワーク

LangGraph 0.2.x: StateGraph でノード/エッジ宣言、永続化 (SqliteSaver/PostgresSaver/RedisSaver)、interrupt_before/_after で HITL、サブグラフ/send() でマルチエージェント、Platform 実行 — 状態機械として再現可能。CrewAI: 役割ベース Agent(role, goal, backstory) + Task + Crew(process=sequential|hierarchical)AutoGen (autogen-agentchat 0.4.x): AssistantAgent/UserProxyAgent/GroupChat、Docker サンドボックス。OpenAI Agents SDK (2025、Swarm 後継): Agent(name, instructions, tools, handoffs) + Runner.run()、Handoffs/Guardrails/Tracing。Anthropic Agent Skills + Claude Agent SDK: AGENTS.md/CLAUDE.md 宣言、Task でサブエージェント並列。Pydantic AI: result_type=MyModel + @agent.tool + Logfire。DSPy (Stanford): プロンプトを学習可能モジュールとして Signatures/Modules (CoT/ReAct/Retrieve)/Optimizers (BootstrapFewShot/MIPROv2) で自動最適化。他: LlamaIndex Workflows / Mastra (TS) / Phidata / smolagents / BeeAI。

MCP (Model Context Protocol)

Anthropic が 2024-11 公開した MIT プロトコル、LLM アプリとデータ/ツールを標準接続。3 ロール: Hosts (Claude Desktop / Cursor / Windsurf / Cline / VS Code 拡張) / Clients (Host 内軽量) / Servers (独立プロセス)。3 トランスポート: stdio (ローカル最一般) / SSE (リモート HTTP) / Streamable HTTP (2025 追加、仕様未確認)。3 プリミティブ: Tools (name/description/inputSchema) / Resources (URI 参照) / Prompts (テンプレート)。SDK: Python mcp、TS @modelcontextprotocol/sdk@server.call_tool()/@server.list_tools()。リファレンス実装: filesystem / GitHub / PostgreSQL / Slack / Brave 等。LangChain / LlamaIndex / CrewAI に MCP アダプタ、Anthropic API は mcp_servers で直接接続可 (GA 未確認)。FC との対比: MCP はクロスプロバイダ標準・サーバサイド状態管理可・多トランスポート ↔ プロバイダ固有 FC はステートレス HTTP のみ。

構造化出力と Function Calling

OpenAI: tools=[{type:"function", function:{...}}] + tool_choice、Structured Outputs (strict: true) は JSON Schema 全機能保証だが additionalProperties: falserequired 全フィールド明示が必須。Anthropic: tools=[{name, description, input_schema}]tool_use ブロック、結果は tool_result、ストリーミングは input_json_delta 断片送信 (P3 競合源)。Gemini: FunctionDeclaration + responseSchema + modeInstructor はバリデーション失敗時に LLM へエラーを返し自動リトライ、Pydantic AIresult_type=MyModel を直接指定。制約デコード: Outlines は次トークン候補をスキーマで動的マスクし 100% 準拠 (transformers/vLLM/mlx)、XGrammar (EBNF、vLLM 統合) と llguidance (Microsoft) も同系統。Native strict は API でレイテンシ追加ゼロ、Outlines 系はローカル制御。

RAG アプリケーションパターン

Embedding: OpenAI text-embedding-3-large (3072)/-3-small (1536)、Cohere embed-multilingual-v3.0 (1024、input_type 必須)、Voyage voyage-3 (Anthropic 連携)、BGE-M3 (多言語、tech-001)、Jina v3 (長文)。Vector DB: Qdrant / Pinecone / Weaviate / Chroma / pgvector / Milvus。リトリーバ: LangChain は VectorStoreRetriever/BM25Retriever/EnsembleRetriever でハイブリッド (BM25+dense)、CohereRerank/FlashRankRerank で 2 段リランク。LlamaIndex は VectorIndexRetriever + NodePostprocessorSentenceTransformerRerank を連結。長期記憶: Cypher MCP (Neo4j) + Mem0 (tech-15)。チャンク化: 階層的 → 意味的 → トークン上限の 3 段。Anthropic Contextual Retrieval (2024) は各チャンクに文書全体の文脈サマリを prepend し失敗率 49% 削減と報告 (数値要確認)。

ストリーミング・可観測性・評価

SSE: Anthropic は data: {"type":"content_block_delta","delta":{...}}、OpenAI は data: {"choices":[{"delta":{...}}]} 末尾 [DONE]ツール+ストリーミング: tool_calls デルタが複数チャンクに分割、index でバッファリングするアキュムレータ必須 (P3)。可観測性: LangSmith / LangFuse / Arize Phoenix (OpenInference) / Helicone / Braintrust / Weave。OpenTelemetry GenAIgen_ai.system/usage.input_tokens/usage.output_tokens/response.finish_reason 標準化中、-openai/-anthropic instrumentation で Jaeger/Grafana に送出。評価: Promptfoo / Ragas (faithfulness/answer_relevancy/context_recall/context_precision) / DeepEval / OpenAI Evals / LangSmith Evaluators / HELM。LLM-as-Judge は再現性低下が課題で PairRM/JudgeBench 等の事前訓練評価モデル流派も伸長。

コスト・キャッシュ・バッチ API

Anthropic Prompt Caching: cache_control: {type: "ephemeral"}、5 分 TTL (Sonnet 3.5+ で延長可、GA 未確認)、ヒット時の入力コスト約 90% 削減・書込は基本入力の 1.25 倍、最大 4 ポイント配置可。OpenAI 自動キャッシュ: 1,024 トークン以上のプレフィックスで自動有効・50% 割引、明示制御不要だが範囲は変更不可。Gemini Context Caching: caching.create(model, content, ttl) で明示制御、長動画/PDF/コードベース全文の再利用に最適。Batch API: OpenAI/Anthropic とも 50% 割引・24h 以内、Gemini Batch も 2025 展開 (詳細未確認)。同期は対話、Batch は評価/分析/データラベリング。レート制限: Anthropic=RPM+TPM 独立、OpenAI=TPM 超過 429、Gemini=RPD 上限あり。リトライ: tenacity@retry(wait=wait_exponential(min=1, max=60), retry=retry_if_exception_type(RateLimitError))Retry-After 優先、jitter で thundering herd 回避。

選定ガイダンスと 2026 フロンティア

シナリオ推奨スタック
単一プロバイダ単純アプリ公式 SDK (Anthropic / OpenAI 直接)
プロバイダ切替・コスト最適化LiteLLM + 公式 SDK
RAG (本格)LlamaIndex または LangChain LCEL + Vector DB
複雑エージェント (Python)LangGraph
マルチエージェント役割分担CrewAI / AutoGen
型安全優先Pydantic AI + Instructor
プロンプト学習 / 研究DSPy
Next.js / EdgeVercel AI SDK (TS)
.NET / Azure 中心Semantic Kernel
構造化出力保証Outlines (ローカル) / Instructor (API)
ローカル / オンプレ実行Ollama + LangChain / LlamaIndex

2026 フロンティア: (1) API ステートフル化 — OpenAI Responses、Anthropic MCP mcp_servers (GA 未確認)。(2) TS-first SDK — Vercel AI SDK / Mastra、Cloudflare Workers AI / Vercel Edge / Deno Deploy のエッジ対応拡大。(3) MCP のクロスフレームワーク統合 — LangChain / LlamaIndex / CrewAI / AutoGen アダプタ標準装備、A2A (Google、進捗未確認) と補完/競合。(4) マルチモーダル Realtime — Gemini Live / OpenAI Realtime。(5) Agent-as-a-Service — LangGraph Platform / CrewAI Enterprise / OpenAI Agents。ローカル LLM (tech-46) も機密用途で拡大。

ピットフォール

  • P1 トークンカウント SDK ドリフト: tiktoken/anthropic.count_tokens() のバージョン更新でトークン数が変動。exact pin。
  • P2 ツールコール JSON パース失敗: 余分テキスト/改行で JSONDecodeError。Instructor/Pydantic AI のバリデーション+自動リトライ。
  • P3 ストリーミング+ツールコール競合: tool_calls デルタが複数チャンクに分割、index バッファリング無しで引数 JSON が切断。アキュムレータ必須。
  • P4 マルチプロバイダ抽象の漏れ: 統一しても max_tokens 必須/任意、system 扱い (OpenAI=messages 内 / Anthropic=専用)、画像入力差は残る。
  • P5 エージェント無限再帰: tool error リトライで無限ループ。recursion_limit=25 (LangGraph) や max_iterations 必須。
  • P6 非決定プロンプトでキャッシュバスト: Anthropic は先頭一致判定、タイムスタンプ/UUID を冒頭に置くと毎回バスト。静的を先頭、動的は末尾。
  • P7 レート制限セマンティクス差: Anthropic=RPM+TPM 独立、OpenAI=TPM 超過 429、Gemini=RPD 上限あり。プロバイダごとに設計。
  • P8 SDK バージョンスキュー: openai>=1.0 の範囲指定で API 差。openai==1.51.2 等で exact pin + CI で pip freeze 差分検出。

Local graph