[论文笔记]REACT: SYNERGIZING REASONING AND ACTING IN LANGUAGE MODELS

引言

今天带来一篇经典论文REACT: SYNERGIZING REASONING AND ACTING IN LANGUAGE MODELS的阅读笔记,论文中文意思是 在语言模型中协同推理和行动。

虽然大型语言模型(LLMs)在语言理解和互动决策任务中展现出强大的能力,但它们在推理(例如思维链提示)和行动(例如行动计划生成)方面的能力主要被研究为独立的主题。在本篇工作中,作者探讨了使用LLMs以交错方式生成推理轨迹和任务特定行动的方法,从而在两者之间实现更大的协同作用:推理轨迹帮助模型归纳、跟踪和更新行动计划,并处理异常情况,而行动则使其能够与外部源(如知识库或环境)进行接口交互并收集额外信息。

作者将该方法命名为ReAct。

1 总体介绍

人类智能的一个独特特征是能够将面向任务的行动与语言推理无缝结合,据理论推测,这在人类认知中发挥着重要作用,能够实现自我调节或策略化并维持工作记忆。以在厨房里烹饪一道菜为例。在任何两个具体行动之间,我们可能会用语言进行推理,以跟踪进展(“现在所有东西都切好了,我应该把锅里的水烧热”),处理异常情况或根据情况调整计划(“我没有盐,所以我用酱油和胡椒代替”),以及意识到需要外部信息时(“我该如何准备面团?让我在互联网上搜索一下”)。我们也会采取行动(打开食谱书阅读食谱,打开冰箱,检查食材)来支持推理并回答问题(“我现在能做什么菜?”)。这种“行动”和“推理”之间紧密的协同作用使人类能够快速学习新任务,并在以前未见情况下或面对信息不确定性时执行强大的决策或推理。

最近的研究结果表明了将语言推理与交互式决策在自主系统中结合的可能性。一方面,适当提示1的大型语言模型(LLMs)已经展示了进行推理步骤以从算术、常识和符号推理任务中提取答案的新能力。然而,这种思维链推理是一个静态黑匣子,模型使用自己的内部表示来生成思维,而不是基于外部世界,这限制了其反应性推理或更新知识的能力。这可能导致在推理过程中出现事实幻觉和错误传播等问题。另一方面,最近的研究探讨了在交互环境中使用预训练语言模型进行规划和行动,重点是通过语言先验来预测行动。这些方法通常将多模态观察转换为文本,使用语言模型生成领域特定的行动或计划,然后使用控制器选择或执行它们。然而,它们并没有利用语言模型对高级目标进行抽象推理或维护工作记忆以支持行动,除了Huang等人2对当前状态的空间事实进行有限形式的言语推理。除了与几个方块互动的简单具体任务外,还没有研究如何以协同方式将推理和行动结合起来以进行一般任务解决,并且这种组合是否可以相对于单独推理或行动带来系统性的好处。

image.png

在这项工作中,作者提出了ReAct,一种将推理和行动与语言模型结合以解决各种语言推理和决策任务的通用范式(如上图)。ReAct提示LLMs以交错方式生成与任务相关的语言推理轨迹和行动,使模型能够进行动态推理以创建、维护和调整用于行动的高级计划(推理到行动),同时与外部环境(例如维基百科)交互以将额外信息纳入推理(行动到推理)。作者在四个不同基准测试上对ReAct和最先进的基线进行了实证评估:问题回答(HotPotQA)、事实验证(Fever)、基于文本的游戏(ALFWorld)、网页导航(WebShop)。对于HotPotQA和Fever,在模型可以与维基百科API交互的情况下,ReAct在超越普通行动生成模型的同时,可以与思维链推理竞争。

总体而言,最佳方法是ReAct和CoT的结合,允许在推理过程中同时使用内部知识和外部获取的信息。在ALFWorld和WebShop上,即使是一个或两个提示的ReAct也能够在成功率上超越使用 1 0 3 ∼ 1 0 5 10^3 ∼ 10^5 103105个任务实例训练的模仿或强化学习方法,分别绝对提高了34%和10%。作者还展示了在决策制定中稀疏、多功能推理(versatile reasoning)的重要性,通过显示相对于仅具有行动的对照基线一直具有一致的优势。除了一般适用性和性能提升外,推理和行动的结合还有助于模型的可解释性、可信度和诊断能力,在所有领域中,人类可以轻松区分模型内部知识和外部环境的信息,并检查推理轨迹以理解模型行动的决策基础。

作者的主要共享包括:

  1. 介绍了ReAct,一种新颖的基于提示的范式,用于在语言模型中协同推理和行动以进行通用任务解决;
  2. 在各种基准测试中进行了广泛实验,展示了ReAct在少量学习设置中相对于之前单独进行推理或行动生成的方法的优势;
  3. 进行了系统的切除和分析,以理解行动在推理任务中的重要性,以及推理在交互任务中的重要性;
  4. 分析了ReAct在提示设置下的局限性(即推理和行动行为的有限支持),并进行了初步的微调实验。

2 REACT:协同推理和行动

考虑一个智能体与环境互动以解决任务的一般设置中。智能体在时间步 t t t接收来自环境的观察 o t ∈ O o_t ∈ \mathcal O otO,并根据某些策略 π ( a t ∣ c t ) π(a_t|c_t) π(atct)采取行动 a t ∈ A a_t ∈ \mathcal A atA,其中 c t = ( o 1 , a 1 , ⋅ ⋅ ⋅ , o t − 1 , a t − 1 , o t ) c_t = (o_1, a_1, · · · , o_{t−1}, a_{t−1}, o_t) ct=(o1,a1,⋅⋅⋅,ot1,at1,ot)是智能体的上下文。当映射 c t → a t c_t \rightarrow a_t ctat是非隐式并且需要大量计算时,学习策略变得具有挑战性。

例如,如图1(1c)所示的智能体无法生成正确的最终动作(Act 4)来完成QA任务,因为这需要对轨迹上下文(问题,Act 1-3,Obs 1-3)进行复杂推理。类似地,如图1(2a)所示的智能体无法从上下文中理解到sinkbasin 1不包含peppershaker 1,因此不断产生错误的行动。

ReAct的想法很简单:将智能体的行动空间增加到 A ^ = A ∪ L \hat{ \mathcal {A}} = \mathcal A \cup \mathcal L A^=AL,其中 L \mathcal L L是语言空间。语言空间中的一个行动 a ^ t ∈ L \hat a_t \in \mathcal L a^tL,作者将其称为思考或推理轨迹,不会影响外部环境,因此不会产生观察反馈。相反,一个思考 a ^ t \hat a_t a^t的目的是通过对当前上下文 c t c_t ct进行推理来组成有用的信息,并更新上下文 c t + 1 = ( c t , a ^ t ) c_{t+1} =(c_t,\hat a_t) ct+1=(ct,a^t)以支持未来的推理或行动。

如图1所示,可能存在各种类型的有用思考,例如分解任务目标并创建行动计划(2b, Act 1;1d,Thought 1),注入与任务解决相关的常识知识(2b, Act 1),从观察中提取重要部分(1d, Thought2, 4),跟踪进展并转移行动计划(2b, Act 8),处理异常并调整行动计划(1d, Thought 3)等等。然而,由于语言空间 L \mathcal L L是无限的,学习在这种增强的行动空间中是困难的,并且需要强大的语言先验。在本篇工作中,主要关注这样一个设置:一个冻结的大型语言模型PaLM-540B 接受少样本在上下文中示例的提示,以生成领域特定的行动和自由形式的语言思考,用于任务解决。对于决策和推理能力至关重要的任务(图1(1)),我们交替生成思考和行动,以使任务解决轨迹包含多个思考-行动-观察步骤。相比之下,对于可能涉及大量行动的决策任务(图1(2)),思考只需要在轨迹中最相关的位置间隔出现,因此我们让语言模型自行决定思考和行动的异步发生。由于决策制定和推理能力集成在一个大语言模型中,ReAct具有几个独特的特点:

A) 直观且易于设计:设计ReAct提示非常简单,因为人类标注者只需在他们采取的行动之上用语言键入他们的思考。本文中没有使用特定的格式选择、思考设计或示例选择。

B) 通用且灵活:由于灵活的思考空间和思考-行动发生格式,ReAct适用于具有不同行动空间和推理需求的各种任务,包括但不限于问答、事实验证、文本游戏和网络导航。

C) 性能优越且稳健:ReAct在仅从一个到六个上下文示例中学习时对新任务实例具有很强的泛化能力,始终优于仅具有推理或行动的基线模型跨不同领域。

D) 与人类对齐且可控:ReAct承诺一种可解释的顺序决策制定和推理过程,人类可以轻松检查推理和事实的正确性。此外,人类还可以通过思考编辑来控制或纠正智能体的行为,正如后面的图5所示。

3 知识密集型推理任务

知识密集型的推理任务,例如多跳问答和事实验证。通过与维基百科API进行交互,ReAct能够检索支持推理的信息,并使用推理来确定下一步要检索的内容,展示了推理和行动的协同效应。

3.1 设置

领域 考虑了两个具有挑战性的知识检索和推理数据集:(1)HotPotQA,一个需要对两个或更多维基百科段落进行推理的多跳问题回答基准测试,以及(2)FEVER ,一个事实验证基准测试,每个声明被注释为"支持"、“反驳"或"信息不足”,基于是否存在维基百科段落来验证该声明。在本工作中,作者在这两个任务中都采用了仅问题的设置,模型只接收问题/声明作为输入,没有访问支持段落的权限,必须依靠其内部知识或通过与外部环境的交互来支持推理。

动作空间 作者设计了一个简单的维基百科网页API,提供三种类型的动作来支持交互式信息检索:(1) search[entity],如果实体的维基页面存在,则返回对应实体维基页面的前5个句子,否则建议从维基百科搜索引擎中选择前5个相似实体;(2) lookup[string],返回包含字符串的页面中的下一个句子,模拟浏览器上的Ctrl+F功能;(3) finish[answer],完成当前任务并给出答案。

这个动作空间通常只能根据精确的段落名称检索到段落的一小部分,远远不及最先进的词汇或神经网络检索器。其目的是模拟人们如何与维基百科进行交互,并强迫模型通过语言中的显式推理来检索。

3.2 方法

ReAct提示 对于HotpotQA和Fever,从训练集中随机选择了6个和3个案例,手动组成了ReAct格式的轨迹,作为一些少样本示例用于提示。类似于图1(d),每个轨迹由多个思考-行动-观察步骤(即密集思考)组成,其中自由形式的思考用于各种目的。具体而言,使用一系列思考来分解问题(我需要搜索x,找到y,然后找到z),从维基百科的观察中提取信息("x是在1844年开始的","这段话没有提到x"),进行常识推理("x不是y,所以z必须是...")或算术推理("1844 < 1989"),引导搜索重构("也许我可以搜索/查找x代替"),并综合得出最终答案("...所以答案是x")。更多详细信息请见附录C。

基线 系统地剔除了ReAct轨迹的一些部分,构建了多个基线的提示(格式如图1(1a-1c)):(a) 标准提示 (Standard),移除所有的思考、行动和观察。 (b)思维链提示 (Chain-of-thought, CoT),移除行动和观察,作为仅有推理的基线。还构建了一个一致性基线 (CoT-SC) ,在推理期间使用解码温度为0.7的21个CoT轨迹进行采样,并采用多数答案,发现这种方法能够稳定提升CoT的性能。©仅行动提示 (Act),移除ReAct轨迹中的思考,粗略地类似于WebGPT如何与互联网进行交互以回答问题,尽管它在任务和行动空间上有所不同,并且使用的是模仿学习和强化学习而不是提示。

结合内部和外部知识 ReAct所展示的问题解决过程更加事实和具体,而CoT在构建推理结构方面更准确,但容易出现虚构的事实或思考。因此,作者将ReAct和CoT-SC结合起来,让模型根据以下启发式规则决定何时切换到另一种方法:

A) ReAct → CoT-SC:当ReAct在给定步骤内无法返回答案时,退回到CoT-SC。为HotpotQA和FEVER设置了7步和5步,因为更多的步骤不会提高ReAct的性能。

B) CoT-SC → ReAct:当n个CoT-SC样本中的多数答案出现次数小于n/2时(即内部知识可能不够自信地支持任务),退回到ReAct。

微调 由于在大规模手动注释推理轨迹和行动上存在挑战,采用了类似于Zelikman等人的自举方法,使用ReAct(以及其他基线模型)生成的3000个包含正确答案的轨迹,来微调较小的语言模型(PaLM-8/62B)以在输入问题/声明的条件下解码轨迹(包括所有思考、行动、观察)。

3.3 结果与观察

image-20240521095311641

ReAct在两个任务上均表现出色 表1展示了使用PaLM540B作为基础模型的HotpotQA和Fever结果,使用不同的提示方法。ReAct在两个任务上表现优于Act,展示了推理在指导行动方面的价值,特别是在综合最终答案方面,如图1(1c-d)所示。微调结果也证实了推理轨迹对于更加明智的行动的好处。

image-20240521095756699

ReAct vs. CoT 另一方面,ReAct在Fever上的表现优于CoT,而在HotpotQA上稍逊于CoT。Fever中的SUPPORTS/REFUTES之间的差异可能只有很小的量,因此检索准确和最新的知识是至关重要的。为了更好地理解ReAct和CoT在HotpotQA上的行为差异,作者分别从ReAct和CoT中随机抽样了50个轨迹,其中包括正确答案和错误答案(由EM判断)(总共200个样本),并在表2中标记了它们的成功和失败模式。以下是一些关键观察结果:

A) 幻觉是CoT的严重的问题 导致其在成功模式下的误报率远高于ReAct,并成为其主要的失败模式。相比之下,ReAct的问题解决轨迹更加扎实、以事实为导向,更值得信赖,这要归功于它可以访问外部知识库。

B) 虽然交错推理、行动和观察步骤可以提高ReAct的扎实性和可信度,但这种结构约束也降低了它在制定推理步骤方面的灵活性,导致其推理错误率比CoT更高 ReAct中存在一种经常出现的错误模式,即模型反复生成先前的思考和行动,将其归类为“推理错误”的一部分,因为模型无法推理出下一步采取的正确行动并跳出循环(可能使用束搜索能解决该问题)。

C) 对于ReAct来说,通过搜索成功地检索到有信息量的知识至关重要 23%的错误案例属于非信息性搜索,这会使模型的推理偏离轨道,使其难以恢复和重构思考。这或许是事实性和灵活性之间的一种预期权衡,这也激发了将两种方法结合起来的策略。

ReAct + CoT-SC对LLM的提示效果最好 如表1所示,HotpotQA和Fever的最佳提示方法分别是ReAct → CoT-SC和CoT-SC → ReAct。此外,图2显示了不同方法在使用不同数量的CoT-SC样本时的表现。虽然两种ReAct + CoT-SC方法在一个任务上具有优势,但它们在不同数量的样本上都显著且一致地优于CoT-SC,仅使用3-5个样本就能达到使用21个样本时的CoT-SC性能。这些结果表明,将模型内部知识和外部知识合理结合对于推理任务是有价值的。

image-20240521095836064

ReAct对于微调效果最好 图3展示了在HotpotQA上对四种方法(Standard、CoT、Act、ReAct) 进行提示/微调的规模效应。使用PaLM-8/62B,由于从上下文示例中学习推理和行动的困难,ReAct的提示效果是四种方法中最差的。然而,当仅使用3000个示例进行微调时,ReAct成为了四种方法中最好的方法。相比之下,Standard或CoT的微调对于PaLM8/62B来说要差得多,因为前者本质上教导模型记住(可能是虚构的)知识事实,而后者教导模型如何(推理并)通过访问维基百科来获取信息,这是一种对于知识推理更具普适性的技能。由于所有提示方法仍然远远落后于特定领域最先进的方法(表1),作者相信使用更多人工编写的数据进行微调可能是释放ReAct潜力的更好方式。

4 决策任务

5 相关工作

6 结论

ReAct是一种结合推理和行动的方法,用于提高大型语言模型的性能。它在各种任务中表现出色,并具有可解释的决策路径。通过更多的人类注释进行微调和通过多任务训练扩展,可以进一步提高性能。

总结

⭐ 作者结合了推理和行动以交错方式生成推理轨迹和任务特定行动的方法,用于通用任务的解决。

参考


  1. Chain-of-Thought Prompting Elicits Reasoning in Large Language Models ↩︎

  2. Inner Monologue: Embodied Reasoning through Planning with Language Models ↩︎

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【计算机毕业设计】基于SSM++jsp的实验室耗材管理系统【源码+lw+部署文档】

目录 第1章 绪论 1.1 课题背景 1.2 课题意义 1.3 研究内容 第2章 开发环境与技术 2.1 MYSQL数据库 2.2 JSP技术 2.3 SSM框架 第3章 系统分析 3.1 可行性分析 3.1.1 技术可行性 3.1.2 经济可行性 3.1.3 操作可行性 3.2 系统流程 3.2.1 操作流程 3.2.2 登录流程 3.2.3 删除信息流…

0基础学习Mybatis系列数据库操作框架——Mysql的Geometry数据处理之WKB方案

大纲 序列化反序列化完整TypeHandlerSQL XML完整XML Mapper测试代码代码 在《0基础学习Mybatis系列数据库操作框架——Mysql的Geometry数据处理之WKT方案》中&#xff0c;我们介绍WTK方案的优点&#xff0c;也感受到它的繁琐和缺陷。比如&#xff1a; 需要借助ST_GeomFromText…

B站自动回复插件_无需千粉,轻松适配引流拉新资源分享

项目介绍 B站关键词自动回复插件&#xff0c;无需千粉&#xff0c; 很适合做流量做引流做私欲的朋友&#xff0c; 前期没有千粉是无法开启官方自动回复的&#xff0c; 适当的情况下可以用这个插件顶一下&#xff0c; 三联好评领取资源的打法真的超级涨粉&#xff0c; 感谢插件…

YOLOv5改进 | 主干网络 | 用EfficientNet卷积替换backbone【教程+代码 】

&#x1f4a1;&#x1f4a1;&#x1f4a1;本专栏所有程序均经过测试&#xff0c;可成功执行&#x1f4a1;&#x1f4a1;&#x1f4a1; 在YOLOv5的GFLOPs计算量中&#xff0c;卷积占了其中大多数的比列&#xff0c;为了减少计算量&#xff0c;研究人员提出了用EfficientNet代替b…

霍启刚弟弟求婚成功❗霍启仁豪门家族地位与爱情如何抉择?

霍启刚的弟弟霍启仁在社交媒体上宣布求婚成功 他与泰国女友在浪漫的船上场景中 单膝下跪为她戴上象征爱情的戒指 两人紧紧相握的双手&#xff0c;在镜头前展现了无尽的甜蜜与温馨 霍启仁&#xff0c;出生于1988年10月12日 是香港特别行政区立法会议员霍震霆与朱玲玲的第三个…

pytorch-13_2 模型结构选择策略:层数、激活函数、神经元个数

一、拟合度概念 在所有的模型优化问题中&#xff0c;最基础的也是最核心的问题&#xff0c;就是关于模型拟合程度的探讨与优化。根据此前的讨论&#xff0c;模型如果能很好的捕捉总体规律&#xff0c;就能够有较好的未知数据的预测效果。但限制模型捕捉总体规律的原因主要有两点…

CAD怎么画角度?介绍三种具体操作

CAD怎么画角度&#xff1f;在现代设计与制造领域&#xff0c;计算机辅助设计&#xff08;CAD&#xff09;软件的存在极大地提高了设计师和工程师的工作效率。在CAD软件中&#xff0c;绘制角度是一项基础而重要的技能&#xff0c;它广泛应用于机械设计、建筑设计、电子电路布局等…

WPF水流动画(使用转换器模拟逻辑门控制水流信号)

前言 在使用WPF绘制流程图并模拟水流动画时&#xff0c;往往既需要控制阀泵的开合&#xff0c;又要控制动画启停。倘若能够将阀泵的开合与动画播放建立逻辑关系&#xff0c;这样就能够让业务代码“专心”地去控制阀泵开关&#xff0c;而不需要处理界面的展示。 动画示例 说明…

【设计模式深度剖析】【5】【创建型】【原型模式】| 类比群发邮件,加深理解

&#x1f448;️上一篇:建造者模式 | 下一篇:创建型设计模式对比&#x1f449;️ 目录 原型模式(Prototype Pattern)概览定义英文原话直译 3个角色类图1. 抽象原型&#xff08;Prototype&#xff09;角色2. 具体原型&#xff08;Concrete Prototype&#xff09;角色3. 客户…

Upstream最新发布2024年汽车网络安全报告-百度网盘下载

Upstream最新发布2024年汽车网络安全报告-百度网盘下载 2024年2月7日&#xff0c;Upstream Security发布了2024年Upstream《GLOBAL AUTOMOTIVE CYBERSECURITY REPORT》。这份报告的第六版着重介绍了汽车网络安全的拐点&#xff1a;从实验性的黑客攻击发展到规模庞大的攻击&…

【文心智能体】创建一个属于自己的生活情感类智能体

文章目录 前言一、创建智能体二、体验 前言 智能体技术的快速发展&#xff0c;进一步激发了各行业开发者对其实际应用及用户需求的深入探索。 创建一个属于自己的智能体。文心一言提供了一个很好的平台。 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考…

“智”造产业新生态,2024SIA上海自动化展会乘势而来!

今年两会&#xff0c;我们频频听到一个热词“新质生产力”。当前&#xff0c;“加快形成新质生产力”已成为实体经济创新发展的具体指向。如何在加快形成新质生产力的新赛道上快马加鞭&#xff0c;成为下一个时代的领跑者&#xff0c;是制造业亟需面临的思考题。 在良好的市场环…

---随笔--Redis的学习以及在Spring Boot中的整合使用(RedisTemplate、Redisson分布式锁)

---随笔--Redis的学习以及在Spring Boot中的整合使用&#xff08;RedisTemplate、Redisson分布式锁&#xff09; 引言1. 什么是Redis2. Redis的数据结构3. Redis其它常用命令4. 小插曲之Redis面试常考5. 正篇&#xff1a;Redis在Spring Boot中的使用&#xff01;&#xff08;着…

NE555+74ls160+74LS20数电数字钟Multisim仿真设计

设计框图 数字钟电路的基本组成框架图如图一所示&#xff0c;它主要由多谐振荡器、计数器、译码器和数码显示器4个部分组成。 图一 数字钟电路的基本组成&#xff08;方框图&#xff09; 2、设计方案 数字钟是一个将“时”&#xff0c;“分”&#xff0c;“秒”显示于人的视…

初始MyBatis ,详细步骤运行第一个MyBatis程序,同时对应步骤MyBatis底层剖析

1. 初始MyBatis &#xff0c;详细步骤运行第一个MyBatis程序&#xff0c;同时对应步骤MyBatis底层剖析 文章目录 1. 初始MyBatis &#xff0c;详细步骤运行第一个MyBatis程序&#xff0c;同时对应步骤MyBatis底层剖析每博一文案2. 前沿知识2.1 框架&#xff08;framework&#…

jdk17安装教程详细(jdk17安装超详细图文)

2021年9月14日JDK17 发布&#xff0c;其中不仅包含很多新语言功能&#xff0c;而且与旧版 JDK 相比&#xff0c;性能提升也非常明显。与之前 LTS 版本的 JDK 8 和 JDK 11 相比&#xff0c;JDK17 的性能提升尤为明显&#xff0c;本文将教你如何安装 相比于JDK1.8&#xff0c;JD…

【Crypto】看我回旋踢

文章目录 一、看我回旋踢二、知识点什么是ROT13&#xff1f;工作原理分析字符串格式 解题感悟 一、看我回旋踢 关键词回旋&#xff0c;盲猜ROT13 因为以 synt{ 开头&#xff0c;并以 } 结束&#xff0c;基本可以判断是ROT13 小小flag&#xff0c;拿下&#xff01; 二、知识点 …

Python中动态调用C#的dll动态链接库中方法

在Python中调用C#的dll库_哔哩哔哩_bilibili 环境准备&#xff1a; 安装 pythonnet pip install pythonnet在Python中调用C#动态链接库&#xff08;DLL&#xff09;&#xff0c;可以使用pythonnet库&#xff0c;它允许直接使用 .NET 的程序集。以下是一个示例&#xff0c;…

1+x(Java)中级题库易混淆理论题

<ALL表示小于最小 小于最高等同于小于ANY 使用USING子句&#xff0c;在使用连接字段时&#xff0c;都不能在前面加上表的前缀&#xff0c;因为此时这个字段已经是连接字段&#xff0c;不再属于某个单独的表。 数据库提供的自动将提供的数据类型数据转换为期望的数据类…

go select 原理

编译器会使用如下的流程处理 select 语句&#xff1a; 将所有的 case 转换成包含 channel 以及类型等信息的 runtime.scase 结构体。调用运行时函数 runtime.selectgo 从多个准备就绪的 channel 中选择一个可执行的 runtime.scase 结构体。通过 for 循环生成一组 if 语句&…