第05章:Agent 智能体 —— 让 AI 自主决策,循环解决问题
本章目标:深入理解 ReAct 推理模式,掌握用create_agent(LangGraph V1.0 起从langchain.agents导入,原名create_react_agent)快速构建 Agent、手动实现 Agent 循环、多工具 Agent 设计,以及 Agent 与 Chain 的选型判断。前期回顾第01章:从零开始调用 LLM-入门 Qwen 大模型 API第02章:Prompt 工程 —— 用语言精准指挥 AI第03章:LCEL 链式调用——让 AI 任务像流水线一样运转第04章:AI Tools 工具调用 —— 让 AI 伸出"手"与世界交互🚀 写给零基础开发者(5分钟读懂 Agent)1.1 什么是 Agent?用一个比喻理解想象你在指挥一个助理完成一项任务:“帮我计划一次北京→上海的出差,整理日程表并发送邮件。”普通程序员(没有 Agent)的做法:步骤1:我写代码查询机票 → 步骤2:我写代码查询酒店 → 步骤3:我手动整合结果 → 步骤4:我写代码发邮件 每一步都要我预先知道做什么,预先写好代码,无法应对变化。有了 Agent 之后:用户说:"帮我计划出差" → Agent 自主决定:先查机票 → 根据机票结果查酒店 → 发现冲突就重新搜索 → 整合信息 → 发邮件 AI 自己决定步骤,自己执行,自己检查,直到完成任务。一句话总结:Agent = 能自主思考 + 主动调用工具 + 循环改进直到完成任务的 AI 助理。1.2 为什么需要 Agent?没有它会有什么问题?❌ 只用 LLM(无 Agent/无工具):能力有限、结果不可信# 纯 LLM 对话,没有工具,没有 Agentfromlangchain_openaiimportChatOpenAI llm=ChatOpenAI(model="qwen-plus",...)# 问题1:实时数据 → LLM 只能猜测response=llm.invoke("今天北京天气怎么样?")# 输出:❌ "今天北京天气晴朗..." (LLM 瞎编的!它根本不知道今天天气)# 问题2:精确计算 → LLM 会出错response=llm.invoke("sqrt(256) × 17 + 2^8 是多少?")# 输出:❌ 可能是 "4352"(大模型数学常出错,无法保证精确)# 问题3:多步骤开放性任务 → LLM 无法真正执行response=llm.invoke("查询一下我公司的最新销售数据,然后生成报表")# 输出:❌ "我无法访问你公司的数据..." (LLM 根本没有工具访问能力)❌ 只用硬编码程序(无 LLM):灵活性极差# 假设你用 if-else 写了一个"智能"助手defsmart_assistant(user_input:str)-str:if"天气"inuser_input:returnquery_weather()# 只能处理天气elif"计算"inuser_input:returndo_calculation()# 只能处理计算else:return"我不理解你的问题"# 稍微变个说法就失败# 用户说:"现在几度?需要带伞吗?"# ❌ 程序不认识"几度"这个词,无法处理# 用户说:"帮我算一下出发前还有几天,然后查一下目的地天气,决定带哪件外套"# ❌ 多步骤任务完全无法处理(需要先算日期,再查天气,再决策)✅ LLM + Agent:两者优点结合用户输入 → LLM 理解意图(自然语言理解) → Agent 自主决定调用哪些工具 → 工具执行真实操作(精确、实时) → LLM 分析结果、决定下一步 → 循环直到完成任务 → 输出可信的最终答案总结对比表:维度只用 LLM只用代码LLM + Agent自然语言理解✅ 强❌ 弱✅ 强实时数据获取❌ 不支持✅ 支持✅ 支持精确计算⚠️ 不可靠✅ 精确✅ 精确处理未知任务⚠️ 有限❌ 需重写代码✅ 自动路由多步骤动态任务❌ 无法规划❌ 需预先设计✅ 自主规划适应语言变化✅ 强❌ 弱✅ 强错误自我修复❌ 不支持❌ 不支持✅ 支持1.3 什么场景该用 Agent?(4题自测)遇到以下问题,答"是"就需要 Agent:❓ 任务完成的步骤数是不确定的吗?(比如:可能需要 2 步,也可能需要 5 步)❓ 任务需要访问实时数据(天气、股价、数据库)吗?❓ 任务需要自主决策(根据上一步结果决定下一步)吗?❓ 任务可能需要在失败后自动重试或换一种方式吗?答了 2 个以上"是" → 考虑使用 Agent是,固定步骤否,动态决定否,纯文本处理是,需要工具否,固定顺序是,动态规划用户任务步骤是否预先确定?用 Chain需要外部工具?用 Chain步骤数不确定?用 Chain + Tools用 Agent ✅1.4 典型 Agent 使用场景场景举例为什么用 Agent数据分析助手“分析过去一年的销售数据,找出下滑原因”步骤不确定:可能需要多次查询、比对智能客服“查询订单状态,计算退款,发通知”多系统工具调用,顺序动态决定代码助手“写一个函数,测试,如有错误修复”需要执行→观察→改进的循环研究助手“调研竞品,总结优缺点,写报告”搜索→阅读→分析→撰写,步骤不固定任务规划“安排下周出差行程,订机票酒店”多工具、多决策、条件判断数据管道“从数据库取数,清洗,存到新表”需要根据数据质量动态调整清洗步骤不适合 Agent 的场景:固定格式的文本生成(用 Chain 更快更稳定)单次查询问答(直接用 LLM 即可)确定步骤的工作流(用 Chain + Tools)一、什么是 Agent?和 Chain 有什么区别?在第03章,我们学了 Chain:预先定义好执行步骤,输入进来,按固定顺序走完所有步骤,输出结果。Chain 很适合确定性任务(如:翻译→润色→输出),但面对开放性问题就力不从心了。Agent(智能体)则完全不同:Chain:你决定执行哪些步骤,执行几次Agent:LLM决定执行哪些步骤,执行几次,何时停止Agent(自主决策循环)是任务完成