提示技术系列(13)——ReAct

什么是提示技术?

        提示技术是实现提示工程目标的具体技术手段,是提示工程中的“工具库”

什么又是提示工程?

        提示工程是指通过设计、优化和迭代输入到大语言模型(LLM)的提示(Prompt),系统性提升模型输出质量(如相关性、准确性、可控性)的实践领域。它是一个覆盖全流程方法论,包括:

  • 明确目标任务(如生成教学内容、问答、翻译);
  • 设计提示结构(如指令、上下文、示例);
  • 选择模型与参数(如温度、top_p);
  • 验证与迭代(根据输出调整提示)。

其核心是“通过工程化方法控制大语言模型(LLM)的行为”


概念

        ReAct(Reasoning + Acting)是一种结合推理与行动的提示技术框架,旨在让大语言模型在复杂任务中,同时具备逻辑推理能力外部工具/环境交互的能力。它通过动态生成推理链和行动指令,模拟人类的“思考-行动”循环,从而提升模型在多步骤任务重的表现。

核心思想:

  • 推理(Reasoning):模型生成中间推理步骤,解释当前状态、目标及下一步行动的依据。
  • 行动(Acting):模型调用外部工具(如搜索引擎、计算器、API)或执行特定操作(如提问、验证假设)以获取信息。
  • 迭代循环:推理与行动交替进行,逐步逼近任务目标。

ReAct,类似于人类解决复杂问题时的“先思考再行动”模式。例如,在规划旅游时,你会先分析预算、时间(推理),然后查询机票、酒店价格(行动),再根据结果调整计划(推理),如此循环,直到结果满足需求。

概念图解

应用场景

  1. 复杂任务规划:如规划为期五天的云南旅行等;
  2. 财务分析:如分析公司年度财报等;
  3. 科学研究助手:如论文研究、验证实验设计等;
  4. 交互式系统:如聊天机器人、智能助手等;
  5. 教育领域应用:如数学解题辅导,科学实验设计,编程教学等;
  6. ……

案例实操

使用工具:扣子

实现方式:扣子智能体

完整智能体如下:

测试输入:

规划一次 5 天的云南旅行,预算 12000 元,出发地:广州,明天 2025 年 7 月 4 日出发

运行结果:

大家若有编程基础的话,可以参考下面的代码案例来实现与体验不同场景下使用 ReAct 提示。

代码实现ReAct提示

技术栈:Python;LangChain

代码引用包导入:

pip install langchain_community==0.3.26;
pip install langchain==0.3.26;

具体代码:

import os
import random
from typing import Dictfrom dotenv import load_dotenv
from langchain.agents import initialize_agent, Tool
from langchain.prompts import PromptTemplate
from langchain_community.chat_models import ChatZhipuAIdef weather_api(input_str: str) -> Dict[str, str]:"""处理天气查询"""location = input_str.strip("'\" ")  # 去除引号和空格weathers = ["晴朗", "多云", "小雨", "阵雨"]return {"weather": random.choice(weathers),"temperature": f"{random.randint(10, 25)}℃","location": location}def flight_api(input_str: str) -> dict[str, int | str] | dict[str, str]:"""处理机票查询"""try:from_city, to_city = [c.strip("'\" ") for c in input_str.split(",")]return {"price": random.randint(800, 3000),"from": from_city,"to": to_city}except Exception as e:return {"error": f"输入格式错误: {str(e)}"}# 工具注册
tools = [Tool(name="weather",description="查询城市天气(输入格式:'城市名';输出:天气和温度)",func=weather_api,),Tool(name="flight",description="查询机票价格(输入格式:'出发地,目的地';输出:价格)",func=flight_api),
]# 初始化 LLM
load_dotenv()llm = ChatZhipuAI(model="glm-4",api_key=os.getenv("ZHIPUAI_API_KEY")
)react_prefix = """你是一个智能旅行规划助手,可以调用以下工具:
{tools}任务:{input}请遵循以下格式进行推理和行动:
思考:首先需要做什么?
行动:调用工具名称(如 weather、flight)
观察:工具返回的结果
...(重复思考-行动-观察步骤)
最终答案:完整的旅行规划"""react_prompt = PromptTemplate(template=react_prefix,input_variables=["input", "tools"],
)from langchain.agents import AgentTypeagent = initialize_agent(tools=tools,llm=llm,agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,prompt=react_prompt,verbose=True,  # 打印中间步骤max_iterations=20,  # 限制最大推理步骤
)user_input = "规划一次5天的云南旅行,预算12000元,从广州出发"
print("正在规划旅行,请稍候...")
response = agent.run(user_input)
print("最终规划结果:\n", response)

代码运行输出的中间结果,看起来就像我们在做这个任务的思考与行动过程,挺有意思的。

总结与思考

        ReAct 提示与自动推理并使用工具(ART)提示,都有着让 LLM 自动规划任务,推理并使用工具的含义,那么不免产生对比的好奇。

维度

ReAct

自动推理并使用工具(ART)

核心思想

通过交替进行“推理(Reasoning)”和“行动(Action)”,让LLM在任务中自主选择动作并执行。

引导LLM自动生成多步推理链,并动态调用外部工具来完成复杂任务。

是否依赖工具调用

是,LLM需决定何时调用工具(如API、搜索)。

是,LLM主动选择和调用合适的工具链。

是否强调推理步骤

是,LLM需先进行逻辑推理,再决定下一步操作。

是,强调生成明确的推理路径以支持工具调用。

是否生成可执行代码

否,仅生成自然语言推理和动作指令。

否,主要生成自然语言推理和工具调用描述。

输出形式

推理步骤 + 动作选择(如调用搜索引擎、数据库查询)

多步推理链 + 工具调用序列(如API调用、计算器)

是否支持动态交互

是,根据中间结果调整后续推理路径。

是,根据当前状态动态调整工具调用顺序。

是否适合非结构化任务

是,适用于自然语言理解+工具调用结合的任务。

是,尤其适合需要实时数据或多个工具协作的任务。

资源消耗

中等(取决于调用的工具数量)。

高(可能涉及多次网络请求、API调用)。

可解释性

高,推理路径清晰,动作选择透明。

高,推理过程与工具调用逻辑分离明确。

典型指令示例

“请一步步思考如何解决这个问题,并在需要时调用计算器或搜索最新数据。”

“请生成一个包含多步推理的思维链,并在适当位置调用相关工具完成计算或获取信息。”

一句话总结:

        ReAct 更强调“推理+动作”的交替循环,适用于模拟人类行为的交互式任务;而 ART 更注重“多步推理链+工具调用”的自动化流程,在需要访问外部数据和服务的复杂任务中表现更强。

好了,到此吧。


提示技术系列,截止到目前为止已经写了12篇,它们分别是:零样本;少样本;链式思考(CoT);自我一致性;生成知识提示;链式提示;主动提示;思维树(TOT);自动提示工程师;方向性刺激提示;自动推理并使用工具;程序辅助语言模型;

接下来分享:检索增强生成 (RAG) ?

为了方便大家学习,这里给出专栏链接:https://blog.csdn.net/quf2zy/category_12995183.html

欢迎大家一起来学习与交流……

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.tpcf.cn/pingmian/87645.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【SVO】klt与极限搜索块匹配findEpipolarMatchDirect

Matcher::findEpipolarMatchDirect 函数逻辑与原理分析 核心目标: 在极线上搜索参考帧特征点 ref_ftr 在当前帧 cur_frame 中的最佳匹配点,并通过三角化计算深度。 关键步骤解析: 1. 极线端点计算: const BearingVector A T_…

C 语言基础入门:基本数据类型与运算符详解

一、基本数据类型C 语言提供了丰富的基本数据类型,用于存储不同类型的数据,主要包括整数类型、浮点类型和布尔类型。1. 整数类型整数类型用于存储整数,根据是否带符号以及占用存储空间的不同,可进一步细分:类型名占用存…

应用在核电行业的虚拟现实解决方案

核能领域正处于创新与责任的交汇点。尽管核反应堆提供了高效且可持续的能源,但由于放射性物质的危险性,其也带来了独特挑战。虚拟现实(VR)技术正通过为远程操作、应急响应和放射性物质处理提供先进解决方案,彻底革新这…

CTF Web的数组巧用

PHP数组绕过intval和preg_match的CTF技巧 原题目 <?php include("flag.php"); // 引入flag文件&#xff0c;flag变量在这里定义 show_source("index.php"); // 显示index.php文件的源码&#xff08;方便选手查看&#xff09;// 判断是否通过GET方式传入…

vue2+elementui使用compressorjs压缩上传的图片

首先是npm install compressorjs 然后新建一个compressorjs.js的文件 import Compressor from "compressorjs";// 默认压缩配置 const DEFAULT_COMPRESS_OPTIONS {quality: 0.6, // 默认压缩质量 (0-1)maxWidth: 1920, // 最大宽度maxHeight: 1080, // 最大高度con…

GPIO详解:不仅仅是输入输出那么简单

GPIO详解&#xff1a;不仅仅是输入输出那么简单 “别小看一个小小的引脚&#xff0c;它可是 MCU 世界的社交之门。” &#x1f44b; 先打个招呼&#xff1a;什么是 GPIO&#xff1f; GPIO&#xff0c;全称是 General Purpose Input/Output —— 通用输入输出口。 简单说&…

深度学习5(深层神经网络 + 参数和超参数)

深层神经网络简介 深层神经网络是机器学习中一种重要的模型&#xff0c;它通过增加网络的“深度”&#xff08;即隐藏层的数量&#xff09;来提升模型对复杂数据的表示和学习能力。同浅层类似&#xff0c;也分为三个部分&#xff1a; 输入层&#xff1a;接收原始数据&#xff…

时间复杂度与空间复杂度分析

一、什么是复杂度&#xff1f; 1.1 为什么需要复杂度分析&#xff1f; 假设你写了两个程序来解决同一个问题&#xff0c;如何判断哪个程序更好&#xff1f;我们不能只看运行时间&#xff0c;因为&#xff1a; 不同电脑性能不同同一电脑在不同时刻状态也不同数据规模不同&#x…

上下文工程:从提示词到自动化流程的AI应用新范式

上下文工程&#xff1a;从提示词到自动化流程的 AI 应用新范式 一、背景与概述&#xff1a;从提示词工程到上下文工程的演进 随着大语言模型 (LLM) 技术的飞速发展&#xff0c;AI 应用开发正经历从 “提示词工程”(Prompt Engineering) 到 “上下文工程”(Context Engineerin…

HTML网页应用打包Android App 完整实践指南

技术准备与工具下载 必需工具清单 在开始之前&#xff0c;需要准备以下开发工具&#xff1a; Android Studio官网&#xff1a;https://developer.android.com/studio HBuilderX官网&#xff1a;https://www.dcloud.io/hbuilderx.html 离线SDK下载&#xff1a;https://nati…

简单 Python 爬虫程序设计

爬虫是获取网页数据的常用工具&#xff0c;我们一起来设计一个基于 requests 和 BeautifulSoup 的简单爬虫&#xff0c;它可以获取网页内容并提取文本信息。 所需库安装 首先需要安装两个必要的库&#xff1a; pip install requests beautifulsoup4 完整代码 import reques…

AUTOSAR图解==>AUTOSAR_AP_EXP_ARAComAPI

AUTOSAR ara::com API详解 自适应平台通信API技术详解 目录 1. 概述2. ara::com API架构 2.1 Proxy/Skeleton架构2.2 通信方式2.3 服务连接方式 3. 详细API说明 3.1 Proxy类3.2 Skeleton类3.3 实例标识符3.4 通信组 4. ara::com API状态管理 4.1 服务生命周期4.2 事件与方法状…

Spring Boot + 本地部署大模型实现:优化与性能提升

在将大语言模型集成到 Spring Boot 应用中时&#xff0c;性能优化是一个关键环节。本地部署的大模型虽然提供了强大的功能&#xff0c;但也可能带来一些性能挑战&#xff0c;如响应时间较长、资源占用较高等问题。本文将介绍如何在 Spring Boot 应用中优化本地部署大模型的性能…

QML 鼠标只响应左键处理方法

【1】问题描述 默认情况下qml支持左键&#xff0c;如果需要支持右键&#xff0c;甚至是中键那需要设置 【2】设置方法 MouseArea{ id: mouse anchors.fill: parent property int cx: 0 pr…

北方算网亮相2025全球数字经济大会|共绘数字友好城市建设

7月2日&#xff0c;以“建设数字友好城市”为主题的2025全球数字经济大会隆重开幕&#xff0c;为构建技术与人、城市与生态和谐共进的全球数字经济新生态提供交流合作平台。自7月3日开始&#xff0c;北方算网将在大会集中亮相&#xff0c;先后在多个论坛中发表主题演讲&#xf…

Android PNG/JPG图ARGB_8888/RGB_565‌解码形成Bitmap在物理内存占用大小的简单计算

Android PNG/JPG图ARGB_8888/RGB_565‌解码形成Bitmap在物理内存占用大小的简单计算 Android的Bitmap 是一个用于表示图像数据的核心类&#xff0c;代表一张图片在内存中的存储&#xff0c;Bitmap存储了图像的像素信息数据。 Bitmap把图像理解为像素点组成的二维矩阵&#xff…

力扣网编程55题:跳跃游戏之逆向思维

一. 简介 前面一篇文章使用贪心算法解决 力扣网55题&#xff1a;跳跃游戏&#xff0c;文章如下&#xff1a; 力扣网编程55题&#xff1a;跳跃游戏之贪心算法-CSDN博客 二. 力扣网编程55题&#xff1a;跳跃游戏之逆向思维 给你一个非负整数数组 nums &#xff0c;你最初位于数…

苍穹外卖--day12数据统计-Excel报表

1.工作台1.1实现思路工作台是系统运营的数据看板&#xff0c;并提供快捷操作入口&#xff0c;可以有效提高商家的工作效率。工作台展示的数据&#xff1a;①今日数据②订单管理③菜品总览④套餐总览⑤订单信息名词解释&#xff1a;①营业额&#xff1a;已经完成订单的总金额②有…

鸿蒙应用开发:从网络获取数据

一、网络状态概述上述任一指标的变化均可视为网络状态的改变 二、获取网络信息 创建网络对象 //创建网络对象 //?表示可传可不传 connection.createNetConnection(netSpecifier?:NetSpecifier,timeout?:number):NetConnection;获取默认激活网络及其能力 //获取默认激活网络 …

探索开源虚拟 Excel 函数模块:Python 中的 Excel 功能利器

在数据处理和分析的领域中&#xff0c;Excel 一直是一款备受青睐的工具&#xff0c;它提供了丰富多样的函数&#xff0c;帮助用户高效地完成各种数据操作。而现在&#xff0c;我&#xff08;董翔&#xff09;开发一个基于 Python 的虚拟 Excel 函数模块&#xff0c;它将 Excel …