检索增强生成与思维链结合的RAT创建方法
检索增强思维(RAT)融合检索增强生成与思维链提示,通过迭代检索外部知识修正思维链,提升大语言模型推理准确性。实验显示,代码生成、数学推理、创意写作及任务规划性能分别提升13 63%、16 96%、19 2%和42 78%。
检索增强思维(RAT):当推理链条遇上知识检索
论文地址:https://arxiv.org/pdf/2403.05313
Github地址:https://github.com/CraftJarvis/RAT
先抛个问题:一个能写出莎士比亚风格文字、还能像专家一样推理的AI助手,听起来是不是很酷?但问题在于——如果它动不动就编造事实、依赖过时信息,甚至一本正经地胡说八道,那该怎么办?这正是大型语言模型(LLM)当前面临的核心矛盾:流畅有余,可靠不足。
检索增强思维 (RAT) 正是为化解这一矛盾而生。它巧妙地将两种关键技术——检索增强生成(RAG)和思维链(CoT)提示——融为一体,旨在让AI的推理过程既透明又扎实。RAT不仅仅是一个新技术名词,它代表了一种全新的AI推理范式。下面,我们就来把它的来龙去脉彻底拆解一番。
在进入正题之前,先回顾一下提示工程的基础。想象你有一个超智能助手,你给它一个“提示”,相当于给它下达指令——写故事、翻译语言、回答问题,全看你怎么说。提示工程就是教会你如何把这套指令用好,把LLM的潜力榨干。从零样本、少样本,到思维链、指导性提示,每一种技术都有其适用场景。
而RAT,正是站在这些技术肩膀上的新产物。它融合了两股力量:RAG负责注入知识,CoT负责展示推理过程。
检索增强生成(RAG):知识注入器
做数学题时,如果有一个随时可以翻看的公式手册,正确率会不会高很多?RAG扮演的就是这个角色。它允许LLM在推理过程中,从外部知识库(比如百科、论文、代码库)里实时拉取相关信息。这样一来,每一步推理都有事实依据支撑,凭空编造的可能性大幅降低。
思维链(CoT):让思考过程显形
大型语言模型擅长生成文本,但在解决需要逐步推理的复杂问题(比如应用题)时,很容易掉链子。
CoT提示就是针对这个软肋而来的——它鼓励LLM把思考过程“说出来”。不再只给最终答案,而是像数学课上演算那样,把每一步推导都写出来。具体有两种实现方式:
- 零样本提示:在提示中加上“让我们一步一步思考”这类关键词,引导模型自动拆解步骤。
- 少样本提示:先给模型看几个正确示范,告诉它“按这个套路走”。
但CoT也有自己的坑。最突出的两个:
- 模型可能犯错:如果它对主题了解不足,推理链条本身就是错的。
- 模型可能钻牛角尖:一旦进入错误方向,就很难拉回来。
思维链提示使大型语言模型能够解决复杂的算术、常识和符号推理任务。图中突出展示了思维链推理过程。
少样本提示是给示例,让模型模仿;思维链提示则从头到尾展示推理过程,特别适合需要符号推理和中间步骤的复杂任务。对大模型效果好,对小型模型则可能出现奇怪的推理链条。在某些情况下,也可以用零样本思维链直接上手。
RAT:知识与思维链的结合
检索增强思维(RAT) 的思路其实很直观:先让LLM生成一个零样本的思维链(CoT),然后把这个链条作为“提问”,逐一进行检索增强——从外部资料里找回相关信息,修正当前步骤,再继续下一步。如此迭代,最终答案自然越来越扎实。
实验数据很有说服力:把RAT用在各种基础模型上,长视域生成任务的表现全面飙升。平均来看,代码生成评分提升13.63%,数学推理提升16.96%,创意写作提升19.2%,具体任务规划更是猛增42.78%。
检索增强思维 (RAT) 的管道。给定一个任务提示(在图中表示为 I),RAT 从 LLM 在零样本(“让我们一步一步思考”)中产生的初始分步思维(?1、?2、· · ·、??)开始。由于幻觉,某些思维步骤(例如图中的 ?1)可能存在缺陷。RAT 使用来自外部知识库(表示为 Library)的 RAG 迭代地修改每个思维步骤。
上图把RAT的流水线讲得很清楚。关键的模块和流程如下:
步骤0:初稿
- 向LLM提交任务提示。图中示例是“如何在Minecraft中获取钻石”。
步骤1-步骤n:迭代细化
- LLM根据提示生成初始回答(零样本CoT),但这个回答往往有缺陷。
- RAT引入CoT提示,让LLM通过解释每一步的理由(Ti),反复修正自己的答案。
关键组件
- 任务提示:起点,告诉LLM要解决什么问题。
- LLM:就是大语言模型本身。
- 初始CoT与修订CoT(Ti-1、Ti):迭代过程中初始和修正后的思维链。
- 知识库:LLM通过RAG访问的外部知识来源。
- 增强修订:模型根据检索到的信息和之前的解释,逐步完善思维链(Ti)。
RAT具体流程
- 初始响应:LLM根据提示生成初始回答(T0)。
- 解释:LLM解释初始回答背后的原因(T1-1)。
- 检索:RAT根据这个解释,从知识库中拉取相关信息。
- 修订:LLM把检索到的信息整合进去,修正思维链(T1)。
- 重复:重复步骤2-4,直到获得满意答案(Tn)。
下面这张图展示了RAT如何通过结合外部知识检索和逐步解释,解决LLM在复杂推理任务上的瓶颈。
图 | 上:不同 LLM 推理方法在创意生成任务上的示例。红色文本表示 LLM 生成的文本中的错误或错觉,而绿色文本表示正确生成。没有 RAG 的方法通常会产生带有幻觉的不正确信息,经典 RAG 与结构松散的检索内容高度相关,而 RAT 生成的文本在准确性和完整性方面表现最佳。下:不同 LLM 推理方法在复杂的具身规划、数学推理、代码生成和创意生成任务上的定量性能比较。我们的 RAT 在所有任务上的表现都优于所有基线。
RAT核心代码
https://github.com/CraftJarvis/RAT/blob/main/app/gradio_app.py
代码实现如下(关键函数 rat(question)):
def rat(question):
print(f"{datetime.now()} [INFO] Generating draft...")
draft = get_draft(question)
print(f"{datetime.now()} [INFO] Return draft.")
# print(f"##################### DRAFT #######################")
# print(draft)
# print(f"##################### END #######################")
print(f"{datetime.now()} [INFO] Processing draft ...")
# draft_paragraphs = split_draft(draft)
draft_paragraphs = split_draft_openai(question, draft)
print(f"{datetime.now()} [INFO] Draft is splitted into {len(draft_paragraphs)} sections.")
answer = ""
for i, p in enumerate(draft_paragraphs):
# print(str(i)*80)
print(f"{datetime.now()} [INFO] Revising {i+1}/{len(draft_paragraphs)} sections ...")
answer = answer + 'nn' + p
# print(f"[{i}/{len(draft_paragraphs)}] Original Answer:n{answer.replace(newline_char, ' ')}")
# query = get_query(question, answer)
print(f"{datetime.now()} [INFO] Generating query ...")
res = run_with_timeout(get_query_wrapper, 30, question, answer)
if not res:
print(f"{datetime.now()} [INFO] Generating query timeout, skipping...")
continue
else:
query = res
print(f">>> {i}/{len(draft_paragraphs)} Query: {query.replace(newline_char, ' ')}")
print(f"{datetime.now()} [INFO] Crawling network pages ...")
# content = get_content(query)
res = run_with_timeout(get_content_wrapper, 30, query)
if not res:
print(f"{datetime.now()} [INFO] Parsing network pages timeout, skipping ...")
continue
else:
content = res
LIMIT = 2
for j, c in enumerate(content):
if j >= LIMIT: # limit rge number of network pages
break
print(f"{datetime.now()} [INFO] Revising answers with retrieved network pages...[{j}/{min(len(content),LIMIT)}]")
# answer = get_revise_answer(question, answer, c)
res = run_with_timeout(get_revise_answer_wrapper, 30, question, answer, c)
if not res:
print(f"{datetime.now()} [INFO] Revising answers timeout, skipping ...")
continue
else:
diff_html = generate_diff_html(answer, res)
display(HTML(diff_html))
answer = res
print(f"{datetime.now()} [INFO] Answer revised [{j}/{min(len(content),3)}]")
# print(f"[{i}/{len(draft_paragraphs)}] REVISED ANSWER:n {answer.replace(newline_char, ' ')}")
# print()
res = run_with_timeout(get_reflect_answer_wrapper, 30, question, answer)
if not res:
print(f"{datetime.now()} [INFO] Reflecting answers timeout, skipping next steps...")
else:
answer = res
return draft, answer
代码逻辑可以拆成几个核心步骤:
- 生成初始草稿:用GPT-3.5-turbo生成一个初始答案(
draft),基于用户问题,但可能包含错误或不完整信息。 - 分割草稿:把草稿切成多个段落(
draft_paragraphs),每个段落对应一个完整思路,方便逐段修正。 - 逐段修正:对每个段落,生成一个检索查询(
query),从网络拉取相关信息,然后根据检索内容修正当前段落。一个段落允许拉取最多2个网页内容。 - 结构化输出:修正完成后,为最终答案添加标题和副标题。
- 返回结果:返回初始草稿和修正后的最终答案。
举个例子,假设用户问“介绍爱因斯坦的生平和成就”:
- 初始草稿生成后,分割成“早期生活”“科学成就”“晚年生活”三段。
- 对每一段分别生成检索查询(比如“爱因斯坦的早期生活”),拉取信息,依次修正。
- 最后输出带标题和副标题的完整答案。
代码中用到的一组提示语如下:
prompt1 = """
尝试用逐步的思考来回答这个问题指令,并使答案更具结构化。
使用 `nn` 来将答案分成几个段落。
直接响应指令。除非被要求,否则不要在答案中添加额外的解释或介绍。
"""
prompt2 = """
我想验证给定问题的内容准确性,特别是最后几句话。
请用相应的问题总结内容。
这个总结将被用作必应搜索引擎的查询。
查询应该简短,但需要足够具体,以确保必应能够找到相关知识或页面。
您还可以使用搜索语法,使查询足够简短和清晰,以便搜索引擎能够找到相关的语言数据。
尽量使查询与内容中的最后几句话尽可能相关。
**重要**
直接输出查询。除非被要求,否则不要在答案中添加额外的解释或介绍。
"""
prompt3 = """
我想根据在维基百科页面上学到的相关文本来修订答案。
你需要检查答案是否正确。
如果你在答案中发现了错误,请修订答案使其更好。
如果你发现有些必要的细节被忽略了,请根据相关文本添加这些细节,以使答案更加可信。
如果你发现答案是正确的且不需要添加更多细节,请直接输出原始答案。
**重要**
尽量保持修订后答案的结构(多个段落及其子标题),使其更具结构性以便理解。
用 `nn` 字符分隔段落。
直接输出修订后的答案。除非被要求,否则在修订后的答案中不要添加额外的解释或声明。
"""
RAT 的优势
- 提高准确性:让LLM能实时访问外部知识并迭代修正推理,有效减少错误,生成更靠谱的解决方案。
- 增强可解释性:每一步推理都带解释,整个过程像白盒一样透明,便于定位问题、改进模型。
- 更强的长窗口推理能力:对于需要多步骤、高复杂度的任务,这种透明迭代的方式尤其管用,推理链条越清晰,最终结果越可靠。
你是一名 AI 行业编辑,请围绕下面这条热点输出一份资讯解读:
热点:检索增强生成与思维链结合的RAT创建方法要求:
1. 先用一句话解释这条热点在讲什么
2. 再总结它为什么重要
3. 说明会影响哪些 AI 产品或内容方向
4. 最后给出 3 个适合资讯站使用的标题
游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。
相关热点帝奥微电子推出DIO20182双通道运算放大器,输入偏置电流低至1pA,静态电流每通道仅300nA,支持1 4V至5 5V宽电压范围,适用于智能手表等便携设备中微弱光电流信号放大,实现血氧饱和度精准检测。
在企服行业对SaaS的争议中,79%从业者依然看好市场前景。成本压力主要来自拓客、履约和回款,这导致了“二分苦八分甜”的格局。为了缓解焦虑,需要采取具体行动,通过云化与协同生态来重塑商业模式,从而减少内耗,实现更健康的增长。
基于Coze平台,结合TextIn专有模型的OCR解析能力与DeepSeek大语言模型的语义理解,构建了零代码文档智能问答Agent。该方案可高效处理合同审核、技术支持等场景,通过工作流实现文档上传、结构解析与精准问答,提升信息检索效率。
字节开源AI开发平台扣子,具备低门槛、多模态交互和字节生态融合优势,支持私有化部署与深度定制,助力企业降本增效、保障数据安全,成为数字化转型新引擎。
- 日榜
- 周榜
- 月榜
热点快看
