让大模型更“懂”外部知识:RAG技术及未来发展综述

引言

如何更好地结合外部数据,如何提升模型处理专业领域问题的可靠性,是大语言模型应用开发中值得不断思考的问题。针对此,微软亚洲研究院的研究员们提出了一种基于查询需求分层的 RAG 任务分类法,从显式事实、隐式事实、可解释的推理、隐式推理4个层级出发,直指大模型应用在不同认知处理阶段所面临的难点和定制化的解决手段。该研究可以使大模型更好地整合专有领域知识,保证其在特定领域中发挥最前沿的能力。‍‍

  1. 提出 RAG 任务分类法: 将用户查询分为四个层级:显式事实、隐式事实、可解释的推理、隐式推理 ,有助于理解大模型应用在不同认知处理阶段的难点与解决手段。

  2. 分析各层级挑战与解决方案:针对每个层级的查询,深入探讨了其面临的挑战,并详细阐述了相应的解决方案,如针对显式事实查询的 RAG 技术增强方法,隐式事实查询的迭代 RAG 等方法,可解释理由查询的提示调优等方法,隐藏理由查询的离线学习等方法。

  3. 讨论数据整合形式:探讨了将外部数据整合到 LLMs 中的三种主要形式(上下文、小型模型和微调)的优势、局限性及适用问题类型。

|内容概览‍‍

1.大型语言模型的现状与应用挑战

  • 大型语言模型的优势

  • 数据增强型LLM的优势和挑战

2.显式事实查询(L1)

  • 数据处理增强:包括文档解析、多模态文档解析、分块优化等。

  • 数据检索增强:包括稀疏检索、密集检索、查询文档对齐、重新排名和校对等。

  • 回应生成增强:包括监督微调、联合训练等。

3.隐式事实查询(L2)

  • 挑战和解决方案:包括自适应检索量、推理和检索之间的协调等。

  • 迭代RAG:动态地控制多步RAG过程,迭代地收集或纠正信息。

  • 图/树的问题问答:使用知识图谱或数据块图/树来表达文本之间的关系结构。

  • 自然语言到SQL查询:将自然语言查询转换为SQL以从结构化数据库中检索信息。

4.可解释理由查询(L3)

  • 挑战和解决方案:包括提示优化成本、有限的可解释性等。

  • 提示调优:包括强化学习、定向刺激提示、基于编辑的方法等。

  • CoT提示:使用思维链、思维树或思维图来解决复杂的基本原理。

5.隐藏理由查询(L4)

  • 挑战和解决方案:包括逻辑检索、数据不足等。

  • 离线学习:识别和提取数据集中的规则和指导方针。

  • 上下文学习(ICL):使用示例进行上下文学习以揭示隐藏理由。

  • 微调:通过监督微调来增强LLMs在处理高级和专业任务时的适应性和有效性。

6.结论与未来展望

  • 不同查询级别的技术总结

  • 数据注入策略的选择

  • 多种查询类型的组合

1 介绍‍‍

大语言模型(LLMs) 已经展示了非凡的能力,包括广泛的世界知识和复杂的推理技能。尽管有了这些进步,但在不同的专业领域中有效地部署它们存在着重大挑战。这些挑战包括模型幻觉、与特定领域知识的错位等问题。合并特定于领域的数据,特别是不能包含在其初始训练语料库中的私有或内部数据,对于定制LLM应用程序以满足特定的行业需求至关重要。通过RAG和微调等技术,数据增强型LLM应用已经在以下几个方面体现出比仅基于通用LLM构建的应用的优势:

  • 增强的专业性和及时性:用于训练LLMs的数据往往在及时性方面有所滞后,而且可能不能全面覆盖所有领域,特别是用户拥有的专有数据。数据增强型LLM应用通过为复杂问题提供更详细和准确的答案来解决这个问题,允许数据更新和定制。

  • 与领域专家对齐:通过使用和从特定领域的数据中学习,数据增强的LLM应用程序可以展示出更像领域专家的能力, 比如医生和律师。

  • 模型幻觉的减少:数据增强型LLM应用基于真实数据产生反应,将它们的反应基于事实,并显著减少幻觉的可能性。

  • 改进的可控性和可解释性:所使用的数据可以作为模型的重复描述的参考,增强了可控性和可解释性。

尽管人们对这些进步充满热情,但开发人员经常苦苦挣扎,并且必须投入大量的人力劳动以满足期望(例如,在回答问题中获得高成功率)。大量研究表明,强调构建基于RAG和微调等技术的数据增强型LLM应用涉及的挑战,特别是在法律领域、医疗保健、制造等专门领域。

这些挑战的范围很广,从构建数据管道(例如,数据处理和索引)到利用LLMs的能力实现复杂的智能推理。例如,在金融的应用中,经常需要理解并利用高维时间序列数据,而在医疗领域,医学影像或时间序列医疗记录往往是必不可少的。使LLMs理解这些不同形式的数据,这是一个反复出现的挑战。另一方面,在法律和数学应用中,LLMs通常难以把握不同结构之间的长距离依赖关系。此外,根据特定应用领域,对LLMs响应的可解释性和一致性的要求也会不断增加。LLMs的固有本质具有低可解释性和高不确定性,这构成了重大的挑战。提高LLMs的透明度和减少其不确定性对于增加其产出的信任和可靠性至关重要,特别是在精确性和问责性至关重要的领域。

通过与领域专家和开发人员的广泛讨论,并且仔细分析他们面临的挑战,我们获得了深刻的理解,数据增强型LLM应用不是一个一刀切的解决方案。现实世界的需求,特别是在专家领域,是非常复杂的,与给定的数据和它们需要的推理困难的关系可能有显著的差异。然而,开发人员通常并没有意识到这些区别,并且最终会得 到一个充满性能缺陷的解决方案(类似于一个到处都有漏洞的房子)。相比之下,如果我们能够充分理解不同 层次的需求及其独特的挑战,我们就可以据此构建应用程序,并使应用程序稳步改进(就像一步一步地构建一个坚固可靠的房子一样)。

然而,研究工作和现有的相关调查,经常只关注其中的一个水平或一个特定的技术主题。这促使我们编写了这项调查,目的是明确定义这些不同级别的查询,识别相关的独特挑战,并列出解决这些问题的相关工作和努力。本研究旨在帮助读者构建数据增强型LLM应用的鸟瞰图,同时如何系统地开发此类应用的手册。

2 问题定义

数据增强的LLM应用程序可以采取多种形式,从通常基于特定领域数据的问答机器人,到复杂数据管道中的语义处理操作符,甚至是处理多智能体系统中特定步骤的代理。但是,一般来说,一个数据增强型LLM应用可以被表述如下:

其中Q、A和D分别代表用户的输入(查询)、预期的响应(回答)和给定的数据。应用f的任务是根据D建立从Q到A的映射。

与依赖于已有知识的独立LLM系统相比,数据增强型LLM应用的特点是依赖于外部数据(D)来准确解决提出的查询(Q)。将外部数据D的合并可以显著增强LLMs的能力,使它们能够利用当前的、特定领域的知识和理解专家的基本原理。可以根据它们利用外部数据的程度和方式,分为不同层次的复杂性,这反映了它们所需的参与的深度和自然查询。

2.1 查询的分层

在数据增强型LLM应用的领域中,查询可以根据它们的复杂性和所需的数据交互的深度进行分层。这种分层有助于理解LLM必须执行的不同认知处理水平,以生成准确和相关的回应。从直接的事实检索到对隐式知识的细微解释,每一层都代表了LLM处理任务复杂性的一个步骤。下面,我们将描述这些级别,并提供对每个阶段所需要的独特挑战和能力的见解。

图1:四级查询的主要焦点

Level-1 显式事实: 这些查询询问的是一些直接出现在给定数据中的明确事实,而不需要任何额外的推理。这是 最简单的查询形式,其中模型的任务主要是去定位和提取相关信息。例如,“2024年夏季奥运会将在 哪里举行?””的目标是外部数据中包含的一个事实。

Level-2 隐式事实: 这些查询询问的是数据中的隐含事实,这些事实并不明显,可能需要某种程度的常识推理 或基本的逻辑推论。必要的信息可能会分布到多个部分中,或者需要简单的推断。例如,“现在堪培 拉所在国家的主要政党是什么?”“可以通过将堪培拉在澳大利亚的事实与目前澳大利亚多数党的信息 相结合来回答。”

Level-3 可解释的理由: 这些查询不仅要求掌握事实,还需要理解和应用特定领域的理由,这是数据上下文不可或缺的。这些基本原理通常在外部资源中明确提供,并且在一般大型语言模型的预训练阶段通常不会出现或很少遇到。例如,在制药领域,LLM必须解释FDA指南文件——代表FDA当前的想法的文件——以评估特定药物申请是否符合监管要求。类似地,在客户支持场景中,LLM必须导航预定义工作流的复杂问题, 以有效地处理用户查询。在医学领域,许多诊断手册提供了权威和标准化的诊断诊断标准,例如管理急性胸痛患者的管理指南。我们可以开发一个专门的 LLM专家系统来管理胸痛。这涉及到理解指导支持代理与客户进行交流的程序步骤和决策树, 以确 保响应不仅是准确的,而且符合该公司的服务标准和协议。

Level-4 隐藏的理由: 这类查询探究了更具有挑战性的领域,在这个领域,理由没有明确记录,但必须从外部数据 中观察到的模式和结果中推断出来。这里隐藏的基本原理不仅指隐式推理链和逻辑关系,还指识别和 提取预测特定查询所需的外部基本原理的内在具有挑战性和非平凡的任务。例如,在IT操作场景中, 云操作团队过去可能已经处理过许多事件,每个事件都有自己独特的环境和解决方案集。LLM必须擅长挖掘这个丰富的隐性知识库,来识别隐式策略和成功决策过程。同样,在软件开发中,以前的错误调试历史可以提供隐性洞察力的丰富来源。虽然每个调试决策的逐步基本原理可能无法被系统地记录下来,但LLM必须能够提取出指导这些决策的基本原则 。通过综合这些隐藏的基本原理,LLM可以产生不完全准确的反应,但也反映了经验丰富的专业人员公认的不言而喻的专业知识和解决问题的方法。

图2:数据增强LLM应用程序中的查询级别摘要

总之,将查询分类为级别反映了复杂性的梯度和LLM所需的理解类型。如图1和图2所示,前两个级别,显式事实和隐式事实,重点是检索非实际信息,无论是直接陈述还是需要基础推断。这些级别挑战了 LLM将数据提取和合成为连贯事实的能力。相反,后两个层次,可解释的基本原理和隐藏的基本原理,将点转向LLM学习和应用数据背后的基本原理的能力。这些层次需要更深层次的认知参与,而LLM必须分别与专 家思维相结合,或从非结构化的历史数据中提取智慧。根据本标准对通用事实查询数据集的分类如表1所示。

每个级别都提出其独特的挑战,因此需要量身定制的解决方案来有效地解决它们。当我们将在下面的章节中深 入研究这些级别的复杂性时,我们将探索特定的策略和方法,使LLM能够跨各种查询类型导航数据增强应用程序 的复杂性。这一探索不仅将突出LLM目前的能力,而且还将摆脱该领域内的持续进展和潜在的未来发展。

3 显式事实查询(L1)

3.1 概述

显式事实查询,表示了最直接的数据扩充查询类型。这个级别的查询可以通过直接访问选择中的特定域文档或文档片段来回答。这些问题的答案通常是文档中的纯文本,在响应生成中需要最少的重组或简单的理由。这个级别的定义特征是明确和直接地依赖于外部数据的特定片段。

表1: 提供事实的常见数据集的分层

3.1.1 数据依赖性

数据集D可以被分割成文档或片段D1、D2、…、Dn,以不同的方式表示:

每个片段Di被认为是相对较短的,并且包含更集中和更具体的内容。对于给定的查询q ∈ Q,并非D中的每个片段都是必需的,以形成回应。让

表示数据段d ∈ D对特定查询q的必要性,其中

意味着数据段d需要回答查询,然后查询q的数据依赖性,由对解决查询q至关重要的片段子集所描述,定义为:

3.1.2 定义

显式事实查询,记为Q1,其特征是可以从数据集d内的特定数据段中直接检索答案。这些查询可以在数据扩充的 LLM系统的上下文中正式定义如下:

对于任何查询q和其对应的答案a,显式事实查询的存在条件包括:

  • 一个检索组件,它从D中识别出回答q所必需的相关数据段。这个组件确保rD(q)与Dep(q)紧密匹配,Dep(q)是回答q所必需的D的最小子集。

  • 一个回应生成器θ,通常是提示LLM推理,基于rD检索到的信息构建答案a。回应θ(rD(q))应该等于或近似a,表明查询依赖于明确的、直接可访问的事实。

以下是在此级别上的一些查询示例:

  • 在PaperX中使用了什么方法来解决问题?(提供一些学术论文)

  • X公司的AI战略是什么?(提供一系列关于x公司的最新消息和文章)

3.2 挑战和解决方案

这个级别的查询主要需要正确地检索llm的数据, 以提供准确的响应。由于其高效性、灵活性和相对低的成本,RAG由于其效率、灵活性和相对较低的成本,它是处理这一级别查询的最常用的技术基本解决方案。然而,即便采用RAG,构建一个完善且高质量的系统的过程仍充满挑战,这些挑战包括:

  • 数据处理困难:外部数据通常是高度非结构化的,并包含多个模块化组件,如表格、 图像、视频等 。此外,分割或“分块”这些数据的过程在维护原始上下文和意义方面带来了挑战。

  • 数据检索的难度:从大规模的非结构化数据集中查找相关数据段是一项既耗时又易出错的任务。因此,开发出高效且准确的检索机制显得尤为重要。

  • 性能评估困难:评估RAG系统的性能,尤其是组件级别上,是一个复杂的任务。它需要开发稳健的指标,能够准确地评估数据区域化和响应生成的质量。

鉴于RAG技术的普及,已经涌现出大量文献和工具来应对上述挑战。接下来,我们将突出一些最实用和有影响力的RAG增强方法。此外,我们还将讨论可能采用的超越RAG的替代技术解决方案。

3.3 检索增强生成(RAG)

检索增强生成(RAG)是一种通过动态检索外部信息来提升语言模型自然语言生成能力的技术。它将LLMs的生成能力与广泛数据库或文档的信息检索能力相结合,通常涉及数据索引构建、检索系统构建以及回答生成等环节。

3.3.1 数据处理增强

在这个级别上的文档解析通常涉及到以一致的方式从文本、表格和图形中提取信息, 以确保能够准确地识别和检索相关的代码片段。

多模态文档解析处理源文档中的多模态内容,如图表、表格甚至视频(例如会议录音),是最常被问的问题之一。一般来说,有两种方法来解决这个问题。第一种方法涉及将多模态内容转换为文本形式。例如,表格到文本的方法将表格翻译成文本,而其他技术将视觉内容转换为基于文本的或基于属性的描述,随后由大型语言模型进行处理。第二种方法利用多模态嵌入技术,使用从多模态数据检索到的嵌入作为软提示输入。

分块优化对于长文本,将文档分割成文本分块是一种常见且必要的操作。较大的文本块可以保持更多的上下文 的语义一致性,但它们也倾向于在每个块中包含更多的噪声. 常用的分块策略包括固定大小块化、递归块化、滑动窗口块化、基于段落的块化、语义块化等。某些方法旨在确定查询所需的详细程度,并基于此识别选择适当粒度的文本块进行检索。或者,一些方法选择处理和细化文本成较小的片段,以保持高度的信息完整性。此外,还有一些方法采用视觉模型按照原始文档结构分割文本。

3.3.2 数据检索增强

信息检索(IR)技术在RAG应用中发挥着关键作用。其主要步骤包括建立数据索引、处理查询请求、执行检索操作、对检索结果进行重新排序以及最终评估。

索引这个步骤的目的是建立从搜索词到文本片段的映射,确定检索系统的逻辑操作方式。索引方法大致分为三类:稀疏、密集和混合检索。稀疏检索使用特定词来索引文本片段。相比之下,密集检索将文本片段映射到与查询要求一致的密集特征向量空间。混合检索结合了稀疏和密集技术的元素。

  • 稀疏检索:这是第一个因其简单性和直观性而被广泛采用的索引方法。像TF-IDF和BM25这样的技术旨在识别每个文本段最具代表性的关键词,基于它们的相对频率。这些方法在许多RAG项目中仍然很流行。然而,词匹配方法由于无法识别同义词,可能会导致检索损失。为了解决这个问题,可以使用KNN等方法进行关键词的相似性匹配。或者,像关键字这样的索引可以被更改为对相应文本段的查询标记的概率的预测。

  • 密集检索:这种方法通常涉及使用预训练或微调的文本编码器将文本映射到与查询要求一致的密集向量空间。基于BERT的编码器通常在无监督数据上使用DPR、ANCE、SimCSE和TAS-B等方法进行微调作为密集检索器。其他人则采用无监督对比学习进行微调,例如Contriever。使用LLMs的反馈来指导检索器的训练目标也可以有效地提高检索器对LLMs的适用性。鉴于LLMs的强大能力和表达潜力,基于LLM的密集检索最近已成为一个重点领域和探索领域。LLM2vec将预先训练过的LLM 的注意机制修改为双向的注意机制,并采用无监督训练的掩码下标记预测方法,得到基于llm的密集检索嵌入器。类似地,Llama2Vec利用两个预文本任务——基于嵌入的自动编码和基于嵌入的自动回归——训练了一个基于LLaMA架构的无监督密集检索编码器,从而显著提高了检索任务的性能。

  • 其他方法:结合稀疏检索和密集检索,是一种同时关注文本片段的中心主题和全局特征的有效方法。Feng等人(2023)提出最初确定回答查询所需的知识领域作为一个固定的专业领域,然后使用密集检索在这个领域内召回补充信息。许多研究探索了各种将密集向量索引与稀疏编码器索引混合的方法,以更好地捕捉文本块的语义信息,并提高目标段落检索的精度。另一方面,Tang等人(2024)通过微调增强了LLM的能力,用于索引和检索,有效地将这些能力直接整合到LLM中。这使LLM能够为每个查询自主生成数据索引和文本段。

查询文档对齐此步骤的目标是将查询与外部数据中的文档段对齐,以确定能够帮助回答查询的最佳文档段。如图3所示,有三种主要的对齐方法:传统对齐、文档领域对齐和查询域对齐。传统对齐涉及将文档片段和查询映射到相同的编码空间。例如,许多基于双编码器的密集检索架构都具有专门的查询编码器。相反, 如果像RAG这样的系统使用稀疏检索,就需要从查询搜索中提取关键字。进一步的细化可以通 过查询重写技术来实现,它通过减少与用户术语不准确或模糊描述相关的问题来提高搜索精度,有效地提高了搜索结果的精确性。文档领域对齐涉及首先生成合成答案,然后使用这些答案来回忆相关数据,有效地解决查询的问题,以及检索到的数据不在相同的分布空间中。

在这方面的著名工作是HyDE。查询领域对齐涉及为每个文本的原子单元生成一组合成问题,将文本片段映射到查询空间,然后检索与原始查询最接近的合成问题及其对应的文本片段。这种方法确保了为回答查询选择最相关和上下文适当的片段。SlimPLM使用一个小代理模型来生成启发式答案,然后使用这些答案来预测回答查询所需的知识。这种方法还为对齐查询到文档空间提供了一种有效方法。

重新排序和修正在检索到前k个文本块后,RAG系统必须过滤和重新排序这些段,大多数RAG系统使用检索器提供的关联分数作为排名的基础,而一些研究使用特定指标,如困惑度或困惑度增益作为排名标准。其他努力涉及使用LLMs来评估检索文本块的可信度和效用,训练一个可插拔的奖励驱动的上下文适配器来细化检索器的输出。此外,一些研究专注于预训练一个小型语言模型,专门用于事实验证,用于过滤出错误的检索文本块,从而提高回忆文本的质量。‍

图3: 三种类型的查询-文档对齐

递归检索或迭代检索考虑到单次检索尝试的准确性固有限制,一个有效的缓解策略是执行多次检索,以逐步解决任何遗漏。

3.3.3 回应生成增强

生成回应需要确定检索到的信息是否足够,或者是否需要额外的外部数据。处理检索到的知识与模型内部先验知识之间的冲突也是必要的。监督微调是提高RAG系统中生成性能的一种有效方法。当面对不相关或错误的信息作为检索到的上下文时,预先训练好的大型语言模型往往很容易被误导,导致不正确的回答。许多研究表明,通过巧妙地设计rag系统的训练数据,微调或预训练前可以有效缓解这一问题。通过实验分析,RAAT证明了不相关检索噪声、相关检索噪声和反事实检索噪声对RAG模型的不利影响是逐步增加的。通过结合这些训练过程,这些方法使LLM能够在存在噪声检索的情况下,显著提高回应生成质量。此外,为确保RAG系统中检索器和生成器之间的性能更加一致,一些研究在训练阶段采用检索器和生成器的联合训练。

4 隐式事实查询(L2)

4.1 概述

这些查询涉及的数据依赖性并不立即明显,可能需要一定程度的常识推理或基本逻辑推理。必要的信息可能分散在多个段落中,或者需要简单的推理。(图2中的示例)

此级别的查询需要从指定文档中的多个文档中收集和处理信息。所需的信息收集可能超出了单个检索请求的能力,将原始查询转换为多个检索操作,并将结果聚合为一个可理解的答案。这一层次通常涉及常识性推理,而不需要特定领域的专业知识。这种类型的查询可能包括统计查询、描述性分析查询和基本的聚合查询。例如,“有多少实验的样本量大于1000?”(给定一系列实验记录)和“最常提及的前3个症状是什么?”(给定一系列医疗记录)这类操作在“有多少”和“最多的是什么”类型的查询中很常见,而多跳推理经常使用。因此,我们可以将第二级查询,Q2定义如下:

对于任何查询q和其对应的答案a,一个Q2事实查询是一个存在:

  • 一组显式事实查询,每个查询都可以从数据集D中的特定数据段中直接检索,使得:

其中rD(qi)识别出回答qi所必需的相关数据段,并且这些段的并集提供了回答q所需的信息。

  • 一个回应生成器θ,通常是一个提示的LLM推断,通过聚合响应

并应用常识推理来推导出数据中没有明确说明的答案。回应θ(rD(q))应该近似正确的答案a,展示了通过聚合对Q1查询的回答可以有效地回答原始查询Q2。

以下是在此级别上的一些查询示例:

  • 样本量大于1000的实验有多少个?(给定一系列实验记录)

  • 最常提及的前3个症状是什么?(给定一系列医疗记录)

  • 公司X和公司Y的AI战略有什么区别?(给定关于公司X和公司Y的最新新闻和文章系列)

4.2 挑战和解决方案

在这个层次上,查询仍然围绕着事实问题,但答案没有在任何单文本段落中明确显示。相反,它们需要通过常识性推理结合多个事实来达成一致。二级查询的主要挑战主要包括:

  • 自适应检索量:不同的问题可能需要不同数量的检索上下文,而特定数量的检索上下文可能取决于问题和编辑集。固定数量的检索可能会导致信息噪声或信息不足。

  • 推理和检索之间的协调:推理可以指导需要检索的内容的重点,而从检索到的信息中获得的见解可以 迭代地细化推理策略。为了解决这些复杂性, 需要进行智能集成,并有选择性地存储外部数据,充分利用LLMs固有的推理能力。

解决这个级别的挑战的方法包括迭代RAG、RAG上图/树和带有SQL的RAG。

4.3 迭代RAG

隐式事实查询与多跳RAG任务类似。这类方法动态地控制多步RAG过程,迭代地收集或纠正信息,直到得到正确的答案。

  • 基于规划:在前期检索阶段或在检索过程中动态生成逐步检索计划,可以细化每次检索的重点,有效地 指导迭代RAG系统。例如,ReAct逐步更新每一步的目标,减少回答查询所需的知识缺口。IRCoT和RAT使用思维链来指导RAG管道,根据先前回忆的信息做出当前检索目标的决策。GenGround使LLM能够在两个阶段之间交替,直到达到最终答案:(1)生成一个简单的单步问题并生成一个直接答 案,(2)将问答对跟踪到检索到的文档, 以验证和纠正预测中的任何不准确性。这个迭代过程保证了更可靠和更准确的响应。

  • 基于信息差距填补:ITRG引入了一个迭代检索生成协作框架,根据现有知识生成答案,然后继续检索和生成后续回合中未知部分的回答。类似地,FLARE重新审视并修改每次迭代中生成答案的低概率词。另一方面,Self-RAG微调一个大型模型,自主决定何时搜索,何时停止搜索,并开始回答问题。

4.4 图/树的问题问答

解决隐式事实查询需要从多个引用中综合信息。图或树,无论是基于知识的或数据结构的, 自然地表达了文本之间的关系结构,使它们非常适合这种类型的数据检索问题。

  • 传统知识图:提高LLMs效率的初始结构之一是传统知识图,其中每个节点代表一个实体,节点之间的边表示这些实体之间的关系。提出了一个面向未来的LLMs和知识图谱(KGs)的发展路线图,包括:1) KG增强的LLMs,在LLMs的预训练和推理阶段整合KGs,以加深模型对获得知识的理解;2) LLM增强的KGs,利用LLMs进行各种KG任务,如嵌入、完成、构建、图到文本生成和问答;3) 协作的LLMs+KGs方法,其中LLMs和KGs都发挥着互补的角色,通过由数据和知识驱动的双向推理相互增强,Rigel-KQGA模型是一个端到端的KGQA模型,该模型基于一个查询预测必要的知识节点,并将其与LLM结合来推导答案。然后在图上执行迭代BFS搜索,使用LLM作为思考机器来确定最佳探索路径并执行剪枝。R3通过LLM引入几种可能的常识公理,可以解决查询,顺序搜索相关知识子图, 以评估当前信息是否足以回答问题,直到问题得到解决。

  • 数据块图/树:LLMs令人印象深刻的阅读理解能力使它们能够有效地掌握文本,而不需要将其分解为实体和关系。在这种情况下,研究人员已经开始尝试使用文本块或数据块作为图或树上的节点,使 用边来表示其他高级或更复杂的设计方法。Knowledge-Graph-Prompting讨论了三种需要隐式挖掘的流行问题,来自(a)桥接问题依赖于顺序推理,而(b)比较问题依赖于不同段落的并行推理。©结构问题依赖于获取相应文档结构中的内容。

4.5 自然语言到SQL查询

当处理结构化数据时,将自然语言查询转换为SQL(NL2SQL)可能是一种有效的方法。像Chat2DB这样的工具通过将用户查询翻译成数据库查询来促进这一过程。在大型语言模型时代,文本到SQL方面取得了显著进展, 这允许我们利用 这些工具用于从结构化数据库中检索信息。该功能可以作为一个 有价值的外部数据源, 以增强LLM的生成能力。通过集成文本到SQL工具 ,LLM可以访问和合并结构化数据,增强其生成更准确和与上下文相关的响应的能力。这种集成不仅提高了生成内容的深度和质量,而且还扩展了LLM应用的范围,使他们能够执行需要与数据库内容进行交互和解释数据库内容的更复杂的任务。

4.6 关于事实查询的讨论

是否使用微调。一些作品已经证明了LLMs在微调过程中获得新事实知识的难度。这一过程可能会导致LLM的整体表现逐渐恶化,从而产生准确的反应,并且往往会导致产生更多的幻觉,此外,研究表明,使用新的事实数据对LLMs进行微调可能导致模型机械地记忆事实陈述。有趣的是,改变这些记忆事实的措辞可以使最近学到的知识无效,表明LLMs对这些信息的理解和记忆水平较低。这指出了当前微调过程的局限性,以及需要更复杂的方法来有效地整合和适应新信息。

是否要分离不同层次的事实查询。显式事实查询和隐式事实都是基于事实的,并且在构建数据增强的LLM应用程序之前,这对于确定这些查询属于哪个级别至关重要。将显式事实查询误分类为隐式事实查询可能导致检索到大量看似相关但实际上对回答问题无帮助的无关信息,这可能会误导LLM并浪费计算资源。相反,将隐式事实查询误认为是显式事实查询可能会阻止使用适当的方法检索足够的和全面的外部辅助数据。隐式的事实查询通常需要动态集成特定于查询上下文的信息,而显式的事实查询通常只需要一个数据片段,从而导致检索到固定数量的外部数据。这可能导致LLM的次优性能。因此,基于对目标任务的深入理解,初步区分查询的级别是有利的。此外,大量的努力已经投入到训练模型中,以自主评估检索到的信息是否足够,例如self-RAG所展示的方法。

5 可解释理由查询(L3)

5.1 概述

在本节和下一节中,我们将深入探讨那些需要借助外部数据来提供解答依据的查询。这些查询不仅要求模型能够掌握事实信息,还需具备理解和运用数据上下文中的特定领域逻辑。我们将这些查询细分为两大类:基于解释性理由的查询和基于隐含性理由的查询,如图4所示。

解释性理由查询是其中一类较为直接的查询类型。这类查询的辅助数据通常以清晰的方式呈现问题解决的思维过程。这些数据可以采取以下形式:

  • 简单文本:文本描述是呈现可解释理由最常见的形式。可能包括专业文件、手册或特定领域的操作指南等。这些文档详细阐述了复杂情境下的决策过程。例如,FDA指南文件为制药厂或医生用药指南等文件提供了洞察,说明了像FDA官员或医生这样的专家如何处理特定案例。

  • 结构化指令:更明确的推理关系或决策路径可能以结构化格式呈现。这些理由可以被理解为文本条件摩尔机或文本条件米利机。在计算理论中,摩尔机是一种有限状态机,其输出值仅由其当前状态决定。控制状态转换的条件通常用文本表达,LLMs需要解释,与传统程序不同,传统程序在本地代码上运行。例如,考虑一个客户支持代理,它遵循手册处理用户的产品更换或退款请求。类似地,米利机是一种有限状态机,其输出值由其当前状态和输入决定。区别在于,动作(如API调用)不仅由状态决定,还由前一个状态的转换关联的文本消息决定。自然地,这些特定领域的理由可以以工作流、决策树或伪代码的形式表示。

图4:基本原理查询的演示

这里有几个这个级别查询的例子:

  • 根据给定的胸痛管理和指南,应该如何诊断和治疗胸痛患者?

  • 在现实生活场景中,如何回应用户的问题?(给定客户服务工作流)

5.2 挑战和解决方案

在可解释理由查询领域,另一个挑战是以可理解的方式将外部数据中的理由整合到LLMs中。主要挑战如下:

  • 提示优化成本:以高时间和计算要求为标志的提示优化过程。不同的查询需要量身定制的背景知识和决策标准,因此需要不同的例子。虽然手动设计的提示非常有效,但它们劳动密集且耗时。此外,训练模型为各种查询生成量身定制的提示会产生显著的计算开销。

  • 有限的可解释性:提示对LLMs的影响是不透明的。在许多情况下,通常限制对LLMs内部参数的访问,这使得确定不同提示对这些模型的影响变得复杂。这种缺乏透明度阻碍了我们对LLM对不同提示的响应的可解释性的一致理解和验证。

5.3 提 示调优

对于可解释理由查询,关键问题是如何有效地将外部数据中的理由整合到LLMs中,并确保这些模型能够准确地遵循并基于这些理由做出反应。Text2MDT提供了一个可行的演示,介绍了两种从医疗指南和教科书中自动提取医疗决策树的方法。这个过程阐明了冗长医疗文本中的逻辑链,使它们更容易理解。类似地,MedDM开发了一种临床指导树格式,可以由LLMs执行,提出了一种在这些可执行CGTs上推理的方法,以及一个患者与LLMs之间多轮对话的框架。InstructRec旨在利用LLMs在推荐系统中的能力,设计一种通用格式,使用自然语言描述用户的偏好、意图、任务形式和上下文,从而创建一个高性能的、基于语言的推荐系统。

将基本原理直接作为自然语言指令整合到LLMs中并不一定能产生最佳性能,而且手动设计提示可能会很耗时。为了解决这个问题,使用提示调整技术变得至关重要,以提高LLMs遵循特定理由的能力。一种有效的方法是应用强化学习,如TEMPERA框架,设计包含有限指令、示例和口头化的提示,这些提示被纳入强化学习的动作空间中。在这里,LLM生成正确回应的概率作为奖励,引导模型在数据集上发现最优的提示配置。类似地,Rlprompt采用强化学习方法,训练一个适配器来协助小型语言模型根据LLM回应的相对准确性反馈生成最优提示。另一种创新策略是定向刺激提示,它利用LLMs在下游任务上的表现作为奖励机制。这种方法训练模型提取和利用方向性刺激——针对各个实例量身定制的提示或关键字,从而确保LLMs的行动更紧密地与预期结果对齐。

5.4 CoT提示

为了解决复杂的基本原理,LLMs需要进行扩展的推理链,这一过程不同于跨不同事实信息的推理过程。然而,思维链、思维树或思维图方法证明对这类场景是有效的。对于研究充分并且具有高通用性的问题,人工设计CoT提示是一个可行的解决方案。Ji等人(2023)提出了一种自我反思方法,将知识获取与答案生成整合起来。通过使用外部工具和设计提示,他们构建了三种类型的自我反思循环:事实知识获取循环、知识一致答案生成循环和问题蕴含答案生成循环,从而将外部理由整合到模型的处理中。此外,Wu等人(2024)手动分析了临床记录中的错误类型,并为GPT-4模型开发了三种不同的CoT提示,以专注于干预、诊断和管理错误。这种有针对性的提示有助于自动错误检测、跨度识别和临床记录中的更正任务。

尽管手动设计CoT提示非常有效,但它需要大量的人力和时间资源。为了缓解这些问题, 自动成本提出了 一种推广理性链的技术最小标记数据集。该方法采用方差减少策略梯度策略来评估每个CoT链的重要性,从而促进选择最有效的提示组合。

另一种利用思维链提示的形式涉及构建以LLMs为中心的智能体工作流。这通常需要开发一个更全面的系统来解决各种现实世界场景。根据Wang等人的说法,这类系统可以广泛地划分为分析、记忆、规划和行动模块。可解释理由可以以多种形式整合到多个模块中,允许智能体根据环境或人类反馈进行适应和迭代。像LLM Reasoners和SoCREval这样的最新进展专注于自动评估推理链的质量。这些方法还有助于构建健壮的数据增强型LLM应用。

基于可解释理由的应用跨越了各种领域。例如,CoML将AutoML知识作为提示整合到LLM中,从历史实验记录中动态检索有用信息,并将这些元素结合起来,使LLM能够为新任务开发机器学习解决方案。MetaGPT开发了一个软件开发的多智能体系统,项目中的不同利益相关者每个都作为智能体代表。这种设置使得多个智能体能够根据现实世界的工作流程进行协作,有效地完成软件开发任务。类似地,复杂的代理 系统已经被设计的内置领域,如客户服务和医疗问题回答,在这些领域中,代理是为处理特定类型的查询而定制的,这可能涉及到理解提供准确的医疗信息的复杂用户请求者。这些系统不仅提高了交互质量,而且提高了响应的效率和准确性 ,展示了LLM在集成到精心设计的代理工作流程时的多功能性和力。

6 隐藏理由查询(L4)

6.1 概述

隐藏的基本原理查询是最具挑战性的查询类型。与可解释的原理查询不同,它为响应查询所需的原理提供了明确的指导,隐藏的原理查询提供了特定于领域的推理方法,可能没有明确描述,而且数量太多而无法耗尽 。这些原理通常包含无法在典型上下文窗口中充分探索的各种内容,并且可能缺乏清晰的指令,代表了隐含在数据中的领域专业知识形式。这样的数据可能涵盖:

  • 域内数据:隐藏的基本原理查询可能会利用来自相同域的数据,如历史上的问答记录或人为地生成数据 。该域数据本质上包含了处理当前查询所需的推理技能或方法。例如,在Python编程难题的背景下,过往问题的解决方案往往蕴含着能够帮助解决当前问题的经典算法和解题思路。

  • 预备知识:另一种形式的隐藏的理由,广泛的,分散的知识库,在不同的应用中不同。这种基本的知识可能构成基本的公理制度,如构成法律判决基础的所有地方法典。它还可以包括已证明的中间结论 , 简化推理过程,如数学证明。当使用外部数据解决现实世界的问题时,这些先验知识也可能源于复杂的积累、人类经验和经验总结。

处理隐藏理由查询因此需要复杂的分析技术来解码和利用嵌入在不同数据源中的潜在智慧,这对于传统的RAG在有效地解释和应用这些复杂和隐含的信息方面提出了重大挑战。这类查询的例子包括:

  • 经济形势将如何影响公司未来的发展?(给定一系列财务报告,需要经济和财务领域的深层分析)

  • 如何使用数字5、5、5和1得到24分?(给定一系列24分游戏的示例和相应答案,需要数学领域的创造性思维)

  • 阿富汗允许父母将他的或她的国籍传给在国外出生的孩子吗?(考虑到全球公民身份法的复杂性和多样性)

6.2 挑战和解决方案

在构建数据增强型LLM应用时,处理隐藏理由查询面临着重大的挑战,主要的困难表现在以下领域:

  • 逻辑检索:对于涉及隐藏的基本原理的问题,外部数据的帮助性并不仅仅依赖于实体级或语义相似性,而是依赖于逻辑一致性或主题对齐。标准的检索方法通常很难捕获查询的真正目标,或基于所提出的问题来识别具有逻辑相似性的文本段。这就需要开发更复杂的检索算法,它可以解析和识别底层的逻辑结构,而不是仅仅依赖于表面的文本相似性。

  • 数据不足:从根本上说,外部数据可能不明确地包含与当前查询相关的指导或答案。相反,相关信息通常被嵌入到分散的知识中或通过例子进行说明。这种间接表示需要在数据解释和合成方面的强大能力 , 要求LLM有效地从碎片化或切向相关的数据源中获得连贯的答案。这些挑战强调了在LLM框架中,必须需要使用复杂的数据集成和推理能力, 以便有效地导航隐藏的基本原理查询的复杂性。

6.3 离线学习

为了解决这类问题,一种常见方法是在离线状态下识别和提取数据集中的规则和指导方针,然后检索相关项目。对于生成推理理由,一些作品如STaR和LXS使用LLM进行理由生成。前者采用迭代式少样本示例方法从小型数据集生成到大型数据集,后者引入了一个学习者模型生成解释和一个评论家模型对其进行验证的两角色解释提取过程。

GL通过在上下文中学习识别错误,并将这些错误概括为未来任务的指导方针。LEAP通过生成错误、低级原则和高级原则,将这些原则整合到提示中进行最终推理。RICP使用训练数据中的错误来生成高级数据推理和具体的见解,然后使用层次聚类来对错误模型进行分组,生成任务级和问题级的原则,这些原则被组合和检索为问题级的见解。

一些集成方法,如MedPrompt,包括GPT-4生成的思维链,用于训练示例的自我验证,与KNN检索上下文学习方法结合使用。Agent Hospital通过反思生成理由,并对生成数据同时利用记录检索和经验检索。

6.4 上下文学习(ICL)

使用示例进行上下文学习是发现隐藏性原理的一种常见方法。预先训练过的大语言模型表现出大量的上下文学习能力,这可以通过检索基于相似性的样本来增强,从而利用模型的少样本学习能力。然而,提示中的无关信息的包含很容易分散LLMs的注意力,导致不正确的回答。OpenICL,由Wu等人开发,构建了一个ICL框架,探索了不同传统检索示例和推理技术对ICL有效性的影响。

此外,基于LLMs对上下文示例的反馈来训练较小的模型,以选择最优的演示和例子,可以更有针对性地改进特定任务的上下文构建。为了解决基于语义相似性的示例检索可能无法涵盖实际测试中需要的更广泛关联范围的问题,Su等人采用了一种无监督的、基于图的选择性注释方法,称为vote-k,构建了一个更多样化和代表性的示例数据库,用于少样本学习。此外,Zhang等人提出了一种Auto-CoT方法,将示例聚类成各种代表性类型。通过多样化地抽样问题并生成推理链,这种方法构建了更好地支持学习过程的示例。

然而,使LLMs通过少样本学习掌握超出其训练领域的推理能力仍然是一个重大挑战。Wang等人通过对 各种推理路径进行采样,然后边缘化这些路径,以选择最一致的答案,从而提高了LLM选择正确推理链的概率。Agarwal等人引入了两种可扩展的方法来生成可用示例,即强化ICL和无监督ICL,旨在取代人类生成的示例,从而扩大可用示例的范围。DIN-SQL寻求将任务分解成更简单的子任务,并使用这些子问题的解决方案作为LLMs的提示,显著提高了它们从文本生成SQL的性能。类似地,DUP确定了LLMs在解决复杂数学问题时使用的链式思维方法面临的三个主要问题:语义误解、计算错误和遗漏步骤,而语义误解是一个主要的限制因素。鼓励LLMs深入理解问题并提取基本信息以进行决,可以通过解决这些语义误解,显著提高其解决数学问题的能力。

上下文学习越来越多地被用于数学、法律、医学和金融等领域,在开发数据增强型LLM应用中发挥着至关重要的作用。这种方法不仅扩展了LLMs的功能能力,还增强了它们在不同领域的实际效用。

6.5 微调

尽管LLM具有强大的上下文学习能力,但准确地识别复杂和冗长的逻辑链的基本原理或最佳示例仍然是一个大挑战。此外,提供广泛的外部先验知识也可能对LLM的推理能力提出挑战。微调成为一种有前景的方法。它不仅利用了LLMs在预训练期间获得的广泛基础知识,还使它们能够快速掌握新的领域理由。这种方法为增强LLMs在处理高级和专业任务时的适应性和有效性提供了一条可行的路径。

图5:数据增强LLM应用程序中不同查询级别的主要技术总结

指令调优是将新功能注入llm的一种常见方法,通常涉及使用成对(指令、输出)数据进行监督微调。构建数据集有三种主要方法:a)来自现有数据集,b)通过手工指令手动创建,以及 c)使用功能强大的LLMs生成合成数据。此外,还有许多研究探讨了如何优化指令数据集中的数据分布以提高微调效果。然而,在构建数据增强型LLM应用时,微调在时间范围和计算资源方面仍然是一种相对昂贵的 方法。最近,人们纷纷努力降低与微调大型车型相关的成本。例如,涉及将小型适配器模型与LLMs集成,在微调期间冻结LLM的参数,只优化适配器的权重。前缀调整和提示调整涉及在输入前添加一组可训练的向量,这些向量在训练期间进行了优化,以提高LLM 的性能。低秩适应通过在每个密集层上施加低秩约束来近似更新矩阵,减少了适应下游任务所需的可训练参数的数量。

近年来,随着研究的深入和技术的发展,使用监督微调来增强LLMs在数学推理、金融分析、法律判断和医疗诊断等专业领域的能力取得了显著进展。例如,ChatTimeLlama引入了一个可解释的时间推理指令,用来调整数据集,并在LLaMA上进行了微调,提高了模型的复杂时间推理、未来事件预测能力以及可解释性。LISA利用涉及推理的一小段数据样本对多模态LLM LLaVA进行了微调,这导致了推理分割能力的实质性改进。MAmmoTH巧妙地构建了一个数学例子数据集,它独特地结合了思维链和程序思维推理,确保了对不同数学领域的广泛覆盖,并增强了LLM解决一般数学问题的能力。ReFT提出了一种从与同一问题对应的多个注释推理路径中学习的方法。它自动为给定的数学问题采样大量推理轨迹,利用正确答案生成回复信号。ChatDoctor利利用来自广泛使用的在线医疗咨询平台的10万名医患对话的大数据集来微调LLaMA,显著提高了模型理解患者需求和提供有效建议的能力。FinGPT开发了一个开源的基于财务数据的LLM微调管理和轻量级的,低等级的自适应技术。DISC-LawLLM为中文司法领域创建了一个监督微调数据集,对LLMs进行了微调,以有效地服务于不同法律领域的各种用户,提高了法律推理能力。

图6: 三种方法注入特定域数据LLM:a)提取部分域数据库的查询作为上下文输入LLM,b)训练一个较小的模型与特定的域数据,然后指导集成外部信息随后输入到LLM,c)直接使用外部域知识调整一般的大型语言模型成为领域专家模型

7 结论

在本文中,我们根据查询的主要焦点将数据增强的LLM应用程序划分为四个不同的类别,每个类别都面临着独特的挑战,因此需要定制的解决方案,如图5所示。对于与静态常识相关的查询,通过思维链方法部署通用LLM是有效的。外汇复制事实查询,主要的挑战是确定数据库中的确切位置,从而使基本的RAG成为选择的方法。在隐式事实查询的情况下,它需要对多个相关事实进行排序,在图或树结构上的迭代RAG和RAG实现是首选的,因为它们能够同时检索单个事实并互连多个数据点。当需要广泛的数据链接时,文本到SQL的技术被证明是不可或缺的,它可以利用数据库工具来促进外部数据检。对于可解释理由查询,通过提示调整和CoT提示取得进展至关重要,以提高LLMs遵守外部指令的合规性。最困难的是隐藏理由查询,它要求从广泛的数据集中自主综合解决问题的方法。在这里,离线学习、上下文学习和微调成为了重要的方法。

在开发针对性的LLM应用之前,作为领域专家,我们必须获得对预期任务的深入理解,确定相关查询的复杂性级别,并选择相应的技术方法进行解决。这些方法主要通过三种机制将知识注入LLMs,如图6所示:

a) 基于查询提取部分领域数据作为LLM的上下文输入

b) 用特定领域数据训练一个小型模型,然后指导随后输入到LLM的外部信息的整合

c) 直接使用外部领域知识对通用大型语言模型进行微调,使其成为领域专家模型。

这些策略在数据量、训练持续时间和计算资源方面的要求各不相同,依次增加。通过上下文的知识注入提供了更好的可解释性和稳定性,但受到有限上下文窗口的限制,并可能在中间丢失信息,最适合数据可以简洁地解释为短文本的场景。然而,该方法对模型的检索能力和知识提取能力提出了挑战。小型模型方法的优点是减少了训练时间,能够吸收大量的数据,但它的有效性取决于模型的能力,这可能会限制LLM在更复杂任务中的性能,并通过数据扩展带来额外的训练成本。微调有助于利用大型模型的容量和广泛的领域特定数据,但其对LLM的影响强烈依赖于所使用的数据设计。使用领域外的事实数据进行微调可能会导致LLM生成更多错误的输出,同时还有可能丢失以前已知的领域知识,并在微调期间忽略未遇到的未完成任务。

因此,选择一个适当的数据注入策略到LLM中,需要深入了解自己的数据源,并基于这一见解做出明智的决策。

此外,在实际场景中,数据增强的LLM应用程序在风格上涉及到不同查询类型的组合,因此,开发人员需要设计一个集成了多种方法的路由管道,以有效地解决这些多方面的挑战。

读者福利:如果大家对大模型感兴趣,这套大模型学习资料一定对你有用

对于0基础小白入门:

如果你是零基础小白,想快速入门大模型是可以考虑的。

一方面是学习时间相对较短,学习内容更全面更集中。
二方面是可以根据这些资料规划好学习计划和方向。

包括:大模型学习线路汇总、学习阶段,大模型实战案例,大模型学习视频,人工智能、机器学习、大模型书籍PDF。带你从零基础系统性的学好大模型!

😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓

👉AI大模型学习路线汇总👈

大模型学习路线图,整体分为7个大的阶段:(全套教程文末领取哈)

第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;

第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;

第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;

第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;

第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;

第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;

第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。

👉大模型实战案例👈

光学理论是没用的,要学会跟着一起做,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

在这里插入图片描述

👉大模型视频和PDF合集👈

观看零基础学习书籍和视频,看书籍和视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
在这里插入图片描述
在这里插入图片描述

👉学会后的收获:👈

• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。

👉获取方式:

😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT猫仔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值