TCRAG:图灵完备 RAG + 高效医学诊断
- 提出背景
- 图灵完备过程
- 解法拆解
- 分析性关联图
论文:TC–RAG: Turing–Complete RAG’s Case study on Medical LLM Systems
提出背景
RAG技术大致可分为朴素RAG和高级RAG两类:
-
朴素RAG采用简单的"检索-阅读"策略。它首先根据用户的初始查询检索相关信息,然后基于这些信息生成答案。
-
高级RAG则引入了更复杂的组件,如专门的检索器、重排器、过滤器和阅读器,以提高检索和生成的质量。
然而,无论是朴素RAG还是高级RAG,都存在一个共同的问题:它们没有考虑到大语言模型可能已经拥有所需的知识。
这往往导致系统检索了过多的冗余信息,不仅可能误导模型,还可能导致"迷失在中间"的问题,即模型在大量信息中迷失了重点。
一个有效的系统应该能够像专家医生一样,从已有知识出发,有选择性地检索和使用额外信息,避免被过多的冗余信息所干扰。
针对这一问题,我们提出的方法能够根据模型已有的内部知识来智能决策是否需要检索以及检索什么内容,从而实现更高效、更准确的信息检索过程。
传统的RAG系统可能非常复杂和强大,但缺乏明确的终止条件或状态监控。
它们可能持续检索和生成,而不知道何时停止或何时已达到最佳答案。
TC-RAG通过引入状态监控和终止条件,在保持图灵完备性的同时,解决了传统RAG系统可能无限检索而不收敛的问题。
这种设计既保证了系统的理论能力,又确保了实际应用中的可靠性和效率。
图灵完备过程
在TC-RAG系统中,我们将大模型(LLMs)的内存设计为一个白盒图灵机,其理论证明详见附录8.1。
TC-RAG的内存栈可以表示为TC = (S, A, M, δ, s0, F, σ),各组成部分解释如下:
-
状态集S:
- 表示LLMs可能处于的所有状态。
- 我们使用困惑度和不确定性等数值来量化系统状态。
-
动作集A:
- 包括LLMs可执行的所有动作。
- 基本动作有push(压入)和pop(弹出)。
- 复合动作包括"思考"、“工具观察”、“回溯”、“总结"和"结论”。
-
栈内存M:
- 包含动作集A和其他可能用到的符号,如初始状态"用户查询"。
- A是M的子集。
-
状态转移函数δ:
- 定义了系统如何根据当前状态和栈内存进行状态转移、动作选择和内存更新。
- 输出包括新状态、选择的动作和更新后的系统状态值。
-
初始状态s0:
- 设定为一个较大的值,较小的值表示更好的系统状态。
-
最终状态集F:
- 当系统执行"结论"动作且状态值低于阈值σ时,认为达到最终状态。
- 否则,系统会重置状态或将动作改为"思考"以继续分析。
-
阈值σ:
- 用于判断系统是否达到最终状态的超参数。
这个设计允许TC-RAG系统模拟人类思考过程中的状态变化、决策制定和记忆管理,为实现更智能、更可控的信息检索和处理提供了理论基础。
当然,我可以用医学诊断的场景来具体化TC = (S, A, M, δ, s0, F, σ)的概念。假设我们正在诊断一个头痛患者:
-
S(状态集):
- S可以表示诊断的确定性程度,例如:
0-20: 非常不确定
21-40: 较不确定
41-60: 中等确定
61-80: 较确定
81-100: 非常确定
- S可以表示诊断的确定性程度,例如:
-
A(动作集):
- push: 添加新信息或想法
- pop: 移除最近添加的信息
- Thought: “这可能是偏头痛”
- Tool Observation: “查看患者的血压记录”
- Backtrack: “之前的猜测可能不正确,让我们重新考虑”
- Summary: “根据目前的症状,最可能的诊断是…”
- Conclusion: “最终诊断为张力性头痛”
-
M(栈内存):
- 可能包含:“患者主诉”、“症状描述”、“体检结果”、"实验室检查结果"等
-
δ(状态转移函数):
- 例如:如果当前状态是40(较不确定),执行"Tool Observation"查看患者的MRI结果后,状态可能转变为70(较确定)
-
s0(初始状态):
- 可能设置为20,表示初始时对诊断非常不确定
-
F(最终状态集):
- 可能定义为任何大于80的状态,表示诊断已经非常确定
-
σ(阈值):
- 可能设置为80,意味着当确定性达到80或以上时,系统认为可以给出最终诊断
实际运作示例:
- 开始:s0 = 20(非常不确定)
- Push “患者主诉:持续性头痛三天”
- Thought “可能是偏头痛或张力性头痛”
- Tool Observation “查看患者的用药史”
- 状态更新:δ(20, “查看用药史”) = 45(中等确定)
- Thought “考虑到没有偏头痛药物使用史,倾向于张力性头痛”
- Tool Observation “进行体格检查”
- 状态更新:δ(45, “体格检查”) = 75(较确定)
- Summary “症状、用药史和体检结果都指向张力性头痛”
- 状态更新:δ(75, “总结”) = 85(非常确定)
- 由于85 > σ(80),系统给出Conclusion “最终诊断为张力性头痛”
在医学领域的案例研究中,通过在真实世界的医疗数据集上进行广泛的实验,TC-RAG在准确性方面优于现有方法超过7.20%
解法拆解
目的:解决LLMs在医疗领域应用中的问题,提高知识检索的效率和准确性。
问题:
- 幻觉(hallucinations)
- 知识过时
- 专业知识有限
- 系统状态变量缺失
- 图灵完备性缺失
- 内存管理不足
解法:引入图灵完备系统并采用内存栈系统
- 子解法1(因为缺乏系统状态变量):引入图灵完备系统管理状态变量
之所以用引入图灵完备系统管理状态变量的子解法,是因为现有RAG方法缺乏系统状态变量,无法实现自适应控制、检索停止和系统收敛。
例如,在医疗诊断过程中,系统需要根据患者症状的严重程度和检查结果的可靠性来调整诊断策略,这就需要一个能够动态管理状态的系统。
- 子解法2(因为内存管理不足):采用内存栈系统
之所以用采用内存栈系统的子解法,是因为现有方法在处理复杂医疗场景时,难以进行多步推理和自适应响应,需要一个更高效的内存管理机制。
例如,在分析一个复杂的病例时,系统需要同时考虑多个症状、检查结果和可能的诊断,这就需要一个能够有效组织和管理这些信息的内存系统。
- 这些子解法的逻辑链:
└── 引入图灵完备系统并采用内存栈系统【主解法】
├── 引入图灵完备系统管理状态变量【子解法1】
│ ├── 实现自适应控制【功能】
│ ├── 实现检索停止【功能】
│ └── 确保系统收敛【功能】
│
└── 采用内存栈系统【子解法2】
├── 实现自适应检索【功能】
├── 增强推理能力【功能】
└── 提升规划能力【功能】
这是一个决策树形式的逻辑链,主解法分为两个子解法,每个子解法又有其对应的功能。
- 分析隐性特征:
在解法步骤中,我们可以发现一个隐性的特征或方法,那就是"动态知识整合与优化"。这个特征没有在问题或条件中明确提出,但它贯穿于整个解决方案中。
隐性特征:动态知识整合与优化
这个特征体现在以下几个方面:
- 图灵完备系统不仅管理状态变量,还能动态调整检索策略。
- 内存栈系统不仅存储信息,还能根据需要进行信息的压栈和出栈操作,实现知识的动态组织。
- 自适应检索、推理和规划能力都需要系统能够根据当前状态和需求,动态地整合和优化已有知识。
这个隐性特征是连接图灵完备系统和内存栈系统的关键,它使得TC-RAG能够在复杂的医疗场景中灵活应对,不断优化其知识结构和推理过程。
定义这个隐性方法:动态知识整合与优化是一种能够根据当前任务需求和系统状态,实时调整知识结构、优化推理路径,并在多步骤推理过程中保持信息连贯性的方法。
它是TC-RAG系统能够有效处理复杂医疗问题的核心机制。
分析性关联图
TC-RAG巧妙地引入了"内存栈"和"状态监控"两大核心机制。
内存栈就像一个智能的记事本,模型可以随时写入新的想法(push),也可以及时划掉错误的内容(pop)。
另外,还能进行反思、使用工具、回溯错误、总结要点,最终得出结论。
这样一来,模型的思考过程变得井井有条,减少了错误累积和无关信息的干扰。
同时,TC-RAG还时刻关注模型的"心理状态",用数学方法(如条件概率和不确定度)来判断模型的自信程度。
一旦达到终止条件,模型就知道该给出最后答案了。
这个过程就像体贴的老师在守护学生的思考,既给予适当的指引,又不过度干预。
TC-RAG还特别强调知识的力量。
通过在海量医学文献上训练,模型拥有了专业的医学知识,再通过知识库连接各学科,就像名医能融会贯通各种医学知识下精准的诊断。
最关键的是,数学证明表明TC-RAG达到了"图灵完备",也就是计算机科学的最高标准,理论上可以解决任何问题。
在医疗领域的实验也证实,TC-RAG让大型语言模型的回答更专业、更准确,令人印象深刻。
总而言之,TC-RAG犹如一位全能的智囊团,既有渊博的知识,又有缜密的思维,还能进行自我反思和纠错,必将在智能问答和决策支持领域大放异彩,造福人类健康!