spinny:~/writing $ vim agentic-ai-frameworks-comparison.md
1~2AIエージェントは研究デモから本番システムへと進化しました。2026年までにエンタープライズAIアプリケーションの60%以上がエージェント型コンポーネントを含むと予想されています。しかし、エージェントをゼロから構築すること - ツールループ、状態管理、メモリ、エラーハンドリング、マルチエージェント連携の管理 - は複雑です。そこでフレームワークの出番です。3~42026年に主流となっている4つのフレームワーク: **LangGraph**、**CrewAI**、**OpenAI Agents SDK**、**Claude Agent SDK**。それぞれが同じ問題に対して根本的に異なるアプローチを取っています - LLMに推論、計画、ツールの使用、そして協調の能力を与えるという問題です。5~6## 概要7~8| 項目 | LangGraph | CrewAI | OpenAI Agents SDK | Claude Agent SDK |9|--------|-----------|--------|-------------------|-----------------|10| **開発元** | LangChain | CrewAI Inc. | OpenAI | Anthropic |11| **アーキテクチャ** | グラフベース | ロールベース | ハンドオフベース | 自律ループ |12| **設計思想** | 最大限の制御 | チーム協調 | 最小限の抽象化 | エージェントにコンピュータを与える |13| **言語** | Python, TypeScript | Python | Python | Python, TypeScript |14| **モデルサポート** | 任意 (OpenAI, Claude, ローカル) | 任意 | 任意 (名前に反して) | Claudeのみ |15| **GitHub stars** | ~29k | ~40k | ~21k | ~6k |16| **最適な用途** | 複雑なステートフルワークフロー | マルチエージェント特化 | ルーティングとトリアージ | コーディングとファイル中心のタスク |17~18## LangGraph: グラフビルダー19~20LangGraphはエージェントワークフローを**有向巡回グラフ**としてモデル化します。ノード(処理を行う関数)とエッジ(ノード間の遷移、条件付きも可能)を定義します。状態はグラフを通じて流れ、チェックポイントにより永続化されます。21~22これは最も明示的で制御可能なフレームワークです - すべてのステップを自分で配線します。23~24```mermaid25graph LR26 Start --> Router[Router Node]27 Router -->|needs research| Research[Research Node]28 Router -->|needs code| Code[Code Node]29 Research --> Synthesize[Synthesize Node]30 Code --> Synthesize31 Synthesize --> End32```33~34### 主要コンセプト35~36- **StateGraph**: 型付き状態を持つグラフ定義37- **Nodes**: 状態を変換するPython関数38- **Edges**: ノード間の接続、条件付きも可能39- **Checkpointing**: 長時間実行ワークフロー向けの組み込み永続化40~41### コード例42~43```python44from langgraph.graph import StateGraph, MessagesState, START, END45from langchain_openai import ChatOpenAI46~47llm = ChatOpenAI(model="gpt-4o")48~49def call_agent(state: MessagesState):50 response = llm.invoke(state["messages"])51 return {"messages": [response]}52~53def should_continue(state: MessagesState):54 last = state["messages"][-1]55 if last.tool_calls:56 return "tools"57 return END58~59def call_tools(state: MessagesState):60 # Execute tool calls and return results61 results = []62 for tool_call in state["messages"][-1].tool_calls:63 result = execute_tool(tool_call)64 results.append(result)65 return {"messages": results}66~67graph = StateGraph(MessagesState)68graph.add_node("agent", call_agent)69graph.add_node("tools", call_tools)70graph.add_edge(START, "agent")71graph.add_conditional_edges("agent", should_continue, {"tools": "tools", END: END})72graph.add_edge("tools", "agent")73~74app = graph.compile()75result = app.invoke({"messages": [{"role": "user", "content": "What's the weather?"}]})76```77~78### 長所79~80- すべてのステップと遷移をきめ細かく制御可能81- チェックポイントとhuman-in-the-loopが組み込み82- TypeScript完全対応83- あらゆるLLMプロバイダーで動作84- 条件分岐やループを伴う複雑なワークフローに最適85~86### 短所87~88- 学習曲線が急 - グラフ理論の概念を理解する必要がある89- シンプルなユースケースでは冗長 - 基本的なエージェントでも他のフレームワークより多くのボイラープレートが必要90- LangSmithなしではグラフフローのデバッグが難しい91~92### 料金93~94オープンソース (MIT)。LangSmith (マネージド監視プラットフォーム) は本番モニタリング向けに有料プランあり。95~96## CrewAI: チームアセンブラー97~98CrewAIは人間のメタファーを採用しています: 専門化されたエージェントの**クルー**を編成し、それぞれに**ロール**、**ゴール**、**バックストーリー**を持たせます。エージェントは**ツール**を使って**タスク**に協力し、**プロセス**(順次、階層、合意)によって調整されます。99~100チームを雇って各メンバーに特定の職種と専門性を持たせるようなものです。101~102```mermaid103graph TD104 Crew[Crew Manager] --> R[Researcher\nRole: Find data\nTools: WebSearch]105 Crew --> W[Writer\nRole: Write content\nTools: FileWrite]106 Crew --> E[Editor\nRole: Review quality\nTools: FileRead]107 R --> Task1[Research Task]108 W --> Task2[Writing Task]109 E --> Task3[Review Task]110 Task1 --> Task2 --> Task3111```112~113### 主要コンセプト114~115- **Agent**: ロール、ゴール、バックストーリー、ツールを持つペルソナ116- **Task**: 説明、期待される出力、担当エージェントを持つ割り当て117- **Crew**: 協力して働くエージェントのグループ118- **Process**: 実行戦略 (順次、階層、合意)119- **Flow**: 複数のクルーを接続するイベント駆動オーケストレーション層120~121### コード例122~123```python124from crewai import Agent, Task, Crew, Process125~126researcher = Agent(127 role="Senior Research Analyst",128 goal="Find comprehensive data about the given topic",129 backstory="You have 10 years of experience in technology research. "130 "You are thorough and always verify facts from multiple sources.",131 tools=[web_search_tool],132 verbose=True,133)134~135writer = Agent(136 role="Technical Writer",137 goal="Create clear, engaging technical content",138 backstory="You write for a developer audience. "139 "Your articles are practical and include code examples.",140 tools=[file_tool],141 verbose=True,142)143~144research_task = Task(145 description="Research the latest developments in WebAssembly in 2026. "146 "Focus on WASI, Component Model, and production use cases.",147 expected_output="A structured research document with key findings and sources.",148 agent=researcher,149)150~151writing_task = Task(152 description="Write a blog post based on the research. "153 "Include code examples and Mermaid diagrams.",154 expected_output="A complete blog post in Markdown format.",155 agent=writer,156 context=[research_task], # Writer receives researcher's output157)158~159crew = Crew(160 agents=[researcher, writer],161 tasks=[research_task, writing_task],162 process=Process.sequential,163 verbose=True,164)165~166result = crew.kickoff()167print(result.raw)168```169~170### 長所171~172- 直感的なロールベースの抽象化 - 理解しやすい173- 100以上の組み込みツール連携174- エージェント間の共有メモリ (短期、長期、エンティティ)175- 最大のコミュニティ (~40k GitHub stars)176- 委任と検証を行う「マネージャー」エージェントによる階層プロセス177~178### 短所179~180- LangGraphほどのきめ細かい制御はない - 正確な実行パスではなくロールを定義する181- エージェントが意見を異にした場合、階層プロセスは予測しにくくなることがある182- マルチエージェントの会話のデバッグは、シングルエージェントのフローより難しい183~184### 料金185~186オープンソースコア (無料)。CrewAI Platform: $99/月 (Teams) から $120k/年 (Enterprise)。ライブクルー数と月間実行数に基づく料金体系。187~188## OpenAI Agents SDK: ルーター189~190OpenAI Agents SDK (Swarmの後継) は**ハンドオフ** - エージェントが会話を他の専門エージェントに転送すること - に焦点を当てています。最もミニマルなフレームワークで、エージェント、ツール、ハンドオフ、ガードレールだけで構成されています。それだけです。191~192```mermaid193graph LR194 User --> Triage[Triage Agent]195 Triage -->|billing question| Billing[Billing Agent]196 Triage -->|refund request| Refund[Refund Agent]197 Triage -->|technical issue| Support[Support Agent]198 Billing --> Response[Response]199 Refund --> Response200 Support --> Response201```202~203### 主要コンセプト204~205- **Agent**: モデル + 指示 + ツール + ハンドオフ206- **Handoff**: 別のエージェントへの転送 (LLMが呼び出せるツールとしてモデル化)207- **Guardrail**: エージェントと並行して実行される入出力バリデーション208- **Runner**: エージェントループを実行209- **Tracing**: すべてのLLM呼び出し、ツール実行、ハンドオフの組み込みオブザーバビリティ210~211### コード例212~213```python214from agents import Agent, Runner, handoff, InputGuardrail, GuardrailFunctionOutput215from pydantic import BaseModel216~217class SafetyCheck(BaseModel):218 is_safe: bool219 reason: str220~221async def content_safety(ctx, agent, input_text):222 result = await Runner.run(223 Agent(name="Safety", instructions="Check if input is safe. No PII."),224 input_text,225 context=ctx,226 )227 output = SafetyCheck.model_validate_json(result.final_output)228 return GuardrailFunctionOutput(229 output_info=output, tripwire_triggered=not output.is_safe230 )231~232billing_agent = Agent(233 name="Billing Agent",234 instructions="You handle billing inquiries. Be precise with numbers.",235 tools=[lookup_invoice, process_payment],236)237~238refund_agent = Agent(239 name="Refund Agent",240 instructions="You process refund requests. Always verify the order first.",241 tools=[lookup_order, issue_refund],242)243~244triage_agent = Agent(245 name="Triage Agent",246 instructions="Route the customer to the right specialist. "247 "Ask clarifying questions if needed.",248 handoffs=[billing_agent, refund_agent],249 input_guardrails=[InputGuardrail(guardrail_function=content_safety)],250)251~252result = await Runner.run(triage_agent, "I need a refund for order #4521")253print(result.final_output)254# The triage agent routes to refund_agent, which processes the refund255```256~257### 長所258~259- クリーンなハンドオフパターン - ルーティング/トリアージワークフローに自然260- ガードレールは実行と並行して動作 (fail-fast、ブロッキングなし)261- デバッグ用のトレーシングダッシュボードが組み込み262- 名前に反して、OpenAI以外のモデルもサポート263- 最小限の抽象化 - 理解しやすく拡張しやすい264~265### 短所266~267- LangGraphと比べて状態管理が未成熟268- 永続化やチェックポイントが組み込まれていない269- サードパーティツールのエコシステムが小さい270- ハンドオフ中心の設計がすべてのアーキテクチャに合うわけではない271~272### 料金273~274オープンソース (MIT)。使用するモデルに応じたトークン単位の課金。275~276## Claude Agent SDK: デベロッパー277~278Claude Agent SDKは異なるアプローチを取ります: ワークフローやロールを定義する代わりに、エージェントに**ツールのセットを与え、タスクの達成方法を自分で判断させます**。Claude Codeと同じ自律ループ - 読み取り、実行、検証、反復 - を使用しています。279~280```mermaid281graph TD282 Prompt[User Prompt] --> Loop[Autonomous Agent Loop]283 Loop --> Reason[Reason about next step]284 Reason --> Act[Execute tool]285 Act --> Verify[Check result]286 Verify -->|not done| Loop287 Verify -->|done| Output[Final output]288```289~290### 主要コンセプト291~292- **query()**: エージェントループを開始するメインエントリーポイント293- **組み込みツール**: Read, Write, Edit, Bash, Glob, Grep, WebSearch, WebFetch294- **MCPによるカスタムツール**: インプロセスMCPサーバーとしてツールを定義295- **サブエージェント**: 親がタスクを委任できる専門エージェント296- **Sessions**: 複数のインタラクションにわたってコンテキストを維持297~298### コード例299~300```typescript301import { tool, createSdkMcpServer, query } from "@anthropic-ai/claude-agent-sdk";302import { z } from "zod";303~304const searchDocs = tool(305 "search_docs",306 "Search the internal documentation for relevant information",307 { query: z.string().describe("Search query") },308 async ({ query }) => {309 const results = await vectorStore.similaritySearch(query, 5);310 return {311 content: [{ type: "text", text: results.map(r => r.pageContent).join("\n\n") }],312 };313 }314);315~316const docsServer = createSdkMcpServer({317 name: "docs",318 version: "1.0.0",319 tools: [searchDocs],320});321~322for await (const message of query({323 prompt: "Find how authentication works in our system and write a summary",324 options: {325 mcpServers: { docs: docsServer },326 allowedTools: ["Read", "Glob", "Grep", "mcp__docs__search_docs"],327 },328})) {329 if (message.type === "result" && message.subtype === "success") {330 console.log(message.result);331 }332}333```334~335### 長所336~337- ファーストクラスのMCP統合 - あらゆるMCPサーバーエコシステムに接続可能338- ファイル操作、ターミナル、ウェブアクセスの組み込みツール339- 大規模コードベース向けの自動コンテキスト圧縮340- 複雑なタスクのためのサブエージェント並列処理341- Claude Codeと同じエンジン - 実際の開発ワークフローで実証済み342~343### 短所344~345- Claudeモデルのみ - マルチプロバイダーサポートなし346- 新しいフレームワークでコミュニティが小さい347- Python SDKでもNode.jsランタイムが必要348- LangGraphと比べてワークフロー制御が明示的でない349~350### 料金351~352オープンソース。標準的なClaude APIトークン料金。Managed Agents (ホスト版): トークンコストに加えてセッション時間あたり$0.08。353~354## どれを選ぶべきか355~356```mermaid357graph TD358 Start{What's your priority?}359 Start -->|Full control over workflow| LG[LangGraph]360 Start -->|Multi-agent collaboration| CA[CrewAI]361 Start -->|Routing and triage| OA[OpenAI Agents SDK]362 Start -->|Coding and file automation| CS[Claude Agent SDK]363~364 LG --> LGU[Complex stateful workflows\nConditional branching\nHuman-in-the-loop]365 CA --> CAU[Team of specialized agents\nResearch + writing pipelines\nContent generation]366 OA --> OAU[Customer service routing\nMulti-step handoffs\nInput validation]367 CS --> CSU[Code generation and review\nFile-heavy automation\nMCP tool ecosystem]368```369~370### LangGraphを選ぶ場合:371- ワークフローのすべてのステップを正確に制御する必要がある372- 複雑な条件ロジックやループを含むユースケースである373- 永続化やhuman-in-the-loopチェックポイントが組み込みで必要374- 同じワークフローで複数のLLMプロバイダーを使用する必要がある375~376### CrewAIを選ぶ場合:377- 直感的なロールベースの抽象化が欲しい378- 異なる専門性を持つ複数のエージェントが関わるタスクである379- エージェント間でコンテキストを協力して受け渡す必要がある380- 最大のコミュニティと最も多い組み込み連携を重視する381~382### OpenAI Agents SDKを選ぶ場合:383- 主なパターンが会話をスペシャリストにルーティングすることである384- 入出力を並行して検証するガードレールが必要385- 最小限のボイラープレートで最もシンプルな抽象化が欲しい386- 組み込みのトレーシングとオブザーバビリティが重要387~388### Claude Agent SDKを選ぶ場合:389- エージェントがコードの読み書きと実行を行う必要がある390- ファーストクラスのMCPサーバー統合が欲しい391- 反復して自己修正する自律エージェントが必要392- すでにClaudeを使用していて、最も深い統合が欲しい393~394## フレームワークを組み合わせることはできるか?395~396はい。一般的なパターンとして、あるフレームワークをオーケストレーションに使い、別のフレームワークを個別のエージェントに使います:397~398- **LangGraph** をワークフローグラフ全体に399- **CrewAI** をマルチエージェント協調が必要な特定のノードに400- **Claude Agent SDK** をMCPを介したコーディング関連のサブタスクに401- **OpenAI Agents SDK** を顧客対応のトリアージとルーティングに402~403これらのフレームワークは相互に排他的ではありません。システムの各部分に合うものを使いましょう。404~405## まとめ406~407各フレームワークは明確な方向性を持っています:408~409- **LangGraph** は制御を最適化 - すべての遷移を自分で決定410- **CrewAI** は協調を最適化 - エージェントがチームとして働く411- **OpenAI Agents SDK** はシンプルさを最適化 - 最小限の抽象化、クリーンなハンドオフ412- **Claude Agent SDK** は自律性を最適化 - ツールを与えて作業させる413~414正しい選択は、あなたのワークフロー、チーム、そして既存の技術スタックに依存します。主なユースケースに合うものを選び、しっかり学び、他のフレームワークが得意な領域に遭遇したら取り入れましょう。415~
NORMAL · agentic-ai-frameworks-comparison.md [readonly]415 lines · :q to close