智能体开发:推理-行动(ReAct)思维链提示
人类在处理一个需要多个步骤才能完成任务时,显著特点是能够将言语推理(内心独白)和实际行动融合在一起,在面对陌生或不确定的情况时通过这种方法学习新知识,做出决策,并执行,从而应对复杂的任务挑战,比如下面这个图书馆借书的场景。
目标:我想借一本关于中国历史的书内心独白(推理):我应该怎么找到这样的书呢?我知道图书馆有分类系统,每种书都有编号,我可以按照编号找到对应的书架
行动: 我走到书架,拿起一本书看看内心独白(推理):这本书合不合我的要求呢?嗯,看起来不太对,它讲的是“历史”里的故事,而不是我想了解的“历史”事实,我得换个方法找,或许可以用图书馆的电脑系统搜索一下
行动:我在电脑上输入关键词“中国历史”,选择“图书馆藏”,点击搜索内心独白(推理):搜索结果出来了,可是没有一本书是我想要的
结论:这个图书馆没有关于我想借的中国历史的书
推理-行动提示(Reasoning and Acting,ReAct)就是一种利用大语言模型模拟上述人类智能的推理和行动过程的思维链提示。它的基本思想是让大语言模型交替地生成推理追踪(Verbal Reasoning Traces)和行动(Actions),并允许大语言模型与外部工具进行交互,从而获取额外的信息反馈。这样就可以动态地维护和更新自己的行动计划。这个过程需要多次调用大语言模型,是一个多阶段的提示方法,具体过程如下图所示。
第一阶段:推理。
第一阶段:推理。根据给定的输入和目标,生成一个推理追踪,即一系列的自然语言语句,用于解释大语言模型的推理过程和行动计划。推理追踪可以包含对外部知识的引用,也可以包含对大语言模型自身的反思和评估。这个阶段的输出由 3 个关键部分组成:
• 思考(Thought):该部分的主要功能是分析问题、生成假设和验证结果,让大语言模型做出合理和可靠的决策。
• 行动计划(Act-plan):该部分的主要功能是制定大语言模型接下来需要采取的具体行为的计划,一般由行为和对象两部分组成,也就是编码时调用的工具名称和对应的入参。
• 观察(Obs):该部分的主要功能是获取外部输入的部分。它就像大语言模型的感知系统,将环境的反馈信息同步大语言模型,帮助它进一步进行分析或者决策。
第二阶段:行动。
根据推理阶段的行动计划,完成具体的任务执行,即执行一些具体的操作或指令,用于与外部环境进行交互,如查询知识库、调用外部工具等。大语言模型根据交互的结果,获取额外的信息和反馈,从而更新自己的推理追踪和行动计划。通过重复上述两个阶段,直到达到预定的目标或满足某些终止条件。
推理-行动提示格式如下:
# 任务描述
请按照"回答格式"尽可能地去回答问题,你可以使用以下的工具:# 工具描述
工具名1:描述,调用参数
工具名2:描述,调用参数# 回答格式
思考:你应该一直保持思考,给出要怎么解决这个问题的方案
动作:<工具名>。每次动作只选择一个工具。
输入:<调用工具时需要传入的参数>
观察:<第三方工具返回的结果>
...(这个“思考/动作/输入/观察”的循环可以重复N次)思考:最后,已经得到最终结果了
最终结果:针对原始问题,输出最终结果# 用户问题
问题:{input}# 回答过程
思考:
接下来是演示一个具体的案例。我们首先准备一些可供使用的工具,每个工具以字符串格式返回其执行后的结果,如下表所示。
工具 | 描述 |
---|---|
定位 | 获取用户当前的定位城市 |
天气 | 查看天气预报 |
导航 | 规划地点A到地点B的驾驶路线 |
计算器 | 进行简单的四则运算 |
时钟 | 获取当前的日期和时间 |
搜索 | 当以上工具都无法使用时,尝试使用这个搜索引擎工具 |
补充 | 当你回答问题的依赖信息不足时,调用这个工具可以让人工给你补充一些信息 |
自答 | 当以上工具无法使用时,依靠自己的知识直接给出答案,请注意输出事实不要杜撰 |
对应的提示如下:
# 任务描述
请按照"回答格式",根据用户输入从工具列表中选择合适的工具解决问题,工具的参数格式如下:@工具名称(参数1,参数2,...):工具功能描述# 工具描述
@定位():获取用户当前的定位城市
@天气(城市名称):查看天气预报
@导航(起点,终点):规划地点A到地点B的驾驶路线
@计算器(数字1,运算符,数字2):进行简单的四则运算
@时钟():获取当前的日期和时间
@搜索(搜索关键词):当以上工具都无法使用时,尝试使用这个搜索引擎工具
@补充(需要补充的问题):当你回答问题的依赖信息不足时,调用这个工具可以让人工给你补充一些信息
@自答(需要回答的问题):当以上工具无法使用时,可以依靠你自己的知识直接给出答案,请注意输出事实不要杜撰# 回答格式
思考:请保持思考,结合上下文背景,请首先判断解决该问题的素材是否满足,然后给出要解决这个问题的方案和分析过程,
动作:@工具名称(参数 1, 参数 2, ...)。每次动作只选择一个工具。工具列表"工具描述"
输入:<调用工具时需要传入的参数>
观察:<工具返回的结果>...(这个“思考/动作/输入/观察”的循环可以重复N次)思考:最后,已经得到最终结果了
最终结果:针对原始问题,输出最终结果# 用户问题
问题:{question}# 回答过程
<第1轮>
接下来,我们来看两个具体的例子,请将上述提示中的{question}变量替换为具体的问题。
**例子1:**北京到襄阳怎么走?襄阳本地有哪些好玩的地方?
# 回答过程
<第1轮>
思考:根据用户的问题,首先需要通过定位工具确定用户当前所在的城市,然后使用导航工具规划从北京到襄阳的驾驶路线。接下来,可以使用搜索工具来获取襄阳本地的旅游景点信息。
动作:@定位()
观察:根据定位结果,得知用户当前所在城市为北京。<第2轮>
思考:现在已经知道用户当前所在城市是北京,下一步可以使用导航工具来规划从北京到襄阳的驾驶路线。
动作:@导航(北京,襄阳)
观察:导航工具返回了从北京到襄阳的驾驶路线。<第3轮>
思考:现在已经得到了从北京到襄阳的驾驶路线,接下来可以使用搜索工具来获取襄阳本地的旅游景点信息。
动作:@搜索(襄阳旅游景点)
观察:襄阳市的旅游景点有:1. 襄阳古城墙... · 2. 古隆中景区... · 3. 钟鼓楼...<第4轮>
思考:已经得到了襄阳本地的旅游景点信息,可以将这些信息整理后输出给用户。
最终结果:从北京到襄阳的驾驶路线如下:起点为北京,终点为襄阳,走京开高速→G45大广高速→S83兰南高速,距离1059.36千米,耗时10小时37分钟。
襄阳本地的好玩的地方有:1. 襄阳古城墙... · 2. 古隆中景区... · 3. 钟鼓楼...
**例子2:**王军老师的身高乘以2是多少,并以王老师身高为题做一首诗。
为了演示大语言模型和人工的交互,我特别补充这个示例,当大语言模型依靠的工具不足以解决其问题时可以通过“补充”和“自答”工具唤醒人工或者大语言模型自我回答来补充相关信息,这在一些人工问答的场景非常有用。
这两个工具的定义如下:
@补充:当你回答问题的依赖信息不足时,调用这个工具可以让人工给你补充一些信息。
@自答:当以上工具无法使用时,可以依靠你自己知识直接给出答案,请注意输出事实不要杜撰
执行过程:
<第 1 轮>
思考: 需要获取王老师的身高,可以使用@补充工具
动作: @补充(王老师身高) //该工具执行时需要人工从软件界面输入,这里输入180cm
观察: 王老师身高为 180cm <第 2 轮>
思考: 需要计算 180cm 乘以 2 的结果,可以使用@计算器工具
动作: @计算器(180cm,*,2)
观察: 180cm 乘以 2 的结果为 360cm <第 3 轮>
思考: 需要根据 360cm 写一首诗,可以使用@自答工具
动作: @自答(根据 360cm 写一首诗) //该工具执行时大模型会根据自己的知识回答
观察: 王老师高达三百六十,他的身材犹如一棵树,他的脚步踏遍大江南北,他的知识智慧比满天星。<第 4 轮>
思考: 最后,已经得到最终结果了
最终结果: 王老师的身高是王老师身高为 180cm,给王老师写的诗是:王老师高达三百六十,他的身材犹如一棵树,他的脚步
踏遍大江南北,他的知识智慧比满天星。
总体而言,推理-行动提示的显著优势在于其能促进大语言模型与外部信息源或各类工具之间的协同合作。这种合作机制可以自动弥补大语言模型在推理时所缺乏的知识和能力。因此,它能够应对多样化且难度各异的任务挑战,广泛应用于各种智能体中。
最新问世的《AI原生应用开发:提示工程原理与实践》(京东图书:https://item.jd.com/14373635.html)一书,特别辟出一整章的精彩内容,深入阐述了运用大语言模型进行推理的多样技术。
这一章节详尽介绍了诸如零样本提示、少样本提示、少样本思维链提示、零样本思维链、直接推理提示、思维表提示、自我一致性提示、由少至多提示、自问自答提示、思维树提示、推理-行动提示、自动思维链提示等。这些技术不仅全面挖掘并激发了大语言模型在推理领域的巨大潜能,更为读者提供了宝贵的实践指南与洞见。此书无疑是值得每一位对AI应用开发、特别是提示工程领域感兴趣的读者细细品读的佳作。
相关文章:

智能体开发:推理-行动(ReAct)思维链提示
人类在处理一个需要多个步骤才能完成任务时,显著特点是能够将言语推理(内心独白)和实际行动融合在一起,在面对陌生或不确定的情况时通过这种方法学习新知识,做出决策,并执行,从而应对复杂的任务…...
机试准备第11天
第一题是浮点数加法,目前写过最长的代码。 #include <stdio.h> #include <string> #include <iostream> #include <vector> using namespace std; int main() {string str1;string str2;while (getline(cin, str1) && getline(cin…...

【Proteus仿真】【STM32单片机】智能阳台控制系统
文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真STM32单片机控制器,使用按键、LCD1604液晶、DHT11温湿度模块、PCF8591 ADC、光线传感器、PM2.5传感器、土壤湿度传感器、继电器、水泵、电灯、28BYJ48步进电机等。 主要…...

Manus AI Agent 技术解读:架构、机制与竞品对比
目录 1. Manus 是什么? 1.1 研发背景 1.2 技术特点 1.3 工具调用能力 1.4 主要应用场景 2. Manus 一夜爆火的原因何在? 2.1 技术突破带来的震撼 2.2 完整交付的产品体验 2.3 生态与开源策略 3. Manus 与其他 AI Agent 的对比分析 3.1 技术架构…...
【时间序列】因果推断:从时序数据中探寻“因”与“果”
在日常生活中,我们经常听到这样的问题:“为什么股票价格会突然下跌?”、“天气变化是否会影响销售额?”这些问题背后,其实都在试图寻找一种因果关系。然而,在时间序列数据中,探寻因果关系并不像…...

IDEA2023 使用枚举类型java: 非法字符: ‘\ufffd‘
一、异常: 二、原因 文件编码问题 IDE或文本编辑器的文件编码设置不正确,可能会导致在保存文件时引入了错误的字符。 三、解决 在IntelliJ IDEA中,你可以通过File -> Settings -> Editor -> File Encodings来设置。...

深度学习模型组件之优化器--基础优化器(GD、SGD、Mini-batch SGD)
深度学习模型组件之优化器–基础优化器(GD、SGD、Mini-batch SGD) 文章目录 深度学习模型组件之优化器--基础优化器(GD、SGD、Mini-batch SGD)1. 梯度下降(Gradient Descent, GD)1.1 基本原理1.2 优点与缺点…...

使用 AIStor、MLflow 和 KServe 将模型部署到 Kubernetes
在之前几篇关于 MLOps 工具的文章中,我展示了有多少流行的 MLOps 工具跟踪与模型训练实验相关的指标。我还展示了他们如何使用 MinIO 来存储作为模型训练管道一部分的非结构化数据。但是,一个好的 MLOps 工具应该做的不仅仅是管理您的实验、数据集和模型…...
宝塔 Linux 计划任务中添加运行项目网站PHP任务-定时任务
一、指定php版运行, cd /www/wwwroot/www.xxx.com/ && /www/server/php/56/bin/php think timedtasks start >> /tmp/timedtasks.log 2>&1 二、不指定php版 cd /www/wwwroot/www.xxx.com/ && php think timedtasks start >> …...

unity学习64,第3个小游戏:一个2D跑酷游戏
目录 学习参考 素材资源导入 1 创建项目 1.1 创建1个2D项目 1.2 导入素材 2 背景图bg 2.0 bg素材 2.1 创建背景 2.2 修改素材,且修改摄像机等 2.2.1 修改导入的原始prefab素材 2.2.2 对应调整摄像机 2.2.3 弄好背景 2.3 背景相关脚本实现 2.3.1 错误…...

rom定制系列------小米note3 原生安卓15 批量线刷 默认开启usb功能选项 插电自启等
小米Note 3搭载骁龙660处理器,1200万像素广角镜头、俗称大号版的小米6,官方最终版为12.0.1稳定版安卓9的固件。客户需要运行在安卓15的rom。根据原生官网的rom修改一些功能选项。以便客户操作需求。 定制资源说明 根据客户需求采用安卓15原生系统为底包…...

基于开源 AI 大模型、AI 智能名片及 S2B2C 商城小程序源码的个人 IP 用户运营策略研究
摘要:本文深入剖析了个人 IP 运营领域中用户运营的核心地位与关键作用,详细阐述了以拉新、留存和促活为主要方式的用户运营策略,旨在实现对用户的有效管理和用户价值的全面提升,进而延长用户生命周期,推动用户向消费者…...
什么是:马尔可夫博弈
什么是:马尔可夫博弈 马尔可夫博弈(Markov Game),也被称为随机博弈(Stochastic Game),是马尔可夫决策过程(MDP)在多智能体环境下的扩展。它描述了多个智能体在一个环境中相互作用的动态过程,每个智能体的决策不仅取决于当前环境状态,还会影响其他智能体的决策以及环…...
【探商宝】大数据企业销售线索平台:销售型公司的战略转型引擎
一、市场现状与销售型公司的核心痛点 在数字经济高速发展的2025年,全球企业获客成本较五年前增长超过300%,而B2B销售线索的平均转化率仍徘徊在15%-20%之间。这一矛盾背后,折射出传统销售模式的三重困境: 数据孤岛导致决策滞后…...

用Ruby的Faraday库来进行网络请求抓取数据
在 Ruby 中,Faraday 是一个非常强大的 HTTP 客户端库,它可以用于发送 HTTP 请求并处理响应。你可以使用 Faraday 来抓取网页数据,处理 API 请求等任务。下面我将向你展示如何使用 Faraday 库进行网络请求,抓取数据并处理响应。 1.…...

Ubuntu的软件源
百度搜索 ubuntu清华镜像源 根据下面的网页,选择对应Ubuntu操作系统的源,一定要对应!!! https://mirror.tuna.tsinghua.edu.cn/help/ubuntu/上图的系统是16.04 xenial,这时就一定要使用16.04 xenial的源 …...

笔记五:C语言编译链接
Faye:孤独让我们与我们所爱的人相处的每个瞬间都无比珍贵,让我们的回忆价值千金。它还驱使你去寻找那些你在我身边找不到的东西。 ---------《寻找天堂》 目录 一、编译和链接的介绍 1.1 程序的翻译环境和执行环境 1.1.1 翻译环境 1.1.2 运行环境 …...

GitCode 助力 vue3-element-admin:开启中后台管理前端开发新征程
源码仓库: https://gitcode.com/youlai/vue3-element-admin 后端仓库: https://gitcode.com/youlai/youlai-boot 开源助力,开启中后台快速开发之旅 vue3-element-admin 是一款精心打造的免费开源中后台管理前端模板,它紧密贴合…...

SyntaxError: Invalid regular expression flag “x“
🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》、《前端求职突破计划》 🍚 蓝桥云课签约作者、…...

HiveServer2与Spark ThriftServer详细介绍对比
HiveServer2与Spark ThriftServer详细介绍对比 1、概述 1.1 HiveServer2 是 Apache Hive 提供的基于 Thrift 的服务进程,用于让远程客户端执行 Hive SQL 查询 ([一起了解一下HiveServer2 - zourui4271 - 博客园]。它是早期 HiveServer1 的改进版本,引入…...
脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)
一、数据处理与分析实战 (一)实时滤波与参数调整 基础滤波操作 60Hz 工频滤波:勾选界面右侧 “60Hz” 复选框,可有效抑制电网干扰(适用于北美地区,欧洲用户可调整为 50Hz)。 平滑处理&…...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端
🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...
鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/
使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题:docker pull 失败 网络不同,需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...

CMake 从 GitHub 下载第三方库并使用
有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...
代理篇12|深入理解 Vite中的Proxy接口代理配置
在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...

计算机基础知识解析:从应用到架构的全面拆解
目录 前言 1、 计算机的应用领域:无处不在的数字助手 2、 计算机的进化史:从算盘到量子计算 3、计算机的分类:不止 “台式机和笔记本” 4、计算机的组件:硬件与软件的协同 4.1 硬件:五大核心部件 4.2 软件&#…...
Python Einops库:深度学习中的张量操作革命
Einops(爱因斯坦操作库)就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库,用类似自然语言的表达式替代了晦涩的API调用,彻底改变了深度学习工程…...
【学习笔记】erase 删除顺序迭代器后迭代器失效的解决方案
目录 使用 erase 返回值继续迭代使用索引进行遍历 我们知道类似 vector 的顺序迭代器被删除后,迭代器会失效,因为顺序迭代器在内存中是连续存储的,元素删除后,后续元素会前移。 但一些场景中,我们又需要在执行删除操作…...
Bean 作用域有哪些?如何答出技术深度?
导语: Spring 面试绕不开 Bean 的作用域问题,这是面试官考察候选人对 Spring 框架理解深度的常见方式。本文将围绕“Spring 中的 Bean 作用域”展开,结合典型面试题及实战场景,帮你厘清重点,打破模板式回答,…...

wpf在image控件上快速显示内存图像
wpf在image控件上快速显示内存图像https://www.cnblogs.com/haodafeng/p/10431387.html 如果你在寻找能够快速在image控件刷新大图像(比如分辨率3000*3000的图像)的办法,尤其是想把内存中的裸数据(只有图像的数据,不包…...