LangChain 与 LlamaIndex 对比
LLM 应用开发领域的两大先驱框架:通用型 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 拥有 42,222 个 GitHub 星标,具备持久化执行能力,其产品页的'信赖名单'logo 墙中列出了 Cisco、Nvidia、ServiceNow、Klarna 等企业;CrewAI 拥有 58,978 个星标,官方建议'生产就绪的应用应从 Flow 开始',并分享了 PwC、IBM、AWS 的案例研究。两者的官网都没有明确宣称自己'更适合'——你应该根据自己工作流中分支/循环的复杂程度来做决定。