フレームワーク
Vercel AI SDK / LangChain / LlamaIndex / Mastra / Claude Agent SDK / MCP。 どれをいつ使うか、選び方と特徴。
選定の指針
- シンプルなチャット UI → Vercel AI SDK
- RAG 中心 / インデックス管理 → LlamaIndex
- 複雑なグラフ的ワークフロー → LangGraph
- TypeScript で本格エージェント → Mastra / Claude Agent SDK
- Claude を Claude Code の上に乗せる → Claude Agent SDK + サブエージェント
- ツール提供を標準化 → MCP
Vercel AI SDK
Next.js / Nuxt / SvelteKit などでチャット UI を最速で作るライブラリ。React Hooks も提供。
generateText/streamText/generateObject/streamObject- OpenAI / Anthropic / Google など共通インタフェース
- UI 側に
useChat/useCompletion - Tool Use も
tools: { ... }で簡単
import { generateText, tool } from "ai"
import { anthropic } from "@ai-sdk/anthropic"
import { z } from "zod"
const { text } = await generateText({
model: anthropic("claude-sonnet-4-6"),
tools: {
getWeather: tool({
description: "天気取得",
parameters: z.object({ city: z.string() }),
execute: async ({ city }) => await fetchWeather(city)
})
},
prompt: "東京の天気は?"
})
Claude Agent SDK
Anthropic 公式のエージェント SDK。Claude Code が依存している中身を切り出したもの。
- ツールの定義・呼び出し・並列実行
- サブエージェント(Agent ループの中に別 Agent を呼べる)
- 長時間タスクのチェックポイント
- Computer Use / text_editor / bash の組み込み
import { ClaudeAgent } from "@anthropic-ai/agent-sdk"
const agent = new ClaudeAgent({
model: "claude-sonnet-4-6",
systemPrompt: "あなたはサポートエージェントです。",
tools: [searchTool, ticketTool]
})
const result = await agent.run("ユーザー A の最新のチケットを要約して")
LangChain / LangGraph
LLM アプリのデファクト。Python 版が成熟、TypeScript 版も追従。 最近はLangGraph(グラフ的なエージェントフロー)が中心。
- LLM + Tool + Memory + Retriever のパイプライン
- Reducer / Conditional Edge で分岐・ループを表現
- LangSmith(トレース可観測性)と連携
- 大型エージェントは LangGraph で書くと管理しやすい
機能は多いが抽象化が深いため、シンプルな用途では生 SDK の方が早いことがある。 複雑度が要件を超えたら導入を検討する程度で良い。
LlamaIndex
RAG に特化したフレームワーク。ドキュメント取り込み → インデックス → クエリのパイプラインが作りやすい。
- Loader(PDF / Notion / Google Drive 等)が豊富
- ハイブリッド検索 / Reranker 対応
- SubQuestion / Router など RAG パターンが揃う
Mastra
TypeScript ファースト・Workflow + Agent + RAG + Eval の統合フレームワーク。
- Workflow(型付きステップグラフ)
- Agent(ツール付き)
- Memory(短期 / 長期)
- RAG(pgvector / Pinecone / Chroma)
- Eval(評価セット実行)
- Cloudflare Workers / Vercel デプロイ可
TypeScript 1 つで本番グレードのエージェントが組める設計。Vercel AI SDK と組合せるパターンが多い。
MCP(Model Context Protocol)
Anthropic が標準化した「LLM クライアント ↔ ツール」プロトコル。
- MCP サーバー = ツール提供者(GitHub / DB / Slack...)
- MCP クライアント = LLM ホスト(Claude Desktop / Claude Code / Cursor / Cline)
- JSON-RPC over stdio / HTTP / SSE
- 共通仕様なのでクライアント横断で使える
MCP サーバーの最小例
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"
import { z } from "zod"
const server = new McpServer({ name: "weather", version: "1.0.0" })
server.tool(
"get_weather",
{ city: z.string() },
async ({ city }) => ({
content: [{ type: "text", text: `${city} は晴れ` }]
})
)
await server.connect(new StdioServerTransport())
主要 MCP サーバー
- filesystem / git / github / postgres / sqlite
- slack / google-drive / notion / linear
- fetch / brave-search / puppeteer
その他
OpenAI Agents SDK
OpenAI が公式に出した Agent フレームワーク(旧 Swarm)。OpenAI モデル特化だが Anthropic にも対応。
CrewAI
Python 製、マルチエージェント協調に特化。役割を持った複数エージェントが協力するパターンに強い。
AutoGen
Microsoft 製。エージェント同士の会話によるタスク遂行。
Pydantic AI
Python の Pydantic ベースで型安全な LLM 呼び出し。シンプル志向。
使い分け表
| ニーズ | 第 1 候補 |
|---|---|
| Next.js でチャット UI を出したい | Vercel AI SDK |
| RAG パイプライン | LlamaIndex / Mastra |
| 複雑な分岐エージェント | LangGraph |
| Claude エージェントを正攻法で | Claude Agent SDK |
| TypeScript で全部入り | Mastra |
| ツールを横展開したい | MCP サーバー化 |
| マルチエージェント | CrewAI / LangGraph |
| Edge / Cloudflare Workers | Vercel AI SDK / Mastra / Hono + 生 SDK |
フレームワークを使わないという選択
Anthropic SDK の messages.stream + Tool Use ループだけで意外と何でも書ける。
フレームワークの抽象化が要件と合わないなら、自前ループの方が小さく早い。
- 抽象化のメリット: 共通機能(メモリ / トレース / マルチプロバイダ)が無料で乗る
- 抽象化のデメリット: API 変更追従コスト、デバッグの難しさ、思考停止
まず生 SDK で素直に書き、痛みを感じたところに合わせてフレームワークを足す。 先にフレームワークから入るとその抽象化の中で困りごとを解決するクセがついて応用が効かなくなる。