当前位置: 首页 > news >正文

大语言模型落地的关键技术:RAG

1、什么是RAG?

RAG 是检索增强生成(Retrieval-Augmented Generation)的简称,是当前最火热的大语言模型应用落地的关键技术,主要用于提高语言模型的效果和准确性。它结合了两种主要的NLP方法:检索(Retrieval)和生成(Generation)

  • 检索(Retrieval):这一部分的工作是从大量的文本数据中检索出与输入问题最相关的信息。它通常使用一个检索系统,用于大规模的文档集合(例如维基百科)中寻找与输入相关的文段。
  • 生成(Generation):生成部分则使用类似GPT的语言模型,它会根据检索到的信息来生成响应或回答。这个过程涉及理解检索到的内容,并在此基础上生成连贯、相关且信息丰富的文本。

RAG模型的关键在于它结合了这两种方法的优点:检索系统能提供具体、相关的事实和数据,而生成模型则能够灵活地构建回答,并融入更广泛的语境和信息。这种结合使得RAG模型在处理复杂的查询和生成信息丰富的回答方面非常有效。这种技术在问答系统、对话系统和其他需要理解和生成自然语言的应用中非常有用。

2、RAG发展历程

RAG于2020年中期由Lewis等人提出,是LLMs领域中的一种范式,可增强生成任务。具体而言,RAG包括一个初始的检索步骤,LLMs在此步骤中查询外部数据源以获取相关信息,然后才回答问题或生成文本。这个过程不仅为后续的生成阶段提供信息,还确保回答基于检索到的证据,从而显著提高了输出的准确性和相关性。

在推断阶段动态检索来自知识库的信息使RAG能够解决生成事实错误内容的问题,通常被称为“幻觉”。将RAG整合到LLMs中已经迅速被采用,并成为完善聊天机器人能力和使LLMs更适用于实际应用的关键技术。

RAG的演进轨迹在四个不同阶段展开,如下图所示。

在2017年的创始阶段,与Transformer架构的出现相一致,主要重点是通过预训练模型(PTM)来吸收额外的知识以增强语言模型。这个时代见证了RAG的基础工作主要集中在优化预训练方法上。在这个初始阶段之后,出现了相对沉寂的时期,与RAG相关的研究进展较少。随后ChatGPT的出现标志着LLMs领域的重要时刻,社区的重点转向利用LLMs的能力来实现更高的可控性和解决不断变化的需求。

因此,大部分RAG工作集中在推断上,只有少数工作致力于微调过程。随着LLMs能力的不断提高,特别是GPT-4的推出,RAG技术的格局发生了重大变化。重点转向了RAG和微调的优势相结合的混合方法,同时也有少数人继续关注优化预训练方法。

3、RAG的工作流

下图中展示了一个典型的 RAG 应用工作流程:

用户向 ChatGPT 查询最近引起广泛关注的事件,这些事件引发了大量的公众讨论。作为最著名和广泛使用的LLMs,受限于其预训练数据,ChatGPT缺乏对最新事件的了解。RAG通过从外部知识库中检索最新的文档摘录来解决这一问题。在这种情况下,它获取了与查询相关的一些新闻文章。这些文章连同最初的问题被合并成一个丰富的提示,使ChatGPT能够合成一个知情的回答。


这个示例说明了RAG的过程,展示了它通过实时信息检索来增强模型的响应能力。从技术上讲,RAG已经通过各种创新方法得到丰富,这些方法解决了关键问题,例如“要检索什么”、“何时检索”和“如何使用检索到的信息”。


关于“要检索什么”的研究已经从简单的标记检索和实体检索发展到更复杂的结构,如块和知识图研究重点放在检索的粒度和数据结构的级别上。粗粒度带来更多的信息,但精度较低。检索结构化文本提供了更多信息,但效率较低。关于“何时检索”的问题已经产生了各种策略,从单一检索到自适应检索和多次检索,再到高频率检索的方法。

4、RAG增强检索的框架

RAG研究范式不断发展,我们将其分为三种类型:基础RAG(Naive RAG)、高级RAG(Advanced RAG)模块化RAG(Modular RAG)。下图简单的说明了这三种RAG的工作流程:

4.1 基础RAG

基础RAG是检索增强生成(RAG)范式的最早形式之一,其基本概念是将外部检索与大型语言模型(LLMs)的生成能力结合在一起。在基础RAG中,检索通常是基于查询的,并且用于检索外部知识库或数据源中的相关信息。一旦获得了检索到的信息,它们可以与LLMs的内部知识结合在一起,以生成更准确和相关的文本或回答。


然而,基础RAG虽然在改善LLMs的性能方面取得了一定的成功,但也存在一些限制和不足之处。其中一些主要限制包括:

  • 不适应多模态数据:基础RAG主要关注文本数据的检索和生成,对于多模态数据(例如图像、音频)的处理能力有限。
  • 缺乏对话性:基础RAG通常是单向生成,难以实现复杂的对话或多轮问答。
  • 效率低下:在某些情况下,基础RAG可能需要大量的检索操作,导致效率下降。

由于这些限制,研究人员开始探索更高级的RAG范式,以克服这些问题并提高RAG的性能和适用性。这导致了高级RAG和模块化RAG的发展,这些范式在各种应用中得到了广泛的应用。
 

4.2 高阶RAG

高级RAG是检索增强生成(RAG)范式的进化形式,其目的是克服基础RAG的一些限制,并进一步提高性能和适用性。在高级RAG中,研究人员采用了一系列创新性方法和技术,以应对复杂的自然语言处理任务和挑战。


以下是高级RAG的一些关键特点和创新:

  • 多模态支持:高级RAG不仅限于文本数据,还可以处理多模态数据,例如图像、音频和视频。这使得高级RAG在各种多媒体应用中具有广泛的用途。
  • 对话性增强:高级RAG具备更强大的对话处理能力,可以实现更复杂的对话和多轮问答。这使其在聊天机器人和虚拟助手等应用中表现出色。
  • 自适应检索策略:高级RAG引入了更智能的检索策略,可以根据上下文和任务自动调整何时进行检索以及何时使用检索到的信息。这提高了效率和性能。
  • 知识融合:高级RAG能够更好地将外部知识与内部知识融合,以生成更具洞察力和相关性的文本。这对于知识密集型任务特别有用。

高级RAG代表了RAG范式的进一步发展,具有更广泛的应用领域和更强大的性能。它在自然语言处理和人工智能领域中取得了重要的突破,并在各种实际应用中得到了广泛的采用。

4.3 模块化RAG

模块化RAG是检索增强生成(RAG)的另一种演进形式,目的是提供更大的定制性和灵活性,以满足不同应用场景的需求。与基础RAG和高级RAG相比,模块化RAG更注重将RAG系统分解为各种独立的组件,每个组件负责特定的任务或功能。


以下是模块化RAG的一些关键特点和概念:

  • 组件化架构:模块化RAG将RAG系统分解为多个独立的组件,例如检索组件、生成组件和评估组件。这些组件可以根据需要进行组合和替换,以实现定制化的RAG系统。
  • 可插拔性:模块化RAG允许研究人员或开发者轻松地添加新的组件或替换现有的组件,以适应不同的任务和数据源。这提高了系统的可扩展性和适应性。
  • 自定义管道:模块化RAG允许用户构建自定义的处理管道,根据特定的任务需求配置不同的组件。这使得RAG系统可以灵活地应对各种应用场景。
  • 集成外部工具:模块化RAG还支持集成外部工具和资源,例如不同的知识库、检索引擎或生成模型。这扩展了系统的数据和功能来源。

模块化RAG强调了灵活性和可定制性,使研究人员和开发者能够更好地适应不同的应用需求。这种方法在构建复杂的自然语言处理系统时非常有用,可以根据具体任务的要求构建定制的RAG系统。

5、RAG中的核心组件

RAG的核心组件分为三个部分检索(Retrieval)、增强(Augmentation)、生成(Generation),其分类结构如下图:

5.1 RAG中的检索(Retrieval)

检索是检索增强生成(RAG)框架的核心组件之一,它负责从外部数据源或知识库中获取与用户查询相关的信息。检索的质量和效率对于RAG系统的性能至关重要,因为它直接影响生成的文本或回答的准确性和相关性。

以下是与检索相关的一些关键概念和技术:

  • 检索策略:RAG系统需要确定何时进行检索以及如何选择要检索的信息。检索策略可以根据任务和上下文进行调整,以提高系统的效率和性能。
  • 检索粒度:检索可以以不同的粒度进行,从单个标记或实体到更大的文本块或知识图。选择适当的检索粒度取决于任务的要求和数据的结构。
  • 检索方法:有多种检索方法可供选择,包括基于关键字的检索、实体检索、自然语言查询和知识图检索等。每种方法都有其适用的情境和优势。
  • 检索效率:高效的检索是关键因素之一,尤其是在实时应用中。优化检索过程以降低延迟和资源消耗是重要任务之一。
  • 外部数据源:RAG系统可以从各种外部数据源中进行检索,包括互联网上的文档、知识库、数据库和API。选择合适的数据源对于获取准确和丰富的信息至关重要。

在RAG框架中,检索与生成和增强技术密切合作,以生成最终的文本或回答。因此,检索的质量和效率对于整个RAG系统的性能和效果至关重要。

5.2 RAG中的增强(Augmentation)

RAG中的增强技术是RAG框架的第二个核心组件,它的作用是进一步提升生成的质量和效果,以确保生成的文本或回答准确、相关且合乎要求。增强技术通过不同方式与检索和生成协同工作,以优化RAG系统的性能。

以下是与RAG中的增强技术相关的一些关键概念和方法:

  • 文本修正:增强技术可以用于修正生成的文本,以确保其准确性和合理性。这可以通过自动文本校对、语法纠正和事实验证等方式实现。
  • 知识融合:一些RAG系统具备将外部知识融合到生成文本中的能力。这可以通过将检索到的知识与生成的文本进行有机结合来实现。
  • 上下文增强:增强技术可以利用上下文信息来优化生成文本的相关性。这包括利用对话历史、用户偏好和任务上下文等信息。
  • 控制生成风格:一些RAG系统允许用户控制生成文本的风格、语气和表达方式。这提供了更高度定制化的生成能力。
  • 多模态增强:在生成多模态内容时,增强技术可以确保不同模态之间的一致性和相关性,以提供更丰富的用户体验。
  • 实时更新:一些RAG系统具备实时更新的能力,可以从外部数据源获取最新信息,并及时反映在生成的文本中。这对于需要及时更新的任务非常重要。

增强技术的选择和应用取决于特定任务和应用场景的要求。通过合理利用增强技术,RAG系统可以提供更具洞察力和相关性的生成文本,从而提高用户满意度和系统的实用性。

5.3 RAG中的生成(Generation)

生成是检索增强生成(RAG)框架的另一个核心组件,它负责根据检索到的信息和用户查询生成最终的文本或回答。生成的质量和效果直接影响着RAG系统的性能和可用性。
 

以下是与生成相关的一些关键概念和技术:

  • 生成模型:RAG系统通常使用生成模型来生成文本或回答。这些模型可以是预训练的语言模型(如GPT系列),也可以是其他生成模型。生成模型的选择取决于任务的要求和性能需求。
  • 文本生成:生成模型将检索到的信息和用户查询转化为自然语言文本。生成文本的质量取决于模型的能力以及输入信息的准确性和相关性。
  • 控制生成:一些RAG系统具备生成文本的控制能力,允许用户指定特定的风格、语气或其他要求。这提供了更高度定制化的生成能力。
  • 多模态生成:一些高级RAG系统具备生成多模态内容的能力,包括图像、音频和视频。这拓展了RAG的应用领域。
  • 对话生成:一些RAG系统用于对话生成,能够实现复杂的对话和多轮问答。这在聊天机器人和虚拟助手等应用中特别有用。
  • 评估生成:生成的质量通常需要经过评估来衡量,以确保生成的文本准确、相关且合乎要求。评估方法和指标对于RAG系统的性能评估至关重要。

在RAG框架中,生成与检索和增强技术协同工作,以生成最终的输出。生成的能力和质量对于RAG系统的整体性能和用户体验至关重要。

6、RAG vs. Fine-Tuning

RAG(检索增强生成)与微调(Fine-Tuning)是两种不同的大型语言模(LLM)优化方法,它们在应用和效果上有所不同:


RAG与其他模型优化方法的比较:


 

RAG的优势:

  • 更灵活的知识获取:RAG允许从外部数据源实时检索信息,因此可以获取最新的、领域特定的知识,而微调通常依赖于静态的预训练数据。
  • 避免“幻觉”问题:RAG通过检索外部信息来验证生成的文本,可以减少生成不准确信息的问题,这在微调中可能更容易出现。
  • 多模态支持:RAG可以轻松支持多模态内容的生成,包括文本、图像、音频等,而微调通常专注于文本生成。

微调的优势:

  • 更高的一致性:微调通常可以生成更一致的文本,因为它基于预训练模型,而RAG的一致性取决于检索的准确性。
  • 更广泛的应用:微调适用于各种自然语言处理任务,包括文本分类、命名实体识别、情感分析等,而RAG更侧重于生成任务。
  • 训练效率:微调可以比RAG更高效,因为不需要在每个查询上进行检索操作。

总的来说,RAG和微调各有其优势和适用场景,RAG 的优势在于通用性、知识引用、即时性和可解释性,而微调在特定任务上可能更适用,但同时需要更多的任务特定数据和训练选择使用哪种方法,应根据具体的应用需求和任务来决定。未来的发展可能会探索两种方法的结合,以充分利用它们的优势,并改进大型语言模型的性能。

7、RAG系统的评估

RAG(检索增强生成)系统的评估是确保其性能和效果的关键步骤。这里将介绍RAG系统的评估方法和指标,以帮助衡量其生成文本或回答的质量和相关性。

以下是与RAG评估相关的一些关键概念和方法:

  • 生成质量评估:评估RAG生成的文本的质量是重要任务之一。常用的评估方法包括自动评估指标(如BLEU、ROUGE等)、人工评估和事实验证。这些方法可以帮助衡量生成文本的流畅性、准确性和相关性。
  • 检索效果评估:评估RAG检索的效果是另一个关键方面。这包括检索的准确性、召回率和效率。检索效果的好坏直接影响生成文本的质量。
  • 用户满意度评估:了解用户对RAG系统的满意度和体验也是重要的评估维度。这可以通过用户调查、用户反馈和用户交互数据来实现。
  • 多模态评估:对于生成多模态内容的RAG系统,评估方法需要考虑不同模态之间的一致性和相关性。这可以通过多模态评估指标来实现。
  • 实时性评估:对于需要实时更新的RAG任务,评估方法需要考虑信息更新的及时性和效率。
  • 基准测试集:为了进行客观的评估,通常会使用基准测试集来进行实验和比较不同的RAG系统。这些基准测试集包含了多样化的任务和查询,以涵盖不同的应用场景。

评估方法和指标的选择取决于具体的任务和应用场景。综合使用多种评估方法可以更全面地了解RAG系统的性能和效果。评估结果可以指导系统的改进和优化,以满足用户的需求。

8、未来展望

RAG(检索增强生成)技术在不断发展和演进,未来有许多潜在的发展方向和前景。

  • 挑战识别和解决:未来的研究可以致力于识别和解决RAG技术面临的挑战,特别是在知识检索、生成文本质量和多模态支持方面的挑战。这包括改进检索准确性、提高生成文本的一致性和深化多模态整合。
  • 多模态扩展:随着多模态内容的需求不断增长,未来的研究可以探索如何更好地支持多模态生成,包括文本、图像、音频等。这涉及到跨模态信息的有效整合和生成技术的改进。
  • 实时知识更新:对于需要及时更新的任务,未来的研究可以集中在如何实现实时知识检索和更新,以确保生成的文本始终保持最新和准确。
  • 增强RAG生态系统:RAG技术的发展可以促进建立更加完善的RAG生态系统,包括更多的开源工具、资源和应用场景。这将有助于更广泛地推广和应用RAG技术。
  • 融合知识图谱:未来的研究可以考虑如何更好地融合知识图谱等结构化知识源,以进一步提高RAG系统的性能和效果。

总的来说,RAG技术具有广阔的研究前景和应用前景。未来的研究将继续探索新的方法和技术,以不断改进和扩展RAG系统的功能和性能,从而更好地满足各种知识密集型任务和应用场景的需求。

参考论文:

  1. 《Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks》
  2. 《Retrieval-Augmented Generation for Large Language Models: A Survey》

相关文章:

大语言模型落地的关键技术:RAG

1、什么是RAG? RAG 是检索增强生成(Retrieval-Augmented Generation)的简称,是当前最火热的大语言模型应用落地的关键技术,主要用于提高语言模型的效果和准确性。它结合了两种主要的NLP方法:检索&#xff…...

ffmpeg Android 笔记

目录 没有示例项目 编译好的.a文件 ffmpegandroid 延时有220ms rk官方有例子 ffmpeg Android 笔记 没有示例项目 编译好的.a文件 FFmpeg-Android/ffmpeg-android-aarch64-34/lib at main yhbsh/FFmpeg-Android GitHub ffmpegandroid 看到了音频解码器 FFmpegAndroid/a…...

本地创建新分支并提交gitee

初始化本地仓库 git init链接远程仓库 git remote add origin https://gitee.com/xxxxxxxxxxx提交本地代码(进行commit提交) git add . git commit -m "分支名"创建分支 git branch 分支名选择刚刚创建的分支 git checkout 分支名查看所选中的分支 git branch …...

[蓝桥杯 2019 国 C] 数正方形

[蓝桥杯 2019 国 C] 数正方形 题目描述 在一个 N N N \times N NN 的点阵上,取其中 4 4 4 个点恰好组成一个正方形的 4 4 4 个顶点,一共有多少种不同的取法? 由于结果可能非常大,你只需要输出模 1 0 9 7 10^9 7 1097 的…...

Redis: 配置文件详解(Redis.conf)

文章目录 一、Units二、INCLUDES三、NETWORK四、GENERAL五、SECURITY六、LIMITS 一、Units 单位,配置大小单位,开头定义了一些基本的度量单位,只支持bytes,不支持bit,大小写不敏感 二、INCLUDES 包含,多…...

学习vue3第十四节 Teleport 内置组件介绍

<Teleport></Teleport> 作用目的&#xff1a; 用于将指定的组件或者元素传送到指定的位置&#xff1b; 通常是自定义的全局通用弹窗&#xff0c;绑定到 body 上&#xff0c;而不是在当前元素上面&#xff1b; 使用方法&#xff1a; 接收两个参数 to: 要将目标传…...

mybatis模糊查询查不到数据

排除SQL语句本身存在错误,字段名称不匹配,编码格式问题后,若使用%方式查询,一开始使用单引号查询不到数据&#xff0c;把改成"&#xff0c;可以查询到数据 疑问&#xff1a;看别人的代码&#xff0c;使用单引号也可以查询到数据&#xff0c;原因未知...

Python语法总结:not(常出现错误)

0、not是什么 在python中not是逻辑判断词&#xff0c;用于布尔型True和False之前 a not Ture # a False b not False # b True1、not的用法 &#xff08;1&#xff09;判断语句 if not a:# 如果a是False&#xff0c;执行的语句&#xff08;2&#xff09;判断元素是否在…...

深入理解WebSocket:实时双向通信的利器

一、介绍 1.1 基础概念介绍 单工通信&#xff1a;数据传输只允许在一个方向上传输&#xff0c;只能一方发送数据&#xff0c;另一方接收数据并发送。半双工&#xff1a;数据传输允许两个方向上的传输&#xff0c;但在同一时间内&#xff0c;只可以有一方发送或接收数据。全双…...

Gateway是什么?(SpringCloudAlibaba组件)

1、网关介绍 **网关(Gateway)又称网间连接器、协议转换器。网关在传输层上以实现网络互连&#xff0c;是最复杂的网络互连设备&#xff0c;仅用于两个高层协议不同的网络互连。**网关的结构也和路由器类似&#xff0c;不同的是互连层。网关既可以用于广域网互连&#xff0c;也可…...

阿里巴巴拍立淘API新功能揭秘:图片秒搜商品,实现智能化个性化购物新体验

在数字化快速发展的今天&#xff0c;智能化和个性化已经成为购物体验中不可或缺的元素。为了满足消费者日益增长的购物需求&#xff0c;阿里巴巴中国站不断推陈出新&#xff0c;其中拍立淘API的新功能——图片秒搜商品&#xff0c;无疑为智能化个性化购物体验开创了新的篇章。 …...

蚓链为移动实体经济加油!

在当今数字化时代&#xff0c;数据已成为企业宝贵的资产之一。如何利用数据资产为可移动实体经济创造更多的增值机会呢&#xff1f;蚓链将为你揭示 11种行之有效的方法&#xff01; 1. 个性化服务&#xff1a;根据客户数据&#xff0c;提供量身定制的产品和服务&#xff0c;满…...

MySQL 核心模块揭秘 | 12 期 | 创建 savepoint

回滚操作&#xff0c;除了回滚整个事务&#xff0c;还可以部分回滚。部分回滚&#xff0c;需要保存点&#xff08;savepoint&#xff09;的协助。本文我们先看看保存点里面都有什么。 作者&#xff1a;操盛春&#xff0c;爱可生技术专家&#xff0c;公众号『一树一溪』作者&…...

SpringMVC --- 老杜

1、什么是SpringMVC&#xff1f; SpringMVC是一个基于Java实现了MVC设计模式的请求驱动类型的轻量级Web框架&#xff0c;通过把Model&#xff0c;View&#xff0c;Controller分离&#xff0c;将web层进行职责解耦&#xff0c;把复杂的web应用分成逻辑清晰的及部分&#xff0c;…...

详细介绍如何利用 A star(A*)算法解决8数码问题

文章目录 1. A star(A*)算法简介2. 利用A*解决8数码问题(含Python代码)2.1 什么是8数码问题2.2 A*算法中的开放列表和关闭列表2.3 A*算法解决8数码问题过程2.3.1 计算节点(棋盘顺序)间距离2.3.2 交换数字生成新的节点2.3.3 A*主求解程序1. A star(A*)算法简介 A ∗ A^*…...

如何锁定鼠标光标在水平、垂直或45度对角线模式下移动 - 鼠标水平垂直移动锁定器简易教程

在我们进行精细工作例如如创建图标和图形设计时&#xff0c;通常需要我们对鼠标移动进行精确控制。一旦向左或向右轻微移动&#xff0c;都可能导致设计出错。若出现不必要的错误&#xff0c;我们极有可能不得不重新开始&#xff0c;这会令人感到非常沮丧。这种情况下&#xff0…...

在 Docker 部署的 MySQL 容器内安装和使用 vim

在 Docker 部署的 MySQL 容器内安装和使用 vim 文章目录 在 Docker 部署的 MySQL 容器内安装和使用 vim步骤一&#xff1a;进入 MySQL 容器步骤二&#xff1a;更新软件源和安装 vim步骤三&#xff1a;验证 vim 安装步骤四&#xff1a;使用 vim 进行文件编辑步骤五&#xff1a;保…...

人工智能|深度学习——基于Xception实现戴口罩人脸表情识别

一、项目背景 近年来&#xff0c;随着人工智能技术的不断发展&#xff0c;人脸表情识别已经成为了计算机视觉领域中的重要研究方向之一。然而&#xff0c;在当前的疫情形势下&#xff0c;佩戴口罩已经成为了一项必要的防疫措施&#xff0c;但是佩戴口罩会遮挡住人脸的部分区域&…...

【HTML】简单制作一个动态3D正方体

目录 前言 开始 HTML部分 JS部分 CSS部分 效果图 总结 前言 无需多言&#xff0c;本文将详细介绍一段代码&#xff0c;具体内容如下&#xff1a; 开始 首先新建文件夹&#xff0c;创建两个文本文档&#xff0c;其中HTML的文件名改为[index.html]&#xff0c;JS的文件名改…...

Linux 常用指令及其理论知识

个人主页&#xff1a;仍有未知等待探索-CSDN博客 专题分栏&#xff1a;http://t.csdnimg.cn/Tvyou 欢迎各位指教&#xff01;&#xff01;&#xff01; 目录 一、理论知识 二、基础指令 1、ls指令&#xff08;列出该目录下的所有子目录和文件&#xff09; 语法&#xff1a; …...

遍历 Map 类型集合的方法汇总

1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...

AtCoder 第409​场初级竞赛 A~E题解

A Conflict 【题目链接】 原题链接&#xff1a;A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串&#xff0c;只有在同时为 o 时输出 Yes 并结束程序&#xff0c;否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...

为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?

在建筑行业&#xff0c;项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升&#xff0c;传统的管理模式已经难以满足现代工程的需求。过去&#xff0c;许多企业依赖手工记录、口头沟通和分散的信息管理&#xff0c;导致效率低下、成本失控、风险频发。例如&#…...

高频面试之3Zookeeper

高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个&#xff1f;3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制&#xff08;过半机制&#xff0…...

2.Vue编写一个app

1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...

Python实现prophet 理论及参数优化

文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候&#xff0c;写过一篇简单实现&#xff0c;后期随着对该模型的深入研究&#xff0c;本次记录涉及到prophet 的公式以及参数调优&#xff0c;从公式可以更直观…...

C# SqlSugar:依赖注入与仓储模式实践

C# SqlSugar&#xff1a;依赖注入与仓储模式实践 在 C# 的应用开发中&#xff0c;数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护&#xff0c;许多开发者会选择成熟的 ORM&#xff08;对象关系映射&#xff09;框架&#xff0c;SqlSugar 就是其中备受…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

力扣-35.搜索插入位置

题目描述 给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...

《C++ 模板》

目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板&#xff0c;就像一个模具&#xff0c;里面可以将不同类型的材料做成一个形状&#xff0c;其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式&#xff1a;templa…...