零基础学AI大模型之旅游规划智能体之react_agent实战

零基础学AI大模型之旅游规划智能体之react_agent实战
大家好,我是工藤学编程 🦉一个正在努力学习的小博主,期待你的关注
实战代码系列最新文章😉C++实现图书管理系统(Qt C++ GUI界面版)
SpringBoot实战系列🐷【SpringBoot实战系列】SpringBoot3.X 整合 MinIO 存储原生方案
分库分表分库分表之实战-sharding-JDBC分库分表执行流程原理剖析
消息队列深入浅出 RabbitMQ-RabbitMQ消息确认机制(ACK)
AI大模型零基础学AI大模型之个人助理智能体之tool_calling_agent实战

前情摘要

1、零基础学AI大模型之读懂AI大模型
2、零基础学AI大模型之从0到1调用大模型API
3、零基础学AI大模型之SpringAI
4、零基础学AI大模型之AI大模型常见概念
5、零基础学AI大模型之大模型私有化部署全指南
6、零基础学AI大模型之AI大模型可视化界面
7、零基础学AI大模型之LangChain
8、零基础学AI大模型之LangChain六大核心模块与大模型IO交互链路
9、零基础学AI大模型之Prompt提示词工程
10、零基础学AI大模型之LangChain-PromptTemplate
11、零基础学AI大模型之ChatModel聊天模型与ChatPromptTemplate实战
12、零基础学AI大模型之LangChain链
13、零基础学AI大模型之Stream流式输出实战
14、零基础学AI大模型之LangChain Output Parser
15、零基础学AI大模型之解析器PydanticOutputParser
16、零基础学AI大模型之大模型的“幻觉”
17、零基础学AI大模型之RAG技术
18、零基础学AI大模型之RAG系统链路解析与Document Loaders多案例实战
19、零基础学AI大模型之LangChain PyPDFLoader实战与PDF图片提取全解析
20、零基础学AI大模型之LangChain WebBaseLoader与Docx2txtLoader实战
21、零基础学AI大模型之RAG系统链路构建:文档切割转换全解析
22、零基础学AI大模型之LangChain 文本分割器实战:CharacterTextSplitter 与 RecursiveCharacterTextSplitter 全解析
23、零基础学AI大模型之Embedding与LLM大模型对比全解析
24、零基础学AI大模型之LangChain Embedding框架全解析
25、零基础学AI大模型之嵌入模型性能优化
26、零基础学AI大模型之向量数据库介绍与技术选型思考
27、零基础学AI大模型之Milvus向量数据库全解析
28、零基础学AI大模型之Milvus核心:分区-分片-段结构全解+最佳实践
29、零基础学AI大模型之Milvus部署架构选型+Linux实战:Docker一键部署+WebUI使用
30、零基础学AI大模型之Milvus实战:Attu可视化安装+Python整合全案例
31、零基础学AI大模型之Milvus索引实战
32、零基础学AI大模型之Milvus DML实战
33、零基础学AI大模型之Milvus向量Search查询综合案例实战
33、零基础学AI大模型之新版LangChain向量数据库VectorStore设计全解析
34、零基础学AI大模型之相似度Search与MMR最大边界相关搜索实战
35、零基础学AI大模型之LangChain整合Milvus:新增与删除数据实战
36、零基础学AI大模型之LangChain+Milvus实战:相似性搜索与MMR多样化检索全解析
37、零基础学AI大模型之LangChain Retriever
38、零基础学AI大模型之MultiQueryRetriever多查询检索全解析
39、零基础学AI大模型之LangChain核心:Runnable接口底层实现
40、零基础学AI大模型之RunnablePassthrough
41、零基础学AI大模型之RunnableParallel
42、零基础学AI大模型之RunnableLambda
43、零基础学AI大模型之RunnableBranch
44、零基础学AI大模型之Agent智能体
45、零基础学AI大模型之LangChain Tool工具
46、零基础学AI大模型之LLM绑定Tool工具实战
47、零基础学AI大模型之LangChain Tool异常处理
48、零基础学AI大模型之CoT思维链和ReAct推理行动
49、零基础学AI大模型之Zero-Shot和Few-Shot
50、零基础学AI大模型之LangChain智能体执行引擎AgentExecutor
51、零基础学AI大模型之个人助理智能体之tool_calling_agent实战


本文章目录

零基础学AI大模型之旅游规划智能体之react_agent实战

一、为什么需要ReAct智能体?复杂任务的“推理刚需”

之前学的initialize_agent适合简单任务,create_tool_calling_agent擅长结构化参数传递,但面对需要多步推理的复杂任务(比如旅游规划),它们就显得力不从心:

  • 无法清晰拆解任务(比如“查天气→荐活动→查股价”需要分步执行)
  • 遇到错误不会自我修正(比如工具调用失败后不知道重试)
  • 思考过程不透明(调试时看不到智能体“为什么这么做”)

而基于ReAct框架的create_react_agent,完美解决了这些问题——它让智能体像人一样“边想边做”,通过“推理→行动→观察”的循环,一步步拆解并完成复杂任务,特别适合旅游规划这类需要动态决策的场景。

二、ReAct框架核心:推理+行动+观察

在这里插入图片描述

ReAct(Reasoning + Acting)是一种让智能体具备“思考能力”的设计模式,核心是通过循环迭代完成任务,每一轮都包含三个步骤:

2.1 三步循环流程

步骤核心动作示例(旅游规划场景)
推理(Reason)分析当前状态,决定下一步“该做什么”(调用工具/直接回答)“要推荐活动,得先查北京天气,所以调用get_weather工具”
行动(Act)执行决策(调用指定工具,传入正确参数)调用get_weather,输入参数“北京”
观察(Observe)获取行动结果,更新状态,判断是否需要进入下一轮循环得到天气“晴,25℃”,接下来需要调用推荐活动工具

2.2 标准格式示例

ReAct智能体的思考和行动有固定格式,一眼就能看懂它的“心路历程”:

[Thought] 我需要先查北京的天气,才能推荐活动,还要查腾讯股价 [Action] get_weather [Action Input] 北京 [Observation] 晴,25℃ [Thought] 天气是晴,适合推荐户外活动,现在调用推荐工具 [Action] recommend_activity [Action Input] 晴,25℃ [Observation] 推荐户外活动:公园骑⾏。 [Thought] 还需要查腾讯股价,用web_search工具 [Action] web_search [Action Input] 腾讯最新股价 [Observation] 来源:XX财经... 腾讯股价412港元... [Thought] 所有任务都完成了,可以整理结果 [Final Answer] 北京天气晴25℃,推荐公园骑⾏;腾讯最新股价412港元 

三、create_react_agent方法详解

create_react_agent是LangChain专门用于创建ReAct框架智能体的方法,专为复杂推理任务设计。

3.1 基础语法

from langchain.agents import create_react_agent agent = create_react_agent( llm: BaseLanguageModel,# 支持ReAct格式的大模型 tools: Sequence[BaseTool],# 工具列表(需详细文档字符串) prompt: ChatPromptTemplate # 包含ReAct特殊格式的提示模板)-> Runnable # 返回可直接调用的智能体

3.2 三大必填参数

三个参数缺一不可,重点关注细节要求:

  • llm:必须支持ReAct推理格式,比如qwen-plus、gpt-4、llama-3等,旧版模型可能不兼容
  • tools:用@tool装饰的工具,每个工具的文档字符串要清晰(智能体靠文档判断“什么时候用”)
  • prompt:核心中的核心,必须包含ReAct的固定格式(Thought/Action/Action Input/Observation)

3.3 关键:ReAct Prompt模板

3.3.1 快速使用官方模板

LangChain Hub提供了现成的ReAct模板,直接拉取即可使用:

from langchain import hub # 拉取官方ReAct模板(推荐,无需自己写格式) prompt = hub.pull("hwchase17/react")

3.3.2 模板核心内容解析

官方模板的核心逻辑如下(理解即可,无需修改):

template =""" Answer the following questions using the following tools: {tools} # 注入工具列表 Use the following format: Question: the input question you must answer # 用户输入问题 Thought: you should always think about what to do # 每次都要写的思考过程 Action: the action to take, should be one of [{tool_names}] # 要调用的工具名(必须在工具列表中) Action Input: the input to the action # 工具的输入参数 Observation: the result of the action # 工具返回的结果 ...(可以重复Thought/Action/Action Input/Observation循环) Thought: I now know the final answer # 完成所有步骤后,表明可以输出最终结果 Final Answer: the final answer to the original input question # 最终回复用户的内容 """

四、智能体创建方法对比选型

面对三个常用智能体创建方法,该怎么选?记住“场景匹配”原则:

场景特征推荐方法原因说明
需要多步推理(如旅游规划)create_react_agent显式思考链,支持分步拆解任务
严格结构化参数传递create_tool_calling_agent直接输出JSON参数,解析错误率极低
快速开发简单任务initialize_agent开箱即用,无需复杂配置
错误后需要自我修正create_react_agent可重新推理,调整行动方案
需调试(看思考过程)create_react_agent思考链透明,易定位问题
API集成(如支付、天气)create_tool_calling_agent参数格式严格,适配API需求

五、实战:打造旅游规划智能体

在这里插入图片描述

本次实战开发一个能完成“查城市天气→根据天气推荐活动→查实时股价”的旅游规划智能体,全程体验ReAct的“推理+行动”流程。

5.1 环境准备

确保安装所需依赖,拉取官方ReAct模板需要LangChain Hub权限(注册即可):

pip install -U langchain langchain-openai langchain-community langchain-hub 

5.2 步骤1:定义工具(Tool)

创建3个核心工具,文档字符串要详细——ReAct智能体全靠文档判断工具用途:

import os from langchain.tools import tool from langchain_community.utilities import SearchApiAPIWrapper # ---------------------- 工具1:获取城市天气 ----------------------@tooldefget_weather(city:str)->str:""" 获取指定城市的天气信息,用于旅游活动推荐。 参数:city - 城市名称(如北京、上海、广州) """# 模拟天气数据(实际场景可替换为真实天气API) weather_data ={"北京":"晴,25℃","上海":"雨,20℃","广州":"多云,28℃","深圳":"晴,26℃"}return weather_data.get(city,f"暂不支持查询{city}的天气")# ---------------------- 工具2:根据天气推荐活动 ----------------------@tooldefrecommend_activity(weather:str)->str:""" 根据天气信息推荐适合的旅游活动,必须先调用get_weather获取天气。 参数:weather - get_weather工具返回的天气字符串(如“晴,25℃”) """if"雨"in weather:return"推荐室内活动:博物馆参观、文创店打卡、特色美食探店"elif"晴"in weather:return"推荐户外活动:公园骑⾏、长城徒步、城市天际线拍照"elif"多云"in weather:return"推荐通用活动:老街漫游、主题乐园游玩、非遗体验"else:return"推荐灵活活动:根据现场天气调整行程"# ---------------------- 工具3:网页搜索(查实时股价) ----------------------# 配置SearchApi密钥(需注册:https://www.searchapi.io/) os.environ["SEARCHAPI_API_KEY"]="xxx"@tool("web_search")defweb_search(query:str)->str:""" 获取实时信息、最新事件(如股价、新闻)时使用,输入为搜索关键词。 """try: search = SearchApiAPIWrapper() results = search.results(query)# 获取前2条搜索结果return"\n\n".join([f"来源:{res['title']}\n内容:{res['snippet']}"for res in results['organic_results'][:2]])except Exception as e:returnf"搜索失败:{str(e)}"# 整理工具列表 tools =[get_weather, recommend_activity, web_search]

5.3 步骤2:初始化大模型

使用支持ReAct的大模型(这里用通义千问qwen-plus):

from langchain_openai import ChatOpenAI llm = ChatOpenAI( model_name="qwen-plus", base_url="https://dashscope.aliyuncs.com/compatible-mode/v1", api_key="sk-xxx",# 替换为自己的密钥 temperature=0.3# 降低随机性,提升推理稳定性)

5.4 步骤3:获取ReAct Prompt模板

直接拉取官方模板,避免自己写格式出错:

from langchain import hub # 拉取官方ReAct提示模板(核心:包含Thought/Action等固定格式) prompt = hub.pull("hwchase17/react")

5.5 步骤4:创建ReAct智能体和执行器

create_react_agent创建智能体,再用AgentExecutor包装(负责运行循环):

from langchain.agents import AgentExecutor # 创建ReAct智能体 agent = create_react_agent( llm=llm, tools=tools, prompt=prompt )# 创建智能体执行器(控制运行参数) agent_executor = AgentExecutor( agent=agent, tools=tools, verbose=True,# 显示思考和行动过程(调试必备) max_iterations=5,# 最大循环次数(防止无限循环) handle_parsing_errors="请检查输入格式,确保问题清晰",# 错误处理 return_intermediate_steps=True# 返回中间推理步骤)

5.6 步骤5:测试旅游规划任务

让智能体完成“北京3天旅游规划:查天气荐活动+查腾讯股价”的复杂任务:

# 发起用户查询 response = agent_executor.invoke({"input":"我要去北京玩3天,根据天气推荐活动,顺便查下腾讯最新股价"})# 打印最终结果print("\n"+"="*80)print("旅游规划智能体最终回复:")print(response["output"])

六、运行结果与解读

6.1 完整运行日志(关键部分)

> Entering new AgentExecutor chain... Thought: I need to answer the user's question which has two parts: recommend activities based on Beijing's weather and check Tencent's latest stock price. First, I should get Beijing's weather using the get_weather tool. Action: get_weather Action Input: 北京 Observation: 晴,25℃ Thought: Now I have Beijing's weather, which is sunny and 25℃. Next, I should use the recommend_activity tool to suggest suitable activities. Action: recommend_activity Action Input: 晴,25℃ Observation: 推荐户外活动:公园骑⾏、长城徒步、城市天际线拍照 Thought: Now I need to check Tencent's latest stock price, which requires real-time information, so I should use the web_search tool. Action: web_search Action Input: 腾讯最新股价 Observation: 来源:腾讯控股股价行情-东方财富网 内容:腾讯控股(00700.HK)最新价412.00港元,涨跌幅+1.52%... Thought: I now know the final answer Final Answer: 北京3天旅游规划建议: 1. 天气情况:晴,25℃ 2. 推荐活动:公园骑⾏、长城徒步、城市天际线拍照 3. 腾讯最新股价:腾讯控股(00700.HK)最新价412.00港元,涨跌幅+1.52% 

6.2 结果解读

在这里插入图片描述
  • 推理清晰:智能体按“查天气→荐活动→查股价”的顺序拆解任务,每一步都有明确的思考过程
  • 循环执行:通过3轮“Thought→Action→Observation”循环完成任务,符合ReAct框架
  • 透明可调试:verbose模式下能看到完整思考链,出问题时能快速定位是哪一步出错

七、实战注意事项

  1. 大模型必须支持ReAct:如果用不支持的模型(如gpt-3.5-turbo-0301),会出现“不会循环推理”的问题,优先选qwen-plus、gpt-4、llama-3-70b等
  2. 工具文档要“精准”:智能体靠文档判断工具用途,比如recommend_activity的文档写“必须先调用get_weather”,智能体就会按顺序调用
  3. 控制循环次数:设置max_iterations(建议3-5次),防止智能体陷入无限循环
  4. 官方模板优先用:自己写ReAct格式容易漏项,优先用hub.pull("hwchase17/react")
  5. 调试靠verbose:遇到工具调用错误时,打开verbose=True,看智能体的“Thought”就能知道它“为什么这么做”

八、总结

create_react_agent的核心价值是让智能体具备“边想边做”的推理能力,通过ReAct框架的“推理→行动→观察”循环,完美解决复杂任务的分步拆解问题——这正是旅游规划、复杂问答等场景所需要的。

本次实战我们掌握了:

  • ReAct框架的三大核心步骤(推理、行动、观察)
  • create_react_agent的参数配置(重点是ReAct Prompt模板)
  • 旅游规划智能体的完整开发流程
  • 三种智能体创建方法的选型技巧
有任何问题欢迎在评论区留言,喜欢就点赞、关注、收藏吧!

Read more

LazyLLM 测评 | 低代码颠覆 AI 开发!代码专家智能体进阶模块实战

LazyLLM 测评 | 低代码颠覆 AI 开发!代码专家智能体进阶模块实战

摘要: LazyLLM 是商汤大装置推出的开源低代码框架,作为构建和优化多 Agent 应用的一站式开发框架,覆盖应用搭建、数据准备、模型部署、微调、评测等全流程开发环节,提供丰富的工具支持。其以模块化设计打破传统开发壁垒,通过数据流驱动重构开发逻辑,能让开发者用极简代码实现工业级复杂 AI 应用,摆脱冗余编码束缚,聚焦核心业务场景,降低 AI 应用构建成本并支持持续迭代优化。堪称 AI 开发者的 “效率神器”,其技术普惠理念为 AI 开发领域带来新的实践范式,推动了更高效的开发模式。本文将以Python编程为切入点,带你深入了解LazyLLM框架。 LazyLLM 是构建和优化多 Agent 应用的一站式开发工具,为应用开发过程中的全部环节(包括应用搭建、数据准备、模型部署、模型微调、评测等)提供了大量的工具,协助开发者用极低的成本构建 AI 应用,并可以持续地迭代优化效果。 LazyLLM作为商汤大装置推出的开源低代码框架,简直是AI开发者的“效率神器”

【论文阅读】Vision-skeleton dual-modality framework for generalizable assessment of Parkinson’s disease ga

【论文阅读】Vision-skeleton dual-modality framework for generalizable assessment of Parkinson’s disease ga

论文题目:《Vision-skeleton dual-modality framework for generalizable assessment of Parkinson’s disease gait》 论文链接:https://doi.org/10.1016/j.media.2025.103727  代码链接:https://github.com/FJNU-LWP/PD-gait-VSDF 视觉-骨架双模态框架:通过视频实现帕金森病步态的泛化评估 研究背景介绍 帕金森病评估与帕金森病评分量表(MDS-UPDRS) 帕金森病步态评估 研究内容 总体方法流程 关键点视觉 Transformer (KVT) 图像块嵌入 (Patches embedding) 位置与连接嵌入 (Positions and connections embedding) 关键点自注意力 (Keypoints Self-Attention,

组建龙虾团队——OpenClaw多机器人构建

组建龙虾团队——OpenClaw多机器人构建

成功搭建了OpenClaw,也成功建立的自己的每日服务,这时候发现,似乎不太敢在当前的机器人中让他做别的事情,生怕会话太多会让他出现遗忘。(尽管我们配置了QMD记忆增强,但毋庸置疑任何技术都是有上限的)。 换做同样的情况,比如在DeepSeek或者豆包之类的对话窗口,我们会习惯性地新建一个对话。那么我们是否可以新建一个机器人,或者多个机器人,让他们各司其职,各尽所能,形成一个相互配合的团队呢~开干吧,没什么不可能的!! 🦞新建一个机器人 来到飞书开发者后台,新创建一个应用,在这里我们以短视频剪辑脚本应用为例。 创建之后,由于我们的openclaw绑定的是之前的飞书渠道,并没有链接到这个应用的APP ID,所以暂时不做其他操作,只需要记录一下他的APP ID和APP Secret。 🦞配置OpenClaw 如果还是按照claw的命令行安装,每一步都有些让人担心害怕,毕竟我们先前已经配置过一次了,接下来的操作,需要小心是否会把以前的配置给覆盖掉。 为了避免这样的不确定性,我们直接去操作他的配置文件 在WSL2终端中进入openclaw目录 cd .openclaw

从0到1打造RISC-V智能家居中控:硬件+固件+通信全链路实战

从0到1打造RISC-V智能家居中控:硬件+固件+通信全链路实战

👋 大家好,欢迎来到我的技术博客! 📚 在这里,我会分享学习笔记、实战经验与技术思考,力求用简单的方式讲清楚复杂的问题。 🌱 无论你是刚入门的新手,还是正在进阶的开发者,希望你都能有所收获! 文章目录 * 从0到1打造RISC-V智能家居中控:硬件+固件+通信全链路实战 🏠💡 * 为什么选择RISC-V?🤔 * 系统整体架构概览 🧩 * 第一步:硬件选型与电路搭建 🔌 * 主控芯片选择 * 外设连接 * 第二步:开发环境搭建 🛠️ * 安装步骤(以Ubuntu为例) * 第三步:裸机驱动开发(Bare Metal)⚡ * 示例1:DHT11温湿度读取(Bit-banging) * 示例2:BH1750光照传感器(I2C) * 第四步:引入FreeRTOS实现多任务调度 🔄 * 第五步:Wi-Fi连接与MQTT通信 ☁️📡 * 连接Wi-Fi * MQTT客户端(使用esp-mqtt库) * 第六步:BLE本地控制(无需Wi-Fi)📱