ReAct源码解读-一轮循环

论文链接:https://openreview.net/forum?id=WE_vluYUL-X

数据集HotpotQA

数据集 hotpotQA 是专门用于多跳问答的数据集,它必须经过多步推理,才能得到答案

所以它是专门为多步推理,外部检索设计的

思考阶段

prompt 设计,在传输给 llm 之前,prompt 做了一下拼接

首先定义规则,告诉 llm 如何使用 React 框架语言,明确定义只能调用这 3 个函数

1.searchentity

2.lookupkeyword

3.finishanswer

之后还拼接了webthink_simple6 中的内容,做一个 few-shot 实例给 llm

最终拼接为 prompt,并添加格式化字符串f"Thought {i}:",告诉 llm 直接从 thought 开始写,并注意编号

经过分划,分别得到 thought、和 action

为什么要 llm 输出中截断 Observation 字段?

这是 react 框架的一个关键设计,为了保证Observation 必须来自环境(wikienv),而不是 LLM 自己编,传入 action,并且修改 Search 为 search,同时保留 search 中的参数,实体名大小写不被破坏

执行阶段

执行维基百科 api 搜索阶段

对于 search_step 需要进行一些修改,传入 headers 字段,以应对最新的反爬机制

对 serach_step 函数逻辑做了一些修改后

search_step 执行对维基百科网站的请求,搜索 llm 写的 search 中的 entity 字段,如果 entity 匹配维基百科搜索页面的标题则完成精确匹配,返回 page ,page 经过去除换行,空白字符后作为 obs 返回,即 observation 给到 llm

再拼接之前的 thought 和 action,observation 回到循环开始处,交由 llm 进行思考下一步策略

如果某次执行的 action 为 finish,则表明 llm 认为找到了答案,此时在路由函数 step 中走到 finish 分支,会叫停循环,并在 wrappers.py 中完成评分

运行实例

通过这个比较任务,直观感受 react 框架,思考->执行->观察的工作流

第一次思考,得出先查询Scott Derrickson 的信息,给出SearchScott Derrickson

调用 search 工具

得到精确匹配的结果作为观察结果

输入到第二次 llm 调用后,得到以下思考

工具调用

第三次思考,任务结束

与标准答案对比后,得出答案正确,reward 为 1,f1socre 为 1

相关推荐
roman_日积跬步-终至千里1 小时前
AI 能让一个人成为团队吗?从数据中台到 OPC,重新理解软件工程能力
大数据·人工智能·软件工程
在所不辞兄1 小时前
为什么神经网络在训练集损失已接近零后继续训练,测试性能仍可能继续提升,而不是单纯地越来越过拟合?
人工智能·深度学习·神经网络·机器学习·智能仿真
AI砖家1 小时前
ChatGPT Images 2.6 正式支持 GIF 生成:一张图片也能动起来,AI 动图创作时代来了!
人工智能·chatgpt
希和20272 小时前
免费AI视频生成工具汇总(国内优先,适合做漫剧、短视频,Obsidian笔记版)
人工智能·笔记·音视频
水如烟2 小时前
孤能子视角:逆溯法(存稿)——从终点参照解往回拆必经关卡
人工智能
积流成海2 小时前
Agent演化史(九):多智能体的暗面,当一次 prompt 注入可以横向移动
prompt·agent·智能体·大模型应用
用户2991422196802 小时前
GitHub 热榜项目:周榜(2026-11-08)
人工智能·开源·github
天天被压力3 小时前
【A股分钟级高频数据完全手册 #07】北交所历史分钟K线接口:京市Pro版分时批量
java·人工智能·python
用户2991422196803 小时前
AI 日报(2026年11月8日)
人工智能
天天被压力3 小时前
【A股分钟级高频数据完全手册 #08】股票日、分时数据接口对比:普通分时与Pro版差异实测
java·人工智能·python