在动手构建Harness之前,你需要对现有的工具有一个全景式的认识。这不是为了让你陷入“选择困难”,而是为了让你理解:不同的框架解决了什么问题,它们的设计哲学有何差异,以及你该如何根据自己的场景做出选择。
一个残酷的现实是:Agent框架领域在过去两年里经历了爆发式增长和快速洗牌。2024年初的明星项目,到了2026年可能已经停止维护。因此,本节的重点不是推荐某个“最好”的框架,而是帮你建立一套评估框架的方法——这样无论生态如何变化,你都能做出自己的判断。
在深入具体框架之前,先理解一个关键的分类维度:框架在Agent开发栈中的位置。
┌─────────────────────────────────────────────────┐
│ 应用层(你的产品逻辑) │
│ │
│ ┌──────────────────────────────────────────┐ │
│ │ Harness层(本书重点) │ │
│ │ 评估 · 可观测 · 部署 · 安全 · 治理 │ │
│ └──────────────────────────────────────────┘ │
│ ┌──────────────────────────────────────────┐ │
│ │ 编排层(Agent框架) │ │
│ │ 状态管理 · 图编排 · 多Agent协作 │ │
│ └──────────────────────────────────────────┘ │
│ ┌──────────────────────────────────────────┐ │
│ │ 模型层(LLM能力) │ │
│ │ 推理 · Function Calling · 嵌入 │ │
│ └──────────────────────────────────────────┘ │
└─────────────────────────────────────────────────┘
大多数被称为“Agent框架”的项目,实际上横跨了Harness层和编排层。比如LangChain既有编排能力(Chain、Agent Executor),也有Harness能力(LangSmith用于可观测、LangEval用于评估)。理解一个框架在哪一层投入了更多精力,比记住它的功能列表更重要。
LangChain / LangGraph
定位:Agent开发的“瑞士军刀”,生态最丰富。
LangChain是Agent领域的先行者。2023年,它几乎是“LLM应用开发”的代名词。它提供了海量的组件:模型封装、向量数据库连接器、工具定义、Prompt模板、记忆模块……
但LangChain的“大而全”也带来了问题:抽象层过多、行为不够透明、调试困难。2024年初,LangChain团队推出了LangGraph,基于图(Graph)的编排框架,用节点和边的概念来显式定义Agent的状态流转。
LangGraph的核心思想:Agent的执行逻辑是一个有向图——每个节点是一个处理步骤(调用LLM、执行工具、判断分支),边定义了状态如何流转。
# LangGraph的典型结构
from langgraph.graph import StateGraph, END
graph = StateGraph(AgentState)
graph.add_node("agent", call_llm) # LLM决策节点
graph.add_node("tools", execute_tools) # 工具执行节点
graph.add_edge("agent", "tools") # LLM决定用工具 → 去执行
graph.add_edge("tools", "agent") # 工具完成 → 回到LLM继续思考
graph.add_edge("agent", END) # LLM给出最终答案 → 结束
适合谁:需要高度定制编排逻辑、愿意深入理解内部机制的团队。LangGraph的图结构让Agent的行为显式化——你可以清楚地看到每一步的决策路径,这对调试和审计非常有价值。
注意:LangChain/LangGraph的API变动频繁,学习成本不低。但如果你只能深入学一个框架,LangGraph目前是最值得的选择。
OpenAI Agents SDK 定位:极简、现代、与OpenAI生态深度绑定。
OpenAI在2025年发布的Agents SDK(原Swarm项目的演进版)走了与LangChain截然相反的路线:极度精简。它的核心概念只有三个:
Agent:一个有指令、工具和可选交接(handoff)的LLM实例
Handoff:Agent之间传递对话控制权的机制
Guardrail:在Agent执行前/后运行的验证逻辑
from agents import Agent, Runner
support_agent = Agent(
name="客服助手",
instructions="你是客服,帮助用户解决问题",
tools=[check_order, refund_order]
)
result = Runner.run_sync(support_agent, "我的订单还没到货")
设计哲学:把复杂性留给模型,把简单性留给开发者。没有图、没有复杂的编排原语——Agent之间的协作通过“交接”完成,模型自己决定什么时候交接。
适合谁:快速构建原型、Agent数量不多、不需要复杂的控制流。如果你主要是调用OpenAI的模型,这个SDK的体验非常流畅。但如果你需要深度定制执行流程(比如自定义循环、复杂的并行分支),它的灵活性有限。
Microsoft AutoGen 定位:多Agent协作的开创者,研究驱动的框架。
AutoGen在2023年底点燃了“多Agent”的热潮。它的核心概念是Agent对话:多个Agent(各有各的角色和工具)通过对话协作完成任务。一个典型的AutoGen场景是“程序员Agent + 评审Agent + 产品经理Agent”一起讨论并实现一个功能。
AutoGen的GroupChat模式尤为经典:
用户:帮我写一个快排函数
程序员Agent:我来写初版代码...
评审Agent:这里递归深度可能有问题,建议加尾递归优化...
程序员Agent:收到,修改后如下...
注意:AutoGen在2024-2025年经历了一次大重构(AutoGen 0.4),API发生了重大变化。它的多Agent对话模式在研究实验和探索性任务中表现很好,但在生产环境中,多Agent自由对话的不可预测性和成本是显著问题。
适合谁:研究多Agent协作模式、探索Agent在复杂任务中的协作潜力。如果你的场景需要严格的流程控制和成本预算,AutoGen的自由对话模式可能过于“自由”。
CrewAI
定位:角色扮演式的多Agent协作,上手最简单。
CrewAI的核心抽象是Crew(团队):你定义一组Agent(各自有角色、目标和背景故事),再定义Task(任务),CrewAI自动安排它们协作完成。
researcher = Agent(role="研究员", goal="收集最新的市场数据")
writer = Agent(role="写作者", goal="将研究结果写成报告")
crew = Crew(agents=[researcher, writer], tasks=[...])
特点:概念直观、文档友好、社区活跃。但底层能力相对简单,适合内容生成类的工作流(研究→写作→审核),不适合需要复杂工具编排和精确状态控制的场景。
LlamaIndex 定位:RAG起家,扩展到Agent,数据连接能力最强。
LlamaIndex最初专注于检索增强生成(RAG),在数据加载、索引、查询方面积累了深厚的能力。后来扩展到Agent领域后,它的优势在于数据密集型Agent——需要连接大量异构数据源的场景。
如果你要构建的Agent大量依赖文档检索、知识库查询、结构化数据分析,LlamaIndex值得关注。但如果你的Agent核心逻辑是工具编排而非数据检索,LlamaIndex的优势就不那么明显了。
以下工具不负责Agent的“执行”,而是专注Harness层的某个关键能力。它们通常与上述框架配合使用,而非替代。
LangSmith(可观测与评估) LangChain团队推出的商业平台,提供Agent执行轨迹的可视化、评估数据集管理、在线实验对比。核心价值:让你看到Agent的每一次“思考”,并能系统地评估不同版本的表现。
Langfuse(开源可观测) LangSmith的开源替代品,功能接近,可以自托管。如果你的团队对数据隐私有严格要求,或者预算有限,Langfuse是很好的选择。
AgentOps(可观测与分析) 专注Agent会话的监控和分析,覆盖成本追踪、失败模式分析、会话回放等。与LangSmith相比,AgentOps更偏向“运营分析”视角,而非“开发调试”视角。
Phoenix (Arize)(可观测与评估) 开源项目,强调实时监控和评估与生产数据的结合。如果你已经用Arize做模型监控,Phoenix能自然地扩展到Agent场景。
面对这么多选项,怎么选?我的建议是按场景决策,而非按流行度决策。
第一步:先问自己三个问题
你的Agent主要是单Agent还是多Agent? 单Agent场景下,OpenAI Agents SDK或LangGraph都够用。多Agent场景下,需要评估CrewAI的角色模型还是LangGraph的显式编排更适合你的控制需求。
你需要多大程度的流程控制? 如果需要精确控制执行步骤(比如审批流、固定顺序),LangGraph的图编排是最佳选择。如果你信任模型自主决策,Agents SDK更简单。
你的数据环境是怎样的? 如果大量依赖文档检索,LlamaIndex有天然优势。如果需要连接企业内部的各类API,重点考察工具生态的丰富度。
第二步:选择主框架,而非堆砌
一个常见的错误是在项目中同时使用多个框架。LangChain的Agent + CrewAI的多Agent + LlamaIndex的RAG——这会造成概念冲突、依赖膨胀和调试噩梦。选一个主框架,深度使用它。
第三步:Harness层单独选型
无论你选哪个编排框架,评估、可观测、部署这些能力可以独立选型。比如用LangGraph做编排 + Langfuse做可观测 + 自建评估集,是一个合理的组合。
框架生态的多样性反映了一个现实:Agent开发还没有“标准答案”。 不同的框架代表了不同团队对“Agent应该如何构建”这一问题的不同回答。理解这些差异,比记住功能清单更有价值。
在下一节中,你将亲手跑通第一个Agent。这个Agent不会使用任何框架——只有OpenAI SDK和一个循环。当这个简单的Agent运行起来时,你会直观地感受到:框架所封装的那些“复杂性”,究竟藏在哪里。