Agent 经典范式构建之 ReAct (Reasoning and Acting): 一种将“思考”和“行动”紧密结合的范式,让智能体边想边做,动态调整
Agent 经典范式构建之 ReAct (Reasoning and Acting) 一种将“思考”和“行动”紧密结合的范式让智能体边想边做动态调整[TOC](Agent 经典范式构建之 ReAct (Reasoning and Acting) 一种将“思考”和“行动”紧密结合的范式让智能体边想边做动态调整)前言11月份低我开始尝试使用cursor帮我写一些苦力的业务的代码 初始使用感觉AI编程已经基本啥都可以干再加上企业的推广自家编码工具的流量特别大 当时网络上一些主播跟着流量导致整个网络满天飞AI可以取代程序员了当时还是特别慌的了。当时随着我使用两个月 我最近拿它做一下从0到1的开发两个技术性的项目最终都是以失败告终 发现基本只是demo 不能商业化使用而且发现项目代码基本最后你都能读懂但是你就是不知道怎么改的情况。第一次使用时候 我是拿它写一些业务上的事情、项目上应急的和注释啥的 感觉都可以胜任。 目前感觉写一些网页的画面可以使用它其它一些还是自己写比较靠谱。智能体Agent的经典范式之ReAct思考和行动 紧密结合的范式让智能体边想边做的动态调整最经典的一个智能体范式ReAct (Reason Act)。ReAct由Shunyu Yao于2022年提出[1]其核心思想是模仿人类解决问题的方式将推理 (Reasoning) 与行动 (Acting) 显式地结合起来形成一个“思考-行动-观察”的循环。一、ReAct 的工作流程Observation观察Thought / Reasoning推理Action行动Tool / Environment工具/环境Observation反馈循环直到 Final AnswerReAct的巧妙之处在于它认识到思考与行动是相辅相成的。思考指导行动而行动的结果又反过来修正思考。为此ReAct范式通过一种特殊的提示工程来引导模型使其每一步的输出都遵循一个固定的轨迹Thought (思考) 这是智能体的“内心独白”。它会分析当前情况、分解任务、制定下一步计划或者反思上一步的结果。Action (行动) 这是智能体决定采取的具体动作通常是调用一个外部工具例如 Search[‘华为最新款手机’]。Observation (观察) 这是执行Action后从外部工具返回的结果例如搜索结果的摘要或API的返回值。智能体将不断重复这个 Thought - Action - Observation 的循环将新的观察结果追加到历史记录中形成一个不断增长的上下文直到它在Thought中认为已经找到了最终答案然后输出结果。这个过程形成了一个强大的协同效应推理使得行动更具目的性而行动则为推理提供了事实依据。需要外部知识的任务如查询实时信息天气、新闻、股价、搜索专业领域的知识等。需要精确计算的任务将数学问题交给计算器工具避免LLM的计算错误。需要与API交互的任务如操作数据库、调用某个服务的API来完成特定功能。因此我们将构建一个具备使用外部工具能力的ReAct智能体来回答一个大语言模型仅凭自身知识库无法直接回答的问题。例如“华为最新的手机是哪一款它的主要卖点是什么” 这个问题需要智能体理解自己需要上网搜索调用工具搜索结果并总结答案二、ReAct系统提示词REACT_PROMPT_TEMPLATE 请注意你是一个有能力调用外部工具的智能助手。 可用工具如下 {tools} # 输出格式要求: 你的每次回复必须严格遵循以下格式包含一对Thought和Action Thought: [你的思考过程和下一步计划] Action: [你要执行的具体行动] Action的格式必须是以下之一 1. 调用工具function_name(arg_namearg_value) 2. 结束任务Finish[最终答案] # 重要提示: - 每次只输出一对Thought-Action - Action必须在同一行不要换行 - 当收集到足够信息可以回答用户问题时必须使用 Action: Finish[最终答案] 格式结束 现在请开始解决以下问题 Question: {question} History: {history} 三、ReActAgent代码实现classReActAgent:def__init__(self,llm_client:AgentsLLM,tool_executor:ToolExecutor,max_steps:int5):self.llm_clientllm_client self.tool_executortool_executor self.max_stepsmax_steps self.history[]defrun(self,question:str):self.history[]current_step0whilecurrent_stepself.max_steps:current_step1print(f\n--- 第{current_step}步 ---)tools_descself.tool_executor.getAvailableTools()history_str\n.join(self.history)promptREACT_PROMPT_TEMPLATE.format(toolstools_desc,questionquestion,historyhistory_str)messages[{role:user,content:prompt}]response_textself.llm_client.think(messagesmessages)print(f完整响应文本:{response_text});ifnotresponse_text:print(错误LLM未能返回有效响应。);breakthought,actionself._parse_output(response_text)ifthought:print(f 思考:{thought})ifnotaction:print(警告未能解析出有效的Action流程终止。);breakifaction.startswith(Finish):# 如果是Finish指令提取最终答案并结束final_answerself._parse_action_input(action)print(f 最终答案:{final_answer})returnfinal_answer tool_name,tool_inputself._parse_action(action)ifnottool_nameornottool_input:self.history.append(Observation: 无效的Action格式请检查。);print(警告解析到的Action格式无效跳过此步骤。);continueprint(f 行动:{tool_name}[{tool_input}])tool_functionself.tool_executor.getTool(tool_name)observationtool_function(tool_input)iftool_functionelsef错误未找到名为 {tool_name} 的工具。print(f 观察:{observation})self.history.append(fAction:{action})self.history.append(fObservation:{observation})print(已达到最大步数流程终止。)returnNonedef_parse_output(self,text:str):thought_matchre.search(rThought: (.*),text)action_matchre.search(rAction: (.*),text)thoughtthought_match.group(1).strip()ifthought_matchelseNoneactionaction_match.group(1).strip()ifaction_matchelseNonereturnthought,actiondef_parse_action(self,action_text:str):matchre.match(r(\w)\[(.*)\],action_text)return(match.group(1),match.group(2))ifmatchelse(None,None)def_parse_action_input(self,action_text:str):matchre.match(r\w\[(.*)\],action_text)returnmatch.group(1)ifmatchelseif__name____main__:llmAgentsLLM()tool_executorToolExecutor()search_desc一个网页搜索引擎。当你需要回答关于时事、事实以及在你的知识库中找不到的信息时应使用此工具。tool_executor.registerTool(Search,search_desc,search)agentReActAgent(llm_clientllm,tool_executortool_executor,max_steps10)question华为最新的手机是哪一款它的主要卖点是什么agent.run(question)四、工具执行实现classToolExecutor: 一个工具执行器负责管理和执行工具。 def__init__(self):self.tools:Dict[str,Dict[str,Any]]{}defregisterTool(self,name:str,description:str,func:callable): 向工具箱中注册一个新工具。 ifnameinself.tools:print(f警告:工具 {name} 已存在将被覆盖。)self.tools[name]{description:description,func:func}print(f工具 {name} 已注册。)defgetTool(self,name:str)-callable: 根据名称获取一个工具的执行函数。 returnself.tools.get(name,{}).get(func)defgetAvailableTools(self)-str: 获取所有可用工具的格式化描述字符串。 return\n.join([f-{name}:{info[description]}forname,infoinself.tools.items()])运行效果图总结Agent:https://github.com/chensongpoixs/agent/

相关新闻

Linux操作指南

Linux操作指南

一、前置准备:VMware虚拟机安装 下载地址:VMware by Broadcom 官方地址(建议下载VMware Workstation Pro,适配桌面端虚拟机搭建) 二、vi/vim编辑器(Linux核心编辑器) vim是vi的增强版&#x…

2026/7/2 23:30:02 阅读更多 →
Linux下串口波特率配置命令操作指南

Linux下串口波特率配置命令操作指南

以下是对您提供的博文内容进行 深度润色与结构优化后的技术文章 。整体遵循“去AI化、强工程感、重逻辑流、轻模板化”的原则,彻底摒弃引言/总结等程式化段落,以一位嵌入式Linux一线工程师的口吻娓娓道来——既有踩坑后的顿悟,也有调试时的真实节奏;既讲清楚“怎么做”,…

2026/7/3 2:05:14 阅读更多 →
基于SpringBoot+Vue的个人博客系统管理系统设计与实现【Java+MySQL+MyBatis完整源码】

基于SpringBoot+Vue的个人博客系统管理系统设计与实现【Java+MySQL+MyBatis完整源码】

系统架构设计### 摘要 随着互联网技术的快速发展,个人博客已成为人们分享知识、记录生活的重要平台。传统的博客系统在功能扩展、性能优化和用户体验方面存在诸多不足,亟需一种高效、稳定且易于维护的解决方案。基于此背景,设计并实现一个结…

2026/7/3 1:28:59 阅读更多 →

最新新闻

基于深度学习的单目视觉FCW系统实现与优化

基于深度学习的单目视觉FCW系统实现与优化

1. 项目概述:基于深度学习的单目视觉FCW系统 前车碰撞预警系统(Forward Collision Warning,FCW)是智能驾驶辅助系统(ADAS)的核心安全功能之一。与传统的雷达方案相比,基于单目视觉的FCW系统具有…

2026/7/4 14:40:10 阅读更多 →
STM32与EEPROM硬件设计及I2C驱动优化实践

STM32与EEPROM硬件设计及I2C驱动优化实践

1. S-34C04AB与STM32F207VGT6的硬件协同设计 在嵌入式存储系统中,S-34C04AB作为I2C接口的4Kb EEPROM芯片,与STM32F207VGT6的硬件配合需要特别注意电气特性和信号完整性。STM32F207VGT6的I2C接口工作电压为3.3V,而S-34C04AB支持1.7V-5.5V宽电压…

2026/7/4 14:40:10 阅读更多 →
3分钟免费解锁MobaXterm专业版:开源许可证生成器终极指南

3分钟免费解锁MobaXterm专业版:开源许可证生成器终极指南

3分钟免费解锁MobaXterm专业版:开源许可证生成器终极指南 【免费下载链接】MobaXterm-keygen A keygen for MobaXterm 项目地址: https://gitcode.com/gh_mirrors/moba/MobaXterm-keygen 还在为MobaXterm专业版的高昂费用而犹豫吗?想要体验完整的…

2026/7/4 14:36:09 阅读更多 →
Hugging Face Hub大文件上传实战指南

Hugging Face Hub大文件上传实战指南

1. 大文件上传需求背景在机器学习领域,数据集和模型文件往往体积庞大。以常见的计算机视觉数据集为例,一个中等规模的图像数据集可能达到几十GB甚至上百GB。传统的文件托管服务要么有严格的容量限制,要么缺乏版本控制功能,给团队协…

2026/7/4 14:34:07 阅读更多 →
如何用C开发的开源CAD软件LitCAD,15分钟开启你的专业绘图之旅?

如何用C开发的开源CAD软件LitCAD,15分钟开启你的专业绘图之旅?

如何用C#开发的开源CAD软件LitCAD,15分钟开启你的专业绘图之旅? 【免费下载链接】LitCAD A very simple CAD developed by C#. 项目地址: https://gitcode.com/gh_mirrors/li/LitCAD 你是否曾因专业CAD软件的复杂界面和高昂费用而望而却步&#x…

2026/7/4 14:34:07 阅读更多 →
AutoRaise:彻底改变macOS窗口管理的鼠标悬停自动聚焦神器

AutoRaise:彻底改变macOS窗口管理的鼠标悬停自动聚焦神器

AutoRaise:彻底改变macOS窗口管理的鼠标悬停自动聚焦神器 【免费下载链接】AutoRaise AutoRaise (and focus) a window when hovering over it with the mouse 项目地址: https://gitcode.com/gh_mirrors/au/AutoRaise 你是否厌倦了在多个窗口间频繁点击切换…

2026/7/4 14:32:06 阅读更多 →

日新闻

Memcached 1.6.43 发布:关键安全修复版本,多项问题得到解决

Memcached 1.6.43 发布:关键安全修复版本,多项问题得到解决

Memcached 1.6.43 正式发布,这是一个关键的安全修复版本,修复了多个方面的问题,还对部分功能进行了优化。 安全修复亮点 此次发布在安全修复上表现突出。binprot 避免了项目引用计数溢出,mcmc 因安全问题提升了上游版本号&#xf…

2026/7/4 0:04:29 阅读更多 →
终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案

终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案

终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案 【免费下载链接】HMCL A Minecraft Launcher which is multi-functional, cross-platform and popular 项目地址: https://gitcode.com/gh_mirrors/hm/HMCL HMCL(Hello Minecraft! Lau…

2026/7/4 0:06:29 阅读更多 →
KMX63与PIC18F66K40在嵌入式HMI中的硬件协同与低功耗设计

KMX63与PIC18F66K40在嵌入式HMI中的硬件协同与低功耗设计

1. KMX63与PIC18F66K40的硬件协同架构解析KMX63作为一款三轴加速度计和磁力计组合传感器,与PIC18F66K40微控制器的搭配堪称嵌入式HMI开发的黄金组合。这套硬件组合的核心优势在于KMX63提供的高精度运动感知能力与PIC18F66K40强大的信号处理能力形成了完美互补。KMX6…

2026/7/4 0:06:29 阅读更多 →

周新闻

月新闻