框架生态
LangChain、LlamaIndex、CrewAI、AutoGen。
35 分钟
框架生态
手写 Agent 循环几十行即可;框架 提供工具抽象、状态图、多 Agent 编排与可观测性钩子。本课概览 LangChain、LlamaIndex、CrewAI、AutoGen 的定位与选型——不追 API 细节,帮你在 ai-agents 路线图 里 选对脚手架。前置:ai-agents-essentials 已理解循环与 RAG。
学习目标
- 按「编排 / 检索 / 多角色」三维对比四类框架
- 知道何时框架价值大于「裸 SDK + 自研」
- 避免为框架引入不必要的抽象层
四维对比
| 框架 | 强项 | 弱项 / 注意 |
|---|---|---|
| LangChain | 工具链、LCEL、生态插件多 | 版本迭代快,需 pin |
| LlamaIndex | 索引、RAG、数据连接器 | Agent 编排非唯一重心 |
| CrewAI | 角色分工、任务委托 | 多 Agent 成本与调试 |
| AutoGen | 对话式多 Agent、人机协作 | 学习曲线、运行时较重 |
选型口诀:RAG 为主 → LlamaIndex 组件;通用 Agent + 观测 → LangChain/LangGraph;明确角色剧本 → CrewAI;研究型多 Agent 对话 → AutoGen。
最小示例(概念)
# LangGraph 风格伪代码:状态机
class State(TypedDict):
messages: list
plan: dict | None
graph = StateGraph(State)
graph.add_node("plan", planner_node)
graph.add_node("act", tool_node)
graph.add_edge("plan", "act")
graph.add_conditional_edges("act", should_continue, {"loop": "plan", "end": END})
app = graph.compile()
result = app.invoke({"messages": [user_goal]})
CrewAI 伪代码:
researcher = Agent(role="Researcher", tools=[search_docs])
writer = Agent(role="Writer", tools=[])
crew = Crew(agents=[researcher, writer], tasks=[task1, task2], process=Process.sequential)
crew.kickoff(inputs={"topic": "..."})
自研 vs 框架
| 自研合适 | 框架合适 |
|---|---|
| 工具 ≤5、单循环、团队熟悉 SDK | 要状态图、人机中断、内置 tracing |
| 强定制网关与鉴权 | 快速 POC、标准 RAG + Agent |
| 需极小依赖 | 多 Agent 角色已定型 |
框架 不替代 aga-safety 的权限设计;只减少样板代码。
练习
- 为你的 RAG 问答场景选框架并写两条理由