陕西住房和城乡建设厅网站电话,广州专业建网站,上饶便宜的做网站公司,官网招聘和招聘网站论文地址#xff1a;https://arxiv.org/pdf/2403.05313
Github地址#xff1a;https://github.com/CraftJarvis/RAT
想象一下#xff0c;一个人工智能助手可以像莎士比亚一样写作#xff0c;像专家一样推理。这听起来很了不起#xff0c;对吧#xff1f;但是#xff0…
论文地址https://arxiv.org/pdf/2403.05313
Github地址https://github.com/CraftJarvis/RAT
想象一下一个人工智能助手可以像莎士比亚一样写作像专家一样推理。这听起来很了不起对吧但是如果这个助手有时难以确保事实准确性依赖过时的信息或只是编造事实该怎么办 检索增强思维 (RAT) 是一种创新性的方法它结合了两种关键技术检索增强生成 (RAG) 和思维链 (CoT) 提示。大型语言模型 (LLM) 因其模仿人类写作和流畅回答问题的能力而变得流行。但有时他们的回答需要以现实世界的知识为基础。RAT 通过提供一种革命性的人工智能推理方法来解决这个问题。让我们深入研究并了解 RAT 的代码 在我们深入讨论之前让我们先把整个提示分解一下。想象一下你有这个超酷的人工智能助手提示语是你用来告诉它你想要什么的目的。你可以让它为你写一个故事翻译一种语言或者以一种非常有信息量的方式回答一个问题这一切都是为了给大模型一个清晰明确的提示。
最酷的部分是提示工程让你能够激发大模型的全部潜力。你可以用它做各种各样的事情从写出绝妙的诗歌到解决超级复杂的问题。此外甚至还有一些高级技术如一次性、零次、少量、思维链、指导性和迭代性提示每种技术都适用于简单的任务和复杂的多步骤流程。
现在我们来谈谈 RAT这是一种结合了两种强大技术的新方法检索增强生成 (RAG) 和思维链 (CoT)。让我们探索这两种技术如何将 大模型推理推理提升到新的高度。
检索增强生成 (RAG)知识注入器
想象一下一个 LLM 正在研究一道数学题。RAG 就像一个乐于助人的导师。它允许 LLM 在推理过程中从外部来源如公式或定理获取相关信息。这确保了 LLM 的步骤以事实知识为基础从而减少了出现奇思妙想解决方案的可能性。
思维链 (CoT)让思考变得可见
思路链提示帮助大型语言模型展示其工作成果 大型语言模型 (LLM) 擅长生成文本但它们在解决需要逐步推理的复杂问题如解决文字问题时会遇到困难。 CoT 提示通过鼓励 LLM 解释他们的想法来解决这个问题。LLM不只是给出最终答案而是通过将问题分解为更小的步骤来展示其“工作”。这就像在数学课上展示你的计算一样。
有两种方法可以让 LLM 使用 CoT 提示
零次提示我们在提示本身中使用特殊的单词或短语例如“让我们一步一步思考”以促使 LLM 解释其推理。少量提示我们向 LLM 展示一些如何解决类似问题的例子其中清楚地解释了解决步骤。
然而CoT 提示也存在一些挑战。
LLM 可能会犯错误如果他们对主题没有足够的了解他们的推理步骤可能会错误。LLM 可能会陷入错误的想法有时他们可能会提出不基于现实的解释。 思路链提示使大型语言模型能够解决复杂的算术、常识和符号推理任务。图中突出显示了思路链推理过程。 少量提示会给出一些示例来帮助语言模型理解它应该做什么而思维链提示则会从头到尾展示逐步推理。这有助于完成需要符号推理和中间步骤的复杂任务。它最适合较大的模型而较小的模型可能会产生奇怪的思维链并且不太精确。在某些情况下您可以使用零次思维链提示而不显示中间步骤。
RAT知识与思维链的结合
检索增强思维 (RAT) 是一种简单但有效的提示方法它将思路链 (CoT) 提示与检索增强生成 (RAG) 相结合以处理长窗口推理和生成问题。
因此LLM 生成零样本思维链 (CoT)并与 RAG 合并。使用这些想法作为询问对其进行因果修正并逐步发展出答案。
使用信息检索迭代修改思维链可显著增强大型语言模型在处理长视域生成任务时的推理和生成能力。这种方法还大大减少了幻觉的发生。我们提出的方法称为检索增强思维 (RAT)它涉及使用从相关来源检索到的信息逐一修改每个思维步骤。这包括任务查询以及生成初始零样本 CoT 后的当前和过去思维步骤。
通过将 RAT 应用于各种基础模型我们发现它们在各种长视界生成任务上的表现都有显著提升。平均而言代码生成评分相对提高 13.63%数学推理评分提高 16.96%创意写作评分提高 19.2%具体任务规划评分提高 42.78%。 检索增强思维 (RAT) 的管道。给定一个任务提示在图中表示为 IRAT 从 LLM 在零样本“让我们一步一步思考”中产生的初始分步思维1、2、· · ·、开始。由于幻觉某些思维步骤例如图中的 1可能存在缺陷。RAT 使用来自外部知识库表示为 Library的 RAG 迭代地修改每个思维步骤。 该图概述了检索增强思维 (RAT) 流程这是一种促使大型语言模型 (LLM) 提高其在长窗口任务中的推理能力的方法。以下是关键模块的原理
步骤 0初稿
向 LLM 提出任务提示。该示例展示了有关在 Minecraft 中获取钻石的提示。
步骤 1-步骤 n迭代细化
LLM 根据对提示的理解生成初始响应Zero CoT。由于缺乏具体信息这可能会存在缺陷。RAT 结合了 CoT 提示其中 LLM 通过解释每个步骤的理由 (Ti) 来反复修改其响应。
关键组件
任务提示这是起点为 LLM 提供要解决的问题。LLM这代表大型语言模型本身。初始 CoTTi-1、Ti这些是 LLM 在迭代过程中的初始和修订的思维链。知识库这象征着 LLM 可以通过检索增强生成 (RAG) 访问的外部知识库。增强修订这指的是 LLM 如何根据检索到的信息和先前的解释来完善其思维链 (Ti)。
RAT 流程
初始响应 LLM 根据提示 (T0) 生成初始响应。解释 LLM 解释了初步回应 (T1-1) 背后的原因。检索 RAT 根据解释从外部知识库Library检索相关信息。修订 LLM 通过整合检索到的信息来修订其思维链 (T1)。重复重复步骤 2-4直到 LLM 得到满意的解决方案 (Tn)。
下图强调了 RAT 如何通过结合外部知识检索和逐步解释来解决 LLM 在复杂推理任务中的局限性。 图 | 上不同 LLM 推理方法在创意生成任务上的示例。红色文本表示 LLM 生成的文本中的错误或错觉而绿色文本表示正确生成。没有 RAG 的方法通常会产生带有幻觉的不正确信息经典 RAG 与结构松散的检索内容高度相关而 RAT 生成的文本在准确性和完整性方面表现最佳。下不同 LLM 推理方法在复杂的具身规划、数学推理、代码生成和创意生成任务上的定量性能比较。我们的 RAT 在所有任务上的表现都优于所有基线。 RAT核心代码 https://github.com/CraftJarvis/RAT/blob/main/app/gradio_app.py RAT实现如下 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 {i1}/{len(draft_paragraphs)} sections ...)answer answer \n\n 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...)continueelse:query resprint(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 ...)continueelse:content resLIMIT 2for j, c in enumerate(content):if j LIMIT: # limit rge number of network pagesbreakprint(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 ...)continueelse:diff_html generate_diff_html(answer, res)display(HTML(diff_html))answer resprint(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 resreturn draft, answer生成初始草稿 使用 GPT-3.5-turbo 生成一个初始的草稿答案draft。草稿答案是基于用户输入的问题生成的可能包含一些错误或不完整的信息。 分割草稿 将草稿答案分割成多个段落draft_paragraphs每个段落包含一个完整的思路。分割的目的是为了逐段修正和优化答案。 逐段修正答案 对每个段落生成一个检索查询query用于从网络中检索相关信息。根据检索到的内容修正当前段落的答案。重复这一过程直到所有段落都修正完毕。 结构化输出 最后为修正后的答案添加标题和副标题使其更具结构性。 返回结果 返回初始草稿和修正后的最终答案。 示例流程 假设用户输入的问题是“介绍爱因斯坦的生平和成就。” 生成初始草稿 GPT-3.5-turbo 生成一个初始答案可能包含一些不准确的信息。 分割草稿 将初始答案分割成多个段落例如 段落1爱因斯坦的早期生活。段落2爱因斯坦的科学成就。段落3爱因斯坦的晚年生活。 逐段修正 对每个段落生成检索查询例如 查询1“爱因斯坦的早期生活”。查询2“爱因斯坦的科学成就”。查询3“爱因斯坦的晚年生活”。 根据检索结果修正每个段落的内容。 结构化输出 为修正后的答案添加标题和副标题例如 标题爱因斯坦的生平和成就副标题1早期生活副标题2科学成就副标题3晚年生活 返回结果 返回初始草稿和修正后的最终答案。
其中用到的一些提示语如下
prompt1
尝试用逐步的思考来回答这个问题\指令并使答案更具结构化。
使用 \n\n 来将答案分成几个段落。
直接响应指令。除非被要求否则不要在答案中添加额外的解释或介绍。
prompt2
我想验证给定问题的内容准确性特别是最后几句话。
请用相应的问题总结内容。
这个总结将被用作必应搜索引擎的查询。
查询应该简短但需要足够具体以确保必应能够找到相关知识或页面。
您还可以使用搜索语法使查询足够简短和清晰以便搜索引擎能够找到相关的语言数据。
尽量使查询与内容中的最后几句话尽可能相关。
**重要**
直接输出查询。除非被要求否则不要在答案中添加额外的解释或介绍。
prompt3
我想根据在维基百科页面上学到的相关文本来修订答案。
你需要检查答案是否正确。
如果你在答案中发现了错误请修订答案使其更好。
如果你发现有些必要的细节被忽略了请根据相关文本添加这些细节以使答案更加可信。
如果你发现答案是正确的且不需要添加更多细节请直接输出原始答案。
**重要**
尽量保持修订后答案的结构多个段落及其子标题使其更具结构性以便理解。
用 \n\n 字符分隔段落。
直接输出修订后的答案。除非被要求否则在修订后的答案中不要添加额外的解释或声明。RAT 的优势
提高准确性通过允许 LLM 访问外部知识并改进其推理RAT 有助于减少错误并生成更准确的解决方案。增强的可解释性带有解释的迭代过程可以深入了解 LLM 的思维过程从而更容易识别和解决任何问题。更强的长窗口推理能力 RAT 对于需要多步骤的复杂任务特别有益因为推理透明度至关重要。
参考资料
How Retrieval-Augmented Generation (RAG) and Chain-of-Thought (CoT) Create Retrieval-Augmented-Thought(RAT)?检索增强思考 RATRAGCOT提升 AI 推理能力的强大组合 原创【LLM-RAG】RAT检索增强思维提示实现上下文感知推理将RAG与CoT结合起来的技术RAT减轻长文本生成出现的幻觉问题【AI大模型应用开发】RAT原理与实现又是一个提高大模型生成能力的方法附完整代码