当前位置: 首页 > ai >正文

2023-ICLR-ReAct 首次结合Thought和Action提升大模型解决问题的能力


关于普林斯顿大学和Google Research, Brain Team合作的一篇文章, 在语言模型中协同Reasoning推理和Action行动。

论文地址:https://arxiv.org/abs/2210.03629
代码:https://github.com/ysymyth/ReAct.git
其他复现 langchain :https://python.langchain.com/api_reference/langchain/agents/langchain.agents.agent.AgentExecutor.html#

作者们注意到,尽管LLMs在理解和生成方面表现出色,但它们在推理和行动方面的能力通常是分开研究的。他们提出,通过交互式的方式生成推理痕迹(reason)和任务特定行动(act),可以更有效地结合这两种能力,从而提高模型的 interpretability、trustworthiness 和解决复杂任务的能力。

数据:

  • HotpotQA: 多跳问题回答基准,需要模型跨越多个Wikipedia页面进行推理。
  • FEVER: 事实验证基准,模型必须基于Wikipedia页面验证声明的真实性。
    方法:
  • Standard(标准提示):删除ReAct轨迹中的所有思想、行动、观察等步骤。
  • CoT(思想链提示):删除行动和观察,保留思想,并作为仅用于推理的基线。
  • CoT-SC(self-consistency):利用自一致性[1]方法,在推理期间抽样21个CoT轨迹,解码温度为0.7,并采用大多数投票得到答案。
  • Act:仅仅保留Agent提示(Act),它删除了ReAct轨迹中的Thought思维过程,可以初步认为其类似于WebGPT。
  • ReAct:本文的Thought + Action结合的方法。
  • ReAct → CoT-SC:当ReAct未能在给定步骤内返回答案时,返回CoT-SC结果。
  • CoT-SC → ReAct:当n个CoT-SC样本中的大多数答案少于n/2次(即内部知识可能无法自信地支持任务)时,返回ReAct结果。
  • 微调 (Finetuning)
    • 使用3000个由ReAct生成的正确答案轨迹来微调较小的语言模型。‘’

Langchain 中实现的Prompt

PREFIX = """Answer the following questions as best you can. You have access to the following tools:""" FORMAT_INSTRUCTIONS = """Use the following format: 
shell
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""" 
SUFFIX = """Begin!Question: {input} 
Thought:{agent_scratchpad}"""

示例

from langchain.agents import initialize_agent
from langchain.llms import OpenAI
from langchain.tools import BaseTool# 搜索工具
class SearchTool(BaseTool):name = "Search"description = "如果我想知道天气,'鸡你太美'这两个问题时,请使用它"return_direct = True  # 直接返回结果def _run(self, query: str) -> str:print("\nSearchTool query: " + query)return "这个是一个通用的返回"async def _arun(self, query: str) -> str:raise NotImplementedError("暂时不支持异步")# 计算工具
class CalculatorTool(BaseTool):name = "Calculator"description = "如果是关于数学计算的问题,请使用它"def _run(self, query: str) -> str:print("\nCalculatorTool query: " + query)return "100"async def _arun(self, query: str) -> str:raise NotImplementedError("暂时不支持异步")llm = OpenAI(temperature=0.5)
tools = [SearchTool(), CalculatorTool()]
agent = initialize_agent(tools, llm, agent="zero-shot-react-description", verbose=True)print("问题:")
print("答案:" + agent.run("查询这周天气"))
print("问题:")
print("答案:" + agent.run("告诉我'鸡你太美'是什么意思"))
print("问题:")
print("答案:" + agent.run("告诉我'hello world'是什么意思"))
print("问题:")
print("答案:" + agent.run("告诉我10的3次方是多少?"))
http://www.xdnf.cn/news/9852.html

相关文章:

  • 用户隐私如何在Facebook的大数据中得到保护?
  • 5.29 打卡
  • Glide源码解析
  • STM32F407VET6学习笔记7:Bootloader跳转APP程序
  • 《仿盒马》app开发技术分享-- 订单列表页(端云一体)
  • 2025年机械化设计制造与计算机工程国际会议(MDMCE 2025)
  • Redis--缓存击穿详解及解决方案
  • 全志V853挂载sd卡
  • 多部手机连接同一wifi的ip一样吗?
  • MC0309魔法项链
  • 多模型数据库(Multi-Model Database)深度解析
  • EasyFileCount(文件查重工具) v3.0.5.1 便携版
  • 有关用easyExcel批量导入excel入库慢的调优记录
  • 深入了解linux系统—— 库的制作和使用
  • 高端装备制造企业如何选择适配的项目管理系统提升项目执行效率?附选型案例
  • Java-代码段-http接口调用自身服务中的其他http接口(mock)-并建立socket连接发送和接收报文实例
  • 生益的高速PCB板材有哪些
  • (二)开启深度学习动手之旅:先筑牢预备知识根基
  • 缓存常见问题:缓存穿透、缓存雪崩以及缓存击穿
  • zynq ad7616 调试笔记
  • 从实验室到商用!铁电液晶如何改写显示技术格局?
  • python 包管理工具uv
  • 国芯思辰| 国产四通道24位生理电采集模拟前端AFE全面替换ADS1294R,心电贴性能再飞跃
  • Docker部署项目无法访问,登录超时完整排查攻略
  • 视频监控联网系统GB28181协议中校时流程详解以及校时失败常见原因
  • 在windows环境下安装Nmap并使用
  • 2025年渗透测试面试题总结-匿名[校招]安全研究员(SAST方向)(题目+回答)
  • 2025国创赛-高教主赛道·创意组评审要点整理
  • set_property LOC约束
  • Qt 无边框窗口实现拖动与窗口控制(最小化/最大化/关闭)