首页/新闻资讯/正文详情

番外A2-用LangChain框架实现ReAct Agent

发布时间:2026/9/28 3:06:02 来源:云帆数科 栏目:资讯中心
番外A2-用LangChain框架实现ReAct Agent
文章目录项目概述Agent与链的区别工具与工具包Agent的武器库今天要聊什么项目结构核心文件说明1. 工具定义 - tools.py tool装饰器怎么用工具说明2. Agent配置 - agent.py ⚙️ReAct Prompt模板Prompt占位符说明Agent创建函数配置说明ReAct模式到底怎么工作3. 入口程序 - main.py 运行示例环境要求安装依赖配置环境变量扩展示例查询其他水果价格复杂计算扩展建议 工具扩展Agent优化文档信息创建时间2026-01-22作者zuozewei功能使用LangChain框架实现ReAct Agent技术栈Python、LangChain、OpenAI API、DeepSeek源代码https://github.com/zuozewei/blog-example/tree/master/AI-LLM项目概述这是一个使用LangChain框架实现ReAct Agent的完整示例项目展示如何创建能够调用工具的智能Agent。Agent可以处理需要多步骤推理和工具调用的复杂问题。Agent与链的区别Agent和链最大的区别在于执行方式。链是线性的一步接一步走完就结束而Agent是动态的它会根据执行结果自己决定下一步该干什么。这就需要AgentExecutor来负责循环调度让大模型不断思考、行动、观察直到得出最终答案。这种机制让Agent能处理更复杂的任务自主决策、动态调整执行路径。工具与工具包Agent的武器库在Agent的架构中工具Tool和工具包Toolkit是核心概念工具Tool负责与模型交互其输入由模型产生输出会回传给模型。工具是Agent执行具体任务的载体。工具包Toolkit一组相关的工具集合提供特定领域的完整解决方案。开发一个Agent很多时候就是在开发工具和集成工具。学习编写工具是构建基于LangChain的Agent的关键点。LangChain社区提供了大量的工具可以用它们来改造代码实现新的Agent。今天要聊什么最近在项目中用LangChain搭了个Agent踩了不少坑也总结了一些经验。这篇文章会带你从零开始实现一个ReAct Agent重点分享工具的定义和使用 - 使用tool装饰器将普通函数转换为Agent可调用的工具提示词的构建 - 设计ReAct模式的Prompt模板指导Agent的推理过程Agent的组装 - 集成工具和LLM创建完整的Agent执行器Agent的执行过程 - 通过示例展示Agent如何询问水果单价、计算总价等具体步骤AgentExecutor的作用 - 介绍如何使用执行器来运行Agent并输出结果项目结构使用LangChain框架实现ReAct Agent/ ├── tools.py # 工具定义 ├── agent.py # Agent配置 ├── main.py # 入口程序 └── .env # 环境变量配置核心文件说明1. 工具定义 - tools.py 使用LangChain的tool装饰器将普通函数转换为Agent可调用的工具。fromlangchain_core.toolsimporttooltooldefcalculate(expression:str)-float:执行计算并返回结果 - 使用 Python 语法,必要时请使用浮点数语法returneval(expression)tooldefask_fruit_unit_price(fruit:str)-str:询问水果的价格fruitfruit.strip()iffruit.casefold()in[apple,苹果]:return苹果单价是 10元/公斤iffruit.casefold()in[banana,香蕉]:return香蕉单价是 6元/公斤returnf{fruit}单价是 20元/公斤tool装饰器怎么用tool装饰器会自动把函数转换成Agent能识别的工具函数名→ 工具名称建议用英文方便模型理解Docstring→ 工具描述这里很关键模型靠这个判断什么时候用哪个工具参数类型注解→ 工具参数schema一定要写对否则模型传参会报错⚠️踩坑提醒Docstring写得太模糊会导致模型乱用工具比如计算函数就不如执行数学表达式计算准确。工具说明calculate: 执行数学表达式计算使用Python的eval机制安全警告生产环境千万别直接用eval这里只是演示用。实际项目建议用ast.literal_eval或者专门的数学表达式解析库否则会被注入恶意代码。ask_fruit_unit_price: 查询水果单价支持中英文水果名称apple/苹果、banana/香蕉其他水果默认价格为20元/公斤2. Agent配置 - agent.py ⚙️使用LangChain框架创建ReAct模式的Agent执行器集成自定义工具并配置LLM参数。importosimportdotenvfromlangchain.agentsimportAgentExecutor,create_react_agentfromlangchain_core.promptsimportPromptTemplatefromlangchain_openaiimportChatOpenAIfromtoolsimportcalculate,ask_fruit_unit_priceReAct Prompt模板promptPromptTemplate.from_template(Answer the following questions as best you can. You have access to 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 ... (this Thought/Action/Action Input/Observation can repeat N times) Thought: I now know the final answer Final Answer: the final answer to the original input question Begin! Question: {input} Thought:{agent_scratchpad})Prompt占位符说明{tools}: 可用工具列表及其描述{tool_names}: 工具名称列表{input}: 用户输入的问题{agent_scratchpad}: 存储推理历史Thought/Action/Observation序列Agent创建函数defcreate_agent()-AgentExecutor:创建ReAct Agent执行器dotenv.load_dotenv()llmChatOpenAI(openai_api_keyos.getenv(OPENAI_API_KEY),openai_api_baseos.getenv(OPENAI_API_BASE),modelos.getenv(AI_MODEL,deepseek-chat),temperature0.1,# 推理场景使用低temperature保证确定性)tools[calculate,ask_fruit_unit_price]agentcreate_react_agent(llmllm,toolstools,promptprompt)returnAgentExecutor(agentagent,toolstools,verboseTrue# 打印详细执行过程)配置说明LLM参数配置temperature0.1: 推理任务一定要用低温度我试过用0.7模型有时候会瞎猜工具导致循环次数暴涨。建议0-0.2之间model: 默认用deepseek-chat性价比不错。如果你追求效果可以换GPT-4但成本会高10倍以上max_tokens: 建议设个上限防止模型陷入死循环疯狂输出我遇到过一次跑了5000 tokens的情况…成本优化每次Agent调用都会消耗不少tokens建议先在本地用小模型测试确认逻辑没问题再上生产。AgentExecutor参数agent: ReAct Agent实例tools: 工具列表verboseTrue: 打印详细执行过程便于调试生产环境建议关闭ReAct模式到底怎么工作ReActReasoning Acting说白了就是让模型边想边做。举个例子问它3公斤苹果和2公斤香蕉多少钱它会这么思考Thought: 我得先查苹果和香蕉的单价Action: 调用ask_fruit_unit_price工具Action Input: 苹果Observation: 苹果单价是10元/公斤Thought: 现在查香蕉价格Action: 调用ask_fruit_unit_price工具Action Input: 香蕉Observation: 香蕉单价是6元/公斤Thought: 知道价格了现在计算总价Action: 调用calculate工具Action Input: 3 * 10 2 * 6Observation: 42Thought: 算出来了可以回答了Final Answer: 总共42元这个过程会一直循环直到模型觉得我知道答案了才停止。3. 入口程序 - main.py fromagentimportcreate_agentif__name____main__:# 创建Agentagentcreate_agent()# 执行Agentresultagent.invoke({input:3公斤苹果和2公斤香蕉的总价格是多少?})# 打印结果print(result)运行示例执行程序后输出如下Entering new AgentExecutor chain... 我需要计算总价格。首先我应该找到苹果和香蕉的单价。 Thought: 我需要找到苹果的单价 Action: ask_fruit_unit_price Action Input: 苹果 Observation: 苹果单价是10元/公斤 Thought: 现在我需要找到香蕉的单价 Action: ask_fruit_unit_price Action Input: 香蕉 Observation: 香蕉单价是6元/公斤 Thought: 我已经知道了两种水果的价格。苹果是10元/公斤香蕉是6元/公斤。现在我需要计算总成本3公斤苹果和2公斤香蕉。 Action: calculate Action Input:3*102*6Observation:42Thought: 我现在知道最终答案了 Final Answer:3公斤苹果和2公斤香蕉的总价格是42元。Finished chain.{input:3公斤苹果和2公斤香蕉的总价格是多少?,output:3公斤苹果和2公斤香蕉的总价格是42元。}环境要求Python 3.8LangChainOpenAI API Key或兼容的API如DeepSeek安装依赖pipinstalllangchain langchain-openai langchain-core python-dotenv配置环境变量创建.env文件OPENAI_API_KEYyour_api_key_hereOPENAI_API_BASEhttps://api.deepseek.com/v1# 或其他兼容的API端点AI_MODELdeepseek-chat扩展示例查询其他水果价格resultagent.invoke({input:5公斤橙子多少钱?})复杂计算resultagent.invoke({input:如果我买2公斤苹果和3公斤香蕉,并且有10%的折扣,我需要付多少钱?})扩展建议 工具扩展添加输入验证防止eval执行危险代码实现更多实用工具搜索、API调用、文件操作等添加工具使用日志和错误处理Agent优化调整Prompt模板优化Agent推理能力添加更多工具扩展Agent能力范围实现自定义Agent类型满足特定需求添加回调函数监控Agent执行过程评论区聊聊你在项目中用过Agent吗遇到过什么坑课后挑战试着给Agent加一个汇率查询工具让它能计算美元换人民币

相关推荐

Open CoDesign 品牌参考实战:用 DESIGN.md 复刻 Spotify 风格的设计系统
Open CoDesign 品牌参考实战:用 DESIGN.md 复刻 Spotify 风格的设计系统

人工智能AI 应用桌面应用 【免费下载链接】open-codesign Open-source Claude Design alternative. One-click import your Claude Code / Codex API key. Prompt → prototype / slides / PDF. Multi-model (Claude, GPT, Gemini, Kimi, GLM, Ollama). BYOK, local-first, MIT… · 2026/9/28 3:06:01

Longhorn 官方 Helm Chart 部署指南:Kubernetes 分布式块存储的安装、配置与卸载
Longhorn 官方 Helm Chart 部署指南:Kubernetes 分布式块存储的安装、配置与卸载

云原生存储高可用容器编排 【免费下载链接】longhorn Cloud-Native distributed storage built on and for Kubernetes 项目地址: https://gitcode.com/gh_mirrors/lo/longhorn 点击查看 免费下载 导读 本文以 Longhorn 项目仓库中的 chart/app-readme.md 与 char… · 2026/9/28 3:06:00

手腕骨折检测:YOLOv8引入注意力机制的完整实战指南
手腕骨折检测:YOLOv8引入注意力机制的完整实战指南

简介:面向医学影像分析与计算机视觉开发者,这是一套基于Pytorch与YOLOv8、融合注意力机制的手腕骨折检测实战项目。在传统YOLOv8基础上引入注意力模块,使模型能聚焦腕部关键区域,提升骨折特征识别精度与效率,适用于辅助… · 2026/9/28 3:05:54

Spingboot启动预热的实现
Spingboot启动预热的实现

启动预热的适用场景启动预热适合以下情况:数据主要来自第三方接口,无法直接从本地数据库读取。第三方接口响应较慢,首次访问容易超时。一个页面需要调用多个第三方接口或逐项查询。数据读取频繁,但变化不频繁。希望服务启动后&… · 2026/9/28 3:40:12

Understanding Driving Risks using Large Language Models: Toward Elderly Driver Assessment
Understanding Driving Risks using Large Language Models: Toward Elderly Driver Assessment

文章主要内容总结 本文研究了多模态大语言模型(具体为ChatGPT-4o)利用静态行车记录仪图像进行类人交通场景解读的潜力,重点聚焦与老年司机评估相关的三项任务:交通密度评估、交叉口可见性评估和停车标志识别。这些任务需上下文推理而非简单目标检测。研究采用零样本、少样… · 2026/9/28 3:32:43

Leveraging Large Language Models for Classifying App Users‘ Feedback
Leveraging Large Language Models for Classifying App Users‘ Feedback

文章主要内容总结 本文聚焦于利用大型语言模型(LLMs)解决应用用户反馈分类的挑战,传统方法依赖有监督机器学习,但受限于标注数据集的规模和质量。研究通过三个核心实验评估了4种先进LLMs(GPT-3.5-Turbo、GPT-4o、Flan-T5、Llama3-70b)的性能: LLMs在用户反馈分类中的基… · 2026/9/28 3:32:43

Using Large Language Models for Legal Decision-Making in Austrian Value-Added Tax Law: An Experim...
Using Large Language Models for Legal Decision-Making in Austrian Value-Added Tax Law: An Experim...

文章主要内容总结 本文通过实验评估了大型语言模型(LLMs)在奥地利及欧盟增值税(VAT)法框架下辅助法律决策的能力。研究聚焦于两种提升LLM性能的方法——微调(fine-tuning)和检索增强生成(RAG),并在两类案例中进行验证:一是权威教科书案例,二是税务咨询公司的真实案… · 2026/9/28 3:32:43

学Java别走弯路,这5个方向最吃香
学Java别走弯路,这5个方向最吃香

学Java的人很多,但学明白的人不多。有人学了半年还在写控制台程序,有人一年就能独当一面。差别不在天赋,而在方向。Java生态太庞大了,什么都学等于什么都没学。选对方向,事半功倍。今天盘点当前最吃香的5个Java方向&am… · 2026/9/28 3:32:15

AlphaAgents: Large Language Model based Multi-Agents for Equity Portfolio Constructions
AlphaAgents: Large Language Model based Multi-Agents for Equity Portfolio Constructions

AlphaAgents相关总结与翻译 一、文章主要内容总结 (一)研究背景与问题 传统股票投资组合管理依赖人类分析师处理海量信息(如财务披露、财报、市场新闻等),存在信息处理效率低、易受认知偏差(如损失厌恶、过度自信)影响的问题,可能错失投资收益机会。尽管AI在数据处理… · 2026/9/28 3:32:08

MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现

简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01

汕头网站建设制作厂家避坑指南:5大注意事项救急
汕头网站建设制作厂家避坑指南:5大注意事项救急

汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01

多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习

简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01

制作网页比较方便的软件怎么选?一文搞懂避坑指南
制作网页比较方便的软件怎么选?一文搞懂避坑指南

制作网页比较方便的软件怎么选?一文搞懂避坑指南 很多老板一上来就问:做个网站多少钱?但我反问他:你的域名买了吗?服务器租了吗?他一脸懵。这就是典型的“域名服务器搞不懂”。别急,今天咱们不聊虚的,直接 一文搞懂 那些让你头秃的技术名词。… · 2026/9/28 0:00:06

婚恋网站实战案例:避开3个高价坑,省钱50%还能跑赢流量
婚恋网站实战案例:避开3个高价坑,省钱50%还能跑赢流量

婚恋网站实战案例:避开3个高价坑,省钱50%还能跑赢流量 找婚恋网站建站公司,最怕的就是被坑高价。很多同行跟我吐槽,报价单上写得模棱两可,功能栏里全是“高级定制”、“专属UI”,结果落地全是套壳。今天不聊虚的,直接甩几个我经手的 实战案例… · 2026/9/28 0:00:19

济南做网站多少钱:3个案例拆解,防黑源码下载全攻略
济南做网站多少钱:3个案例拆解,防黑源码下载全攻略

济南做网站多少钱:3个案例拆解,防黑源码下载全攻略 上周济南一个做建材的老板找我,脸都绿了。他的官网首页弹出了赌博广告,后台被植入了挖矿脚本。他慌得问我:“网站被黑挂马不知道怎么办?能不能直接找之前的外包公司要源码下载,看看哪里被动了手脚?… · 2026/9/28 0:00:25

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码