LangChain vs LlamaIndex
LLMアプリケーション開発を牽引する2つのフレームワーク:汎用性の高いLangChainと、データ接続に特化したLlamaIndex。RAGやAIエージェント開発ではどちらを選ぶべきか?
低レベルでグラフベースのエージェントオーケストレーション・ランタイム
ロールベースのエージェントチーム + イベント駆動Flowによる本番オーケストレーション
明確な勝者はなく、あなたのワークフローの形が勝敗を決める:ループや条件分岐を含むアーキテクチャならLangGraphが優位、特に規制対象のワークフローでは顕著だ。少ないコードで『ロールチーム』を組みたいならCrewAIの方が近道になる。MCPに頻繁に接続するならCrewAIの専用DSLが有利だ。そして2026年には第三の選択肢もある:シンプルな自動化にはフレームワーク自体が不要かもしれない。
| カテゴリー | LangGraph | CrewAI |
|---|---|---|
| パフォーマンス | 8/10 | 8/10 |
| 学習のしやすさ | 5/10 | 8/10 |
| エコシステム | 8/10 | 7/10 |
| コミュニティ | 8/10 | 8/10 |
| 求人市場 | 7/10 | 6/10 |
| 将来性 | 9/10 | 8/10 |
# LangGraph — チェックポイント付き、人間承認ありのシンプルなエージェントフロー
from langgraph.graph import StateGraph, START, END
from langgraph.checkpoint.memory import InMemorySaver
from langgraph.types import interrupt, Command
from typing import TypedDict
class State(TypedDict):
input: str
approved: bool
result: str
def draft_step(state: State) -> dict:
return {"result": f"draft for: {state['input']}"}
def approval_step(state: State) -> dict:
decision = interrupt({"question": "Approve this draft?", "draft": state["result"]})
return {"approved": decision == "yes"}
graph = StateGraph(State)
graph.add_node("draft", draft_step)
graph.add_node("approval", approval_step)
graph.add_edge(START, "draft")
graph.add_edge("draft", "approval")
graph.add_edge("approval", END)
app = graph.compile(checkpointer=InMemorySaver())
config = {"configurable": {"thread_id": "run-1"}}
app.invoke({"input": "weekly report"}, config=config)
# 人間が承認した後、中断した地点から再開する:
app.invoke(Command(resume="yes"), config=config)# CrewAI — Flow + Crew、@human_feedbackによる人間承認ありのフロー (crewai >= 1.8.0)
from crewai import Agent, Crew, Task
from crewai.flow.flow import Flow, listen, start
from crewai.flow.human_feedback import HumanFeedbackResult, human_feedback
writer = Agent(
role="Content Writer",
goal="Draft a short weekly report",
backstory="You are a concise technical writer.",
)
draft_task = Task(
description="Write a one-paragraph weekly report about {topic}",
expected_output="A one-paragraph report",
agent=writer,
)
class ReportFlow(Flow):
@start()
def create_draft(self):
crew = Crew(agents=[writer], tasks=[draft_task])
return str(crew.kickoff(inputs={"topic": "deployment metrics"}))
# emit + llm: 自由形式のフィードバックを単一の結果に集約する
@listen(create_draft)
@human_feedback(
message="Approve this draft, or say what needs changing:",
emit=["approved", "rejected"],
llm="gpt-4o-mini",
default_outcome="rejected",
)
def review_draft(self, draft):
return draft
# HumanFeedbackResultは、デコレートされたメソッドではなくそれをリッスンする側に渡される
@listen("approved")
def publish(self, result: HumanFeedbackResult):
print(f"Published: {result.output}")
@listen("rejected")
def discard(self, result: HumanFeedbackResult):
print(f"Rejected: {result.feedback}")
flow = ReportFlow()
flow.kickoff()明確な勝者はなく、あなたのワークフローの形が勝敗を決める:ループや条件分岐を含むアーキテクチャならLangGraphが優位、特に規制対象のワークフローでは顕著だ。少ないコードで『ロールチーム』を組みたいならCrewAIの方が近道になる。MCPに頻繁に接続するならCrewAIの専用DSLが有利だ。そして2026年には第三の選択肢もある:シンプルな自動化にはフレームワーク自体が不要かもしれない。
無料相談を受けるどちらも積極的に本番運用を志向して開発が続けられている。LangGraphはGitHubスター42,222でdurable executionを備え、製品ページの『trusted by』ロゴ一覧にCisco/Nvidia/ServiceNow/Klarnaなどが並ぶ。CrewAIはスター58,978で、公式の『production-ready application, start with a Flow』という推奨とともにPwC/IBM/AWSの事例を公開している。どちらの公式サイトにも明確な『こちらの方が適している』という主張はない — 自分のワークフローの分岐/ループの密度に応じて判断すべきだ。