欢迎来到《Python + AI Agent 实战开发完全指南》专栏!
在上一讲中,我们用原生 Python 手搓了一个基础的 Agent。但在真实的工程落地中,如果所有的意图识别、工具解析、状态流转都由我们自己手写,不仅开发效率低,还容易遇到各种边界 Bug。因此,引入成熟的开源框架成为了必然选择。
目前市面上的 Agent 框架百花齐放,对于新手和企业开发者来说,最大的痛点就是:“不知道该怎么选”。今天我们就来深度剖析当前主流的几款 Agent 框架,帮你避开选型陷阱,找到最适合你的技术路线。
️ 一、 核心框架全景图:谁才是你的“天菜”?
1. LangChain:生态最全的“瑞士军刀”
- 定位:最流行的大模型应用开发框架,拥有极其庞大的插件生态(文档加载器、各类向量数据库集成等)。
- 优势:开箱即用,社区庞大,遇到问题几乎都能搜到答案;支持绝大多数主流大模型。
- 劣势:抽象层级过高,经常“过度封装”。当你需要修改底层逻辑时,往往像在黑盒里找东西一样痛苦。
- 适用场景:快速搭建原型、简单的 RAG(检索增强生成)问答系统、标准单步工具调用。
2. LangGraph:复杂工作流的“精密齿轮” ️
- 定位:LangChain 团队推出的进阶框架,专为解决 LangChain 无法处理的复杂循环和状态管理而生。
- 核心亮点:基于有向无环图(DAG)理念,将 Agent 的执行过程抽象为节点(Nodes)和边(Edges)。它原生支持循环边,这意味着你可以轻松实现多轮对话回溯、条件分支跳转以及人工审核节点。
- 劣势:学习曲线陡峭,需要手动定义严格的状态模式(如 TypedDict),代码编写相对繁琐。
- 适用场景:金融风控分析、医疗诊断辅助等对流程可控性、可审计追踪要求极高的企业级复杂任务。
3. AutoGen & CrewAI:多智能体协作的“虚拟公司”
- CrewAI:主打“低代码/提示词驱动”。你只需要通过提示词设定不同的角色(如研究员、写手、主编),就能在 10 分钟内搭出一个多 Agent 协作流。非常适合做演示 Demo。但它的缺点是不适合高并发场景,且底层黑盒较重。
- AutoGen (微软出品):以动态代码沙箱和人机协同接口著称。它将多智能体系统抽象为一个群聊,Agent 之间可以互相发消息,并且可以在安全的沙箱环境中实时执行 Python 代码进行调试。
- 适用场景:自动化软件开发团队、复杂的跨部门业务流转、需要实时调试的科研数据分析。
4. PydanticAI & OpenAI Swarm:特定领域的“特种兵”
- PydanticAI:专注于类型安全和结构化输出。如果你的业务要求 Agent 必须返回严格的 JSON 格式(如对接下游 API),它能利用 Pydantic 保证数据校验,防止运行时错误。
- OpenAI Swarm:极简的多智能体协调框架,主打轻量级的交接模式,适合处理简单的多智能体路由分发。
二、 选型指南:从四个维度评估你的需求
不要盲目追求最新或最火的框架,建议结合以下四个核心维度进行评估:
| 考量维度 | 核心关注点 | 选型建议 |
|---|---|---|
| 任务复杂度 | 是否需要分支、循环、多步推理? | 简单任务用 LangChain;复杂状态流转必选 LangGraph。 |
| 可控性与可观测性 | 能否清晰追踪每一步决策? | 涉及资金或敏感数据的业务,优先选择能记录完整轨迹的框架。 |
| 多Agent协作 | 是否需要角色分工、任务分配? | 快速验证选 CrewAI;重度代码交互选 AutoGen。 |
| Token成本 | 自治度越高,冗余调用越多 | 生产环境需考虑 Token 消耗,避免不必要的反思循环。 |
三、 实战演练:用原生 Python 理解 Tool Calling 机制
为了让你不被框架的“魔法”迷惑,我们继续采用原生 Python,带你手写一段标准的工具注册与分发逻辑。这也是所有高级框架(如 LangChain)底层的运行原理。
importjson# ========== 1. 模拟大模型的 Function Calling 响应 ==========# 在实际开发中,这个字典是由 LLM API 返回的 JSON 结构llm_response={"tool_calls":[{"id":"call_abc123","function":{"name":"get_weather","arguments":"{\"city\": \"北京\", \"date\": \"2026-06-08\"}"}}]}# ========== 2. 定义真实可调用的工具函数 ==========defget_weather(city:str,date:str)->str:"""查询天气的实际业务逻辑"""returnf"{city}在{date}的天气为晴,气温28℃"# ========== 3. 构建安全可靠的工具分发器 ==========TOOL_MAP={"get_weather":get_weather}defexecute_tool_calls(llm_response:dict)->list[dict]:""" 解析大模型的意图并安全执行 """results=[]ifnotllm_response.get("tool_calls"):returnresultsfortool_callinllm_response["tool_calls"]:func_name=tool_call["function"]["name"]# 安全地将字符串参数解析为字典try:func_args=json.loads(tool_call["function"]["arguments"])exceptjson.JSONDecodeError:results.append({"error":"参数解析失败"})continue# 匹配并执行工具iffunc_nameinTOOL_MAP:result=TOOL_MAP[func_name](**func_args)results.append({"tool_call_id":tool_call["id"],"result":result})else:results.append({"error":f"未知工具:{func_name}"})returnresults# 测试执行if__name__=="__main__":execution_results=execute_tool_calls(llm_response)print(json.dumps(execution_results,ensure_ascii=False,indent=2))本节小结
今天我们理清了主流框架的定位:LangChain 适合快速起步,LangGraph 掌控复杂状态,CrewAI/AutoGen 玩转多智能体。同时,通过手写的execute_tool_calls函数,你应该已经明白了 Agent 是如何把大模型的“自然语言意图”转化为“真实代码执行”的。
下一讲,我们将正式接入大模型 API,让这套原生的工具分发系统真正“活”起来,跑通第一个具备自主规划能力的 ReAct Agent!准备好迎接真正的智能了吗?