热门搜索:和平精英 原神 街篮2 

您的位置:首页 > > 教程攻略 > ai资讯 >TC-RAG: Turing-Complete RAG--图灵完备的检索增强

TC-RAG: Turing-Complete RAG--图灵完备的检索增强

来源:互联网 更新时间:2026-08-24 14:24

# 图灵完备的RAG:当检索增强生成学会了“什么时候该停下来” ## 摘要 解决大语言模型领域专业深度不足问题的众多方案中,检索增强生成(RAG)一直被寄予厚望——它能在一定程度上缓解幻觉、知识过时,以及面对高度专业化查询时能力不够的困境。但这里藏着一个被长期忽视的关键问题:**现有RAG方法普遍忽略了“系统状态变量”的存在**,而恰恰是这些状态变量,决定了系统能否实现自适应控制、能否在恰当的时候停止检索、能否确保整体流程收敛到可靠结论。 这篇由北京大学计算机学院团队完成的工作,从理论层面给出了严格的证明,提出了图灵完备的RAG框架(TC-RAG)。核心思路是:构建一个图灵完备的系统来管理状态变量,从而让知识检索变得更高效、更精准。具体而言,这个框架借助一套带内存堆栈的系统,具备了自适应检索、推理和规划的能力——不仅可以控制检索过程在合适的时候停下来,还能通过Push和Pop操作来抑制错误知识的积累。在真实医疗数据集上的实验结果表明,TC-RAG在准确率上比现有方法提升了超过7.20%。 ## 医疗场景下的案例剖析 放到真实的医疗场景中,RAG面临的难点可以归纳为四个问题:要不要检索、怎么检索、检索的节奏怎么规划、检索中间出现的瑕疵如何处理。这几个问题看似基础,实际操作起来却相当棘手。 **(1)要不要检索——这是个值得认真考量的问题。** 下面这张图展示了一个真实场景:检索之后,大量无关噪声被带了进来,模型的回答反而跑偏了。这种情况说明,有些时候不检索反而更好。 图1. 使用RAG检索到的噪声知识导致回答错误的例子 **(2)怎样准确检索——检索不是无脑搜。** 一个专业的医生查阅资料和普通人问诊完全是两回事——医生不会把所有知识点都囫囵吞枣地拿去检索,而是带着明确的目的有的放矢。 图2. 真实场景中医生去检索的例子 **(3)如何规划检索——节奏感很重要。** 有经验的医生查阅资料是有规划、有步骤的,而且会灵活调用多种医学工具,而不是一上来就一顿乱搜。 图3. 医生规划检索的例子 **(4)如何处理检索中的瑕疵——纠错能力是硬功夫。** 检索过程中碰到过时知识、无关噪声是家常便饭。但医生大多能凭借自己的专业判断及时纠正错误、重新检索。 图4. 医生处理检索过程的瑕疵的例子 有趣的是,现有大多数研究虽然都在用RAG+LLM的套路,但真正系统性地解决上述问题的方案却少之又少。 ## 引言:问题从何而来 大语言模型在医疗领域的表现确实亮眼——从辅助诊断到制定治疗计划,从分配医疗资源到回答患者咨询,这些模型展现出了巨大的应用潜力。但与此同时,几个核心痛点始终没能彻底解决:事实性错误(幻觉)、知识陈旧、专业深度不够。检索增强生成技术的提出正是为了应对这些挑战,通过外部知识库提供的医疗信息来增强内容生成。 不过,现有RAG方法的局限在于,它们始终没有引入系统状态变量——而状态变量恰恰是实现自适应控制、控制检索停止、确保系统收敛的核心。更关键的是,这些方法不是图灵完备的,缺少动态管理和监控检索过程的能力。在医疗场景中,决策往往需要复杂的多步推理和自适应响应,图灵完备性的缺失直接限制了系统的有效性和可靠性。 这就催生了一个新思路:能不能构建一个图灵完备的系统来管理状态变量,用有限的逻辑框架去增强RAG过程?说起来容易做起来难,具体面临三大挑战: **挑战1:设计具有监控状态变量的图灵完备RAG系统。** 一个有效的图灵完备RAG系统需要整合状态变量来动态跟踪和控制检索过程——这是现有方法完全没有的。**当前方案缺乏明确的机制来判断系统是否收敛到了可靠结论,这是个重大缺口。** 关键难点在于:如何利用大模型的前向传播过程实时计算这些状态变量,如何确保这些变量能有效反映系统的演变上下文,又如何基于这些变量来决定继续、停止还是改进检索过程。 **挑战2:动态规划检索,维持最优状态。** 一旦能够评估系统状态,接下来的问题就是:如何动态管理状态,让系统始终保持在理想状态。现实生活中,医生会根据自己对问题的把握程度来决定要不要检索、检索什么,而不是盲目动手。但盲目检索很可能引入模型已经掌握的信息,反而造成干扰。**如何系统性地分析和规划下一步,如何有效利用LLMs内部的参数化知识来维持最优状态,这是一个值得深入研究的课题。** **挑战3:避免无关噪声干扰系统状态。** 传统RAG的检索过程通常是查询关键词驱动的,而不是按模型的实际需求来——这导致大量无关噪声被引入。而错误知识会在检索和推理过程中不断积累,既浪费token资源,又会积攒无效记忆,甚至引发“lost in middle”问题。如何有效清除错误知识,是维系系统状态的必修课。 ## 相关工作:哪些路已经有人走过 **检索增强生成(RAG)。** 最早由Lewis等人提出,通过将外部知识库信息整合到LLMs的提示工程中,显著增强了模型在知识密集型任务上的表现。在生物医学领域,RAG的应用已经相当广泛——医学论文、指南、教科书、维基百科、知识图谱等外部知识源都被用来提升LLMs的推理和分析能力。 具体来看,几个典型的RAG变体各有侧重: Naive RAG和Advanced RAG。Naive RAG走的是简单的检索-阅读路线,根据用户初始查询检索信息后直接生成答案。Advanced RAG则引入了检索器、重排序器、过滤器和阅读器等更复杂的组件来提升质量。但两者都没有考虑一个问题:LLMs是不是已经掌握了必要的知识?这导致很多检索其实是冗余的,反而可能误导模型,引发“lost in middle”困境。TC-RAG的做法正好相反——根据模型内部的参数化知识来决定是否检索、检索什么,实现更高效、更精准的检索。 Adaptive RAG。最近的研究开始着力于开发自适应RAG策略,让LLMs自己决定是否以及何时检索,甚至从庞大知识库中选择最合适的检索工具。比如FLARE通过预测下一句并使用低置信度词作为查询来重新检索;DRAGIN借助LLMs生成内容中的不确定性来决定何时触发检索;Adaptive-RAG用小模型先评估问题复杂度,再选择最合适的检索策略。但这些方法都不是图灵完备的,缺少动态管理和监控能力,也无法保证系统收敛到可靠结论。 **推理和规划能力。** 增强LLMs推理和规划能力的研究也在持续推进。Chain-of-Thought(CoT)展示了如何构建结构化的“思维过程”来解决复杂问题;ReAct把推理轨迹和任务特定动作结合,让模型能规划、调整动作并在获取信息时处理异常;Reflexion则通过语言反馈让模型反思并存储任务反馈。不过,这些方法在管理历史记忆方面普遍表现不足——特别是删除无效决策、精炼历史记录方面。TC-RAG对此的回应是:引入带回溯和总结操作的内存堆栈系统,及时纠错、压缩冗余知识,确保推理过程高效且准确。 ## 图灵完备的记忆栈定义:TC Stack 在TC-RAG中,记忆栈的形式化定义如下: 记忆栈 TC = (S, A, M, δ, s0, F, σ) 具体含义: 1. **S** 代表大模型可能处于的状态。作者用具体数值来表示,数值越小,说明模型对该任务的回答越确定。 2. **A** 代表大模型可执行的动作集合。在基于栈的记忆系统中,通过Push和Pop两个基本操作的组合,TC-RAG能够有效管理交互记忆、精炼记忆内容、去除RAG过程中引入的噪声。 基于这两个元操作,TC-RAG定义了5个有意义的行为,大模型每次决策时从中选择一个来执行: - **思考**:激发大模型的决策能力,根据已有信息进行分析,决定下一步行动。思考的内容会被Push到记忆栈。 - **工具调用**:当模型仅凭自身知识无法回答问题时,调用网络搜索、文档检索、图谱检索等外部工具。工具名称和检索结果会被Push到记忆栈。 - **反思**:当记忆栈顶的内容与整个任务无关或有害时,大模型通过反思将栈顶元素Pop出去,避免被干扰。 - **总结**:当栈顶信息过长或包含噪声时,先Pop取出,再进行总结,得到更精炼且与任务相关的文本,最后Push回记忆栈。 - **结论**:当模型认为可以给出最终答案时执行。只有当系统状态变量达到终止条件时,流程才会停止。 3. **M** 是大模型的记忆栈,任务开始时将用户Query压入栈底。 4. **δ** 是状态转移函数。 5. **s0** 是大模型的初始状态。这里用一个很大的值Large_Value表示。 6. **F** 是终止状态。当模型需要输出Conclusion且状态值小于σ阈值时,推理结束,TC的栈顶作为最终输出答案。 **关于图灵完备性的证明**,原文第四部分和附录部分写得非常详细,这里就不再展开了——感兴趣的话直接去看论文会更清楚。 ## 记忆栈与系统监测方法 TC-RAG的核心在于利用基于栈的记忆系统和对应的状态变量,实现对整个RAG框架的状态管理与终止判定,让模型能够自适应检索并在合适的时刻输出答案。 具体流程是这样的: 1. 初始化时,大模型把用户Query压入栈。接下来不断执行定义的复合操作——思考(Push)、反思(Pop)、工具执行(Push)、总结(Pop→Push)等。工具执行过程中,模型可以调用多种数据源:知识图谱、文档库、网页百科等。 2. 当模型执行到Conclusion或Thought时,系统会持续更新它的状态变量。当执行涉及Pop的动作时,状态变量会被重置为上一个Thought的值,以确保系统完整性。 3. 当模型输出Conclusion且状态变量小于阈值时,输出最终答案;否则,结论行为会被视为思考行为处理,继续进行下一步推理。 为了解决自适应检索中的停机问题,TC-RAG引入了状态变量来监测系统状态。只有当状态变量满足终止条件时,整个系统才会停机。实践中,TC-RAG分别尝试了两种状态变量:**条件困惑度**和**不确定性**。 条件困惑度通过计算大模型在用户提问内容基础上生成栈顶输出内容时的困惑度获得。不确定性则是通过计算输出栈顶信息的熵值得到的。当系统状态值较低或不确定性较低时,说明模型对最终结果已经有了较高的把握。 整个方法部分的伪代码和提示Prompt如下: (此处保留原文中的伪代码和Prompt内容) ## 和ReACT的对比:差距在哪里 ReACT策略的执行过程看起来是这样的: (此处保留ReACT策略的图示) 但如果我们把ReACT的执行过程看作一个栈,问题就暴露出来了——这是一个单向的栈,只有Push,没有Pop。Reflexion虽然纳入了反思,但之前的错误思考还是被保留在栈中。结果就是:大量错误知识不断积累,token资源被浪费,很容易导致“lost in middle”问题。 除此之外,ReACT等方法没有引入系统变量来监测系统状态,整个流程基本上是个黑盒——完全依靠大模型自己来决定什么时候结束检索和思考。 Tc-RAG为此做了一个可视化实验: (此处保留可视化实验的图示) 从这个对比中可以清楚看到:基于ReACT的方法在处理无关噪声积累时基本无能为力,这导致系统过度自信,甚至得出错误结论。比如一个“仅仅因为单位不同”的错误,ReACT就直接掉坑里了。相比之下,TC-RAG能有效管理内存,通过总结和回溯操作修剪错误的检索结果,最终得出更简洁、更准确的结论。另外,由于缺乏状态管理,ReACT往往在系统状态值较高时就仓促确定答案,而TC-RAG能动态监控整个过程,确保系统状态值满足终止条件——这进一步说明了构建系统状态变量的必要性。 ## 实验验证 **实验设置。** 为了提升模型的思考和任务规划能力,作者收集了大量数据,持续预训练了一个医学LLM作为基座。 在医学工具库方面,搭建了多个信息来源: - 百万规模的医学知识图谱(含130万医学实体和360万关系),将图谱路径作为检索结果提供给大模型(延续了HyKGE工作的思路) - 医学文档库:涵盖大量医学教程、就诊治疗资料、医学论文、病人电子病历 - 网页检索:利用Bing和Google Search - 百科检索:Wikipedia和MedNet - 电子病历数据:来自MIMIC-III和MIMIC-IV数据集 **实验结论。** 在CMB、MMCU以及CMB-Clin三个数据集上,基于Qwen1.5-32B-Chat基座模型以及在预训练后模型的实验结果表明,TC-RAG的表现明显优于其他RAG方法——准确率平均提升了7.20%,达到了SOTA水平。此外,研究人员还做了一个“投毒实验”,人为在检索内容中引入噪声,结果证实TC-RAG在弹出检索噪声、保留有效信息方面的表现非常出色。消融实验则验证了反思与总结动作的有效性,以及引入状态变量的必要性。综合来看,TC-RAG充分利用了预训练大模型的规划能力,通过自适应信息检索辅助模型进行更好的推理和决策,有效提升了整体性能。 ## 结语 这项研究提出了首个图灵完备的检索增强生成系统——TC-RAG。通过引入监控状态变量,作者开发了一个内存堆栈框架,让检索过程变得更加动态和自适应,有效解决了传统RAG方法中无休止和不准确检索的问题。TC-RAG中内存堆栈系统的回溯和总结功能,能够有效减少错误知识和无关噪声的积累。在多个真实医疗数据集上的实验表明,TC-RAG显著优于现有基准方法,在准确性和可靠性上都有实质性的改进。更重要的是,TC-RAG的成功部署也说明了这一框架在实际应用中的价值。
关于宇宙的好的网名有哪些
关于宇宙的好的网名有哪些

类型:角色扮演

大小:1

语言:简体中文

平台:互联网

游戏下载

热门手游

手机号码测吉凶
本站所有软件,都由网友上传,如有侵犯你的版权,请发邮件haolingcc@hotmail.com 联系删除。 版权所有 Copyright@2012-2013 haoling.cc