大模型学习笔记 - LLM 之RAG

news2024/9/25 21:10:17

RAG

  • RAG
    • RAG Suvery
    • RAG 简介
    • RAG 范式的演变
      • 1. 初级 RAG
      • 2. 高级 RAG
      • 3. 模块化的 RAG 介绍
    • RAG框架简述
      • 检索技术
      • 文本生成
      • 增强技术简介
    • RAG 与 微调的区别
    • RAG 模型评估解析
    • RAG 研究的挑战与前景
    • 构建 RAG 系统的工具

在学习RAG中, 发现这个网站的内容特别好,也比较全面,https://www.promptingguide.ai/zh/research/rag ,以下内容主要参考这个链接。

RAG Suvery

论文Retrieval-Augmented Generation for Large Language Models: A Survey 系统回顾和分析了RAG目前的研究途径和未来发展路径,将其归纳为朴素型RAG、高级型RAG和模块化型RAG三大范式。并对RAG的检索、增强和生成三个核心组件进行了综合总结,重点介绍了RAG的改进方向和当前技术特点。在关于增强方法的部分中,目前的工作分为三个方面:RAG的增强阶段、增强数据源和增强过程。此外,本文还总结了与RAG相关的评价体系、适用场景等相关内容。

RAG 简介

纯参数化语言模型 (LLM) 将其从大量语料库中获得的世界知识存储在模型的参数中。然而,这种模型有其局限性。

  • 首先,很难从训练语料库中保留所有知识,尤其是对于不太常见和更具体的知识。(幻觉,答案缺乏透明度)。
  • 其次,由于模型参数不能动态更新,参数化知识容易随着时间的推移而过时。(知识更新缓慢)
  • 最后,参数的扩展会导致训练和推理的计算费用增加

RAG是一个将输入与一组相关的支持文档结合起来的技术,这些文档通常来自于像维基百科这样的来源。这些文档被添加到输入提示中,一起送入文本生成器,从而产生最终的输出。RAG的这一机制特别适用于需要应对信息不断更新的场景,因为大语言模型(LLM)所依赖的参数知识本质上是静态的。通过RAG,语言模型可以不经过重新训练而直接访问最新信息,以便生成可靠的、基于检索的输出。

RAG 的典型工作流程
在这里插入图片描述

具体步骤如下:

  • 输入: 是指LLM系统需要回答的问题。如果不使用RAG,问题直接由LLM回答。
  • 索引: 使用RAG时,会先将相关文档分块,为这些块生成嵌入向量,并将它们索引到向量库中。在进行查询时,查询内容也会以相似的方式进行嵌入。
  • 检索: 通过比较查询内容与索引向量,找到相关的文档。
  • 生成: 将找到的相关文档与原始提示结合作为额外上下文,然后传递给模型进行回应生成,最终形成系统对用户的回答。

例如,直接使用模型可能因为不了解最新事件而无法回答问题。但是,通过使用RAG,系统能够提取模型回答问题所需的相关信息。

  **RAG的来源**
  检索增强生成 (RAG) 一词最早由 [Lewis et al., 2020] 引入。它将预训练的检索器与预训练的 seq2seq 模型(生成器)相结合,并进行端到端微调,以更可解释和模块化的方式捕获知识。在大型模型出现之前,RAG 主要专注于端到端模型的直接优化。检索端的密集检索,例如使用基于矢量的密集通道检索 (Dense Passage Retrieval, DPR)[Karpukhin et al., 2020],以及在生成端训练较小的模型是常见的做法。由于整体参数大小较小,检索器和生成器通常都进行同步的端到端训练或微调 [Izacard et al., 2022]。

  随后的研究发现,将RAG引入大型模型的上下文学习(ICL)可以缓解LLM的上述问题,并具有显着且易于实施的效果。在推理过程中,RAG 会从外部知识源动态检索信息,使用检索到的数据作为参考来组织答案。这大大提高了响应的准确性和相关性,有效地解决了 LLM 中存在的幻觉问题。这种技术在 LLM 出现后迅速获得关注,并已成为改进聊天机器人和使 LLM 更实用的最热门技术之一。通过将事实知识与LLM的训练参数分离,RAG巧妙地将生成模型的强大能力与检索模块的灵活性相结合,为纯参数化模型固有的不完整和不足的知识问题提供了有效的解决方案。

RAG 范式的演变

近几年来,RAG(检索增强生成)系统经历了从初级阶段到高级阶段,再到模块化阶段的演变。这一进化过程旨在克服性能、成本和效率方面的挑战。
在这里插入图片描述

1. 初级 RAG

初级 RAG 采用了一个传统过程,包括索引建立、文档检索和内容生成。简单来说,系统根据用户的输入查询相关文档,然后将这些文档和一个提示语结合起来,交给模型生成最终的回答。如果涉及到多轮对话,还可以将对话历史整合到提示语中。

初级 RAG 的局限性包括低精确度(检索到的信息不够准确)和低召回率(有时候无法检索到所有相关的信息)。此外,有时候模型可能会接收到过时的信息,这正是 RAG 系统希望首先解决的问题之一。这可能会导致模型产生不基于事实的幻想性回答,从而影响回答的准确性和可靠性。

当引入额外信息以增强回答时,还可能出现信息重复或冗余的问题。处理多个检索到的文档时,如何排列它们的优先级以及如何使生成的内容风格和语调一致也是需要考虑的挑战。我们还需要确保生成的任务不会过分依赖于这些额外信息,避免模型仅仅重复这些信息而缺乏创新

2. 高级 RAG

高级 RAG 解决了初级 RAG 面临的问题,尤其是在提高检索质量方面,包括优化检索前、检索时和检索后的各个过程。

在检索前的准备阶段,我们通过优化数据的索引建立来提高数据质量,包括改善数据的细节度、优化索引结构、添加元数据、改进对齐方式以及混合检索方法

在检索阶段,我们可以通过改进嵌入模型来提高上下文片段的质量。例如,通过对嵌入模型进行微调,以提高检索的相关性,或者使用能够更好理解上下文的动态嵌入模型(如 OpenAI 的 embeddings-ada-02 模型)。

在检索后的优化过程中,我们专注于解决上下文窗口限制和减少噪音或分散注意力的信息。常用的方法包括重新排列文档,以将更相关的内容放在提示的前后,或者重新计算查询与文档片段之间的语义相似度。此外,通过压缩提示信息也有助于解决这些问题

3. 模块化的 RAG 介绍

模块化 RAG,顾名思义,通过增强其功能模块来提升性能,例如加入相似性检索的搜索模块,以及在检索工具上进行精细调整。模块化 RAG 能够根据具体的任务需求,添加、替换或调整模块之间的工作流程,从而实现更高的多样性和灵活性。这种设计让模块化 RAG 不仅包括了朴素 RAG 和高级 RAG 这两种固定模式,还扩展了包括搜索、记忆、融合、路由、预测和任务适配等多种模块,以解决各种问题。

随着 RAG 系统构建变得更加灵活,一系列优化技术相继被提出,用于进一步优化 RAG 流程,包括:

  • 混合式搜索探索: 结合了关键词搜索与语义搜索等多种搜索技术,以便检索到既相关又富含上下文的信息,特别适用于处理多样化的查询类型和信息需求。
  • 递归式检索与查询引擎: 通过从小的语义片段开始逐步检索更大的内容块以丰富上下文的递归过程,有效平衡了检索效率与信息的丰富度。
  • StepBack-prompt 提示技术: 一种特殊的提示方法,能让大语言模型进行概念和原则的抽象化处理,从而引导更加深入的推理过程。当应用于 RAG 框架时,能够帮助模型超越具体事例,进行更广泛的推理。
  • 子查询策略: 采用树状查询或按序查询小块信息的不同策略,适用于多种场景。LlamaIndex 提供的子问题查询引擎允许将大的查询任务拆分成多个小问题,分别利用不同的数据源进行解答。
  • 假设性文档嵌入技术 (HyDE): 通过生成查询的假设性回答并嵌入,来检索与这个假设回答相似的文档,而不是直接使用查询本身,以此来优化检索效果。

RAG框架简述

在这一部分,我们将概述 RAG 系统的核心组成部分,包括检索、生成和增强三大环节的最新进展。这些组件共同构成了 RAG 的基础,使其能够有效处理各种信息检索和内容生成的任务,进而提升系统的整体性能和应用灵活性。

检索技术

在RAG系统中,检索是关键环节,负责从大数据中找出最有价值的信息。我们可以通过多种方法提升检索器的效能,包括:

提升语义理解

改善检索器背后的语义理解能力至关重要。这里有一些改进策略:

  • 数据分块策略: 确定合适的数据分块方式非常关键,这依赖于你的数据内容和应用需求。例如,针对单句效果更佳的句子转换器,与处理256或512个词元的文本时,使用文本嵌入-ada-002模型会更加出色。此外,还需考虑用户提问的长度、应用需求和词元数量上限。实际应用中,通过尝试不同的数据分块策略来发现最优的检索效率是常见做法。
  • 专业领域的嵌入模型微调: 确定了有效的数据分块策略后,如果你的工作聚焦于特定领域,可能还需要对嵌入模型进行微调。否则,可能会导致系统无法正确理解用户查询。可针对广泛的领域知识或特定的下游任务进行微调。例如,BGE-large-EN 开发的 BAAI 模型,就能通过微调来提高检索的相关性。

查询与文档的精准匹配

确保用户查询与数据库中文档的匹配度,特别是在查询可能缺少具体语义信息或措辞不够精确的情况下,显得尤为重要。实现这一目标的方法包括:

  • 查询重写: 通过多种技术改写查询,以提高匹配的准确性,例如利用Query2Doc、ITER-RETGEN和HyDE等工具。
  • 查询嵌入的优化: 通过调整查询的嵌入表示,使其更好地与任务相关的潜在空间对齐,从而提升查询效果。

检索器与大语言模型的协同优化

此外,还需要确保检索器产出的结果与大语言模型(LLM)的预期一致,以实现最佳的协同工作效果。

  • 优化检索技术: 通过分析大语言模型(LLM)提供的反馈,进一步完善检索系统。例如,通过适应性增强检索技术(AAR),REPLUG,和UPRISE等方式来实现。
  • 引入辅助工具: 通过加入外部工具,如PRCA,RECOMP,和PKG,辅助优化信息对齐过程。

文本生成

在RAG系统中,负责将检索到的信息转化为流畅文本的生成器扮演着关键角色,该文本将成为模型输出的最终成果。这个转换过程涉及到复杂多变的输入信息,有时候需要特别努力来调整语言模型以更好地适应从查询和文档中得到的输入数据。这一挑战可以通过后期检索处理和模型微调来克服:

  • 检索后处理与模型固定: 在保持大语言模型(LLM)不变的情况下,通过后处理技术改善检索结果的质量,如通过信息简化和结果优先排序等手段。信息简化有助于减少冗余信息,解决模型处理长文本的限制,并提升最终文本的生成质量。优先排序则是将最相关的信息排在前面,以提高检索的准确性
  • 针对RAG系统的LLM微调: 为了提高RAG系统的效率,可以对生成文本的过程进行细致调整或微调,确保生成的文本既自然流畅又能有效地结合检索到的文档信息。

增强技术简介

增强技术指的是将检索到的信息内容有效融入当前任务生成过程的方法。在深入探讨增强技术的过程、阶段及数据之前,先来看一下 RAG(检索增强生成模型)的核心组成部分分类:
在这里插入图片描述

在预训练、微调和推理等多个阶段,都可以应用检索增强技术。

  • 增强阶段: RETRO 示例展示了如何从零开始利用检索增强进行大规模预训练;它额外引入了一个基于外部知识构建的编码器。此外,通过结合 RAG 进行微调,可以进一步提升系统的性能。在推理阶段,根据具体任务需求采取多种技术将检索内容有效融入,以优化 RAG 的应用效果。

  • 增强数据源: 选择何种增强数据对 RAG 模型的效果影响极大。数据源主要分为三类:非结构化数据、结构化数据以及由大语言模型生成的数据。

  • 增强过程: 对于一些需要多步骤推理的问题,单次检索可能不足以解决,因此提出了以下几种方法:

    • 迭代检索:模型通过多轮检索,不断深化和丰富信息内容。例如,RETRO 和 GAR-meets-RAG 就是采用这种方法。
    • 递归检索:在这种方法中,一次检索的输出成为另一次检索的输入,逐步深入挖掘复杂查询的相关信息,适用于学术研究和法律案例分析等场景。著名实践包括 IRCoT 和 Tree of Clarifications。
    • 自适应检索:根据特定需求调整检索过程,选择最合适的时机和内容进行检索,以达到最佳效果。这种方法的代表性研究包括 FLARE 和 (Self-RAG)[https://arxiv.org/abs/2310.11511]。

下图详细描绘了 RAG 研究的不同增强方面,涵盖了增强的阶段、数据源和具体过程。
在这里插入图片描述

RAG 与 微调的区别

RAG 特别适合于融合新知识,而微调则能够通过优化模型内部知识、输出格式以及提升复杂指令的执行能力,来增强模型的性能和效率
在这里插入图片描述

在LLM的优化中,除了RAG之外,另外一个重要的优化技术就是微调。
RAG类似于为模型提供教科书,允许它根据特定查询检索信息。此方法适用于模型需要回答或者解决特定信息检索任务的场景。但是RAG不社会教授模型理解广泛领域或者学习新的语料或样式。

微调(Fine-tuning) 类似于使学生能够通过广泛的学习来内化知识。当模型需要复制特定结构、样式或格式时,此方法非常有用。微调可以提高未微调模型的性能,并使交互更加高效。它特别适用于强调基础模型中的现有知识、修改或自定义模型的输出,以及为模型提供复杂的指令。但是,微调不适合将新知识合并到模型中,也不适合需要对新用例进行快速迭代的情况。

微调类似于让学生通过长时间的学习来内化知识。当模型需要复制特定结构、样式或格式时,此方法适用。微调可以实现优于非微调模型的性能,并且交互效率更高。微调特别适用于强调基础模型中的现有知识、修改或自定义模型的输出,以及使用复杂的指令指示模型。但是,微调不适合向模型添加新知识,也不适合需要针对新用例进行快速迭代的方案。RAG和微调(Fine-tuning,FT)之间的具体比较可以在表1中阐明。

RAG 和微调不是相互排斥的,而是可以相辅相成的,从而在不同层面上增强模型的功能。在某些情况下,将这两种技术结合起来可以实现最佳模型性能。使用 RAG 进行优化和微调的整个过程可能需要多次迭代才能获得满意的结果。

现有研究表明,与其他优化大型语言模型的方法相比,检索增强生成 (Retrieval-Augmented Generation, RAG) 在优化大语言模型 (Large Language Model) 方面,相较于其他方法具有显著的优势【Shuster et al., 2021; Yasunaga et al., 2022; Wang et al., 2023c; Borgeaud et al., 2022】:

  • RAG 通过将答案与外部知识相关联,减少语言模型中的幻觉问题,并使生成的响应更加准确和可靠,从而提高了准确性。
  • 使用检索技术可以识别最新信息。这使得 RAG 在保持回答的及时性和准确性方面,相较于只依赖训练数据的传统语言模型有明显优势。
  • 透明度是RAG的一大优势。通过引用来源,用户可以验证答案的准确性,从而增加对模型输出的信任。
  • RAG 具有定制功能。通过索引相关文本语料库,可以针对不同领域定制模型,为特定领域提供知识支持。
  • 在安全和隐私管理方面,RAG凭借其在数据库中的内置角色和安全控制,可以更好地控制数据使用。相比之下,微调模型可能缺乏对谁可以访问哪些数据的明确管理。
  • RAG 更具可扩展性。它可以处理大规模数据集,而无需更新所有参数和创建训练集,使其更具经济效率。
  • 最后,RAG 产生的结果更值得信赖。RAG从最新数据中选择确定性结果,而微调模型在处理动态数据时可能会表现出幻觉和不准确,缺乏透明度和可信度。
特征比较RAG微调
知识更新直接更新检索知识库,确保信息保持最新状态,无需频繁重新训练,适用于动态数据环境。存储静态数据,需要重新训练知识和数据更新。
外部知识熟练利用外部资源,特别适用于文档或其他结构化/非结构化数据库。可用于将预训练中从外部学习的知识与大型语言模型保持一致,但对于频繁更改的数据源可能不太实用。
数据处理需要最少的数据处理依赖于构建高质量的数据集,有限的数据集可能无法产生显著的性能提升。
模型定制专注于信息检索和整合外部知识,但可能无法完全自定义模型行为或写作风格运行根据特定的语气或术语调整LLM行为、写作风格或特定领域知识
可解释性答案可以追溯到特定的数据源,提供更高大的可解释性和可追溯性像黑匣子,可解释性比较低
计算资源需要计算资源来支持与数据库相关的检索策略和技术,需要维护外部数据源集成和更新准备和管理高质量的训练数据集,定义微调目标以及提供相应的计算资源是必要的
延迟要求涉及数据检索,可能导致更高的延迟微调后的LLM可以在没有检索的情况下进行响应,从而降低延迟
减少幻觉本质上不太容易产生幻觉,因为每个答案都基于检索得到证据可以通过基于特定领域数据训练模型来帮助减少幻觉,但面对不熟悉的输入时仍可能表现出幻觉
道德和隐私问题从外部数据库中存储和检索文本会产生道德和隐私问题由于训练数据的敏感内容,可能会产生道德和隐私问题

RAG 模型评估解析

就像衡量大语言模型(LLM)在不同维度的表现一样,评估对于深入理解和提升 RAG(检索增强生成)模型在各种应用场景下的性能至关重要。传统上,人们通过特定任务的指标,如 F1 分数和准确率(EM),来评价 RAG 系统在下游任务上的表现。例如,RaLLe 就是一个评估知识密集型任务中检索增强型大语言模型性能的著名框架。

在 RAG 模型的评估中,我们既关注检索的内容质量,也关注生成的文本质量。为了评估检索的效果,我们采用了推荐系统和信息检索等知识密集领域的评估指标,比如归一化折扣累计增益(NDCG)和命中率。而在生成质量的评估上,可以从相关性、有害内容的筛选(对未标记内容)或准确性(对已标记内容)等不同维度进行考量。整体上,RAG 模型的评估可以采用手动或自动的方法进行。

具体来说,RAG 框架的评估着眼于三个主要质量指标和四大能力。这三个质量指标包括:上下文相关性(即检索到的信息的精确度和相关度)、答案忠实度(即答案对于检索到的上下文的忠实反映)、以及答案相关性(即答案与提出的问题的契合度)。此外,还有四项能力评估 RAG 系统的适应性和效率,包括:对噪声的鲁棒性、负面信息的排除、信息整合能力和面对假设情况的鲁棒性。下面是一个评估 RAG 系统不同方面所用指标的概览:

在这里插入图片描述

RAG 研究的挑战与前景

  • 上下文长度问题:随着LLM不断扩大上下文范围,调整RAG 以确保它能够捕捉最相关和关键的上下文信息。
  • 系统的鲁棒性:如何处理与现实相反的信息和对抗性信息,对于提高RAG的性能至关重要
  • 混合方法的探索:如何将RAG于专门调整过的模型结合使用,以实现最佳效果
  • 扩大语言模型的作用:如何进一步提升大语言模型在RAG系统中的作用和能力,是一个高度关注的领域
  • 规模化法则的探究:大语言模型的规模化法则及其在RAG系统重的应用仍然是一个未解问题
  • 生产级RAG的挑战:要实现可投入生产使用的RAG系统,需要在性能、效率、数据安全性、隐私保护等方面达到工程上的卓越。
  • 多模态RAG的发展:如何将RAG应用到更多领域,比如图像、音频、视频和编码
  • 评价机制的完善: 随着 RAG 被用于构建更为复杂的应用,开发能够细致评估上下文相关性、创新性、内容多样性、准确性等方面的评价工具变得尤为重要。此外,提高对 RAG 的解释性研究和工具开发也是必要的。

构建 RAG 系统的工具

构建 RAG 系统时,可以选择多种综合工具,如 LangChain、LlamaIndex 和 DSPy,这些工具提供了强大的功能来支持不同的需求。此外,还有一些专门的工具,比如 Flowise AI,它提供了一个低代码平台,使得构建 RAG 应用变得更加简单。其他值得关注的技术还包括 HayStack、Meltano 和 Cohere Coral 等,这些技术为特定的需求提供了解决方案。同时,一些软件和云服务提供商也开始提供以 RAG 为中心的服务,例如 Weaviate 的 Verba 适合构建个人助理应用,而亚马逊的 Kendra 则提供智能企业搜索服务。

这些工具和服务的开发,不仅推动了 RAG 技术的应用范围扩展,也为研究人员和开发者提供了更多的可能性,使他们能够更容易地探索和实现复杂的 RAG 应用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2073567.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

决策树算法:ID3与C4.5的对比分析

决策树是一种非常直观且易于理解的机器学习方法,被广泛应用于分类和回归任务中。在这篇文章中,我们将探讨两种经典的决策树算法:ID3与C4.5,并分析它们之间的区别。 一 算法概述 我们每天都做着各种形形色色的决策——周末怎么嗨…

普元EOS-微前端的base基座介绍

1 前言 微前端开发的时候要使用base基座。 这个base基座到底是什么&#xff1f; base基座能提供哪些功能&#xff1f; 本文将进行简单的介绍。 2 高开前端引用base基座 在高开页面引入base基座的语法如下&#xff1a; <script>import { BaseVue, AjaxUtil } from …

五、Centos7-安装Jenkins

目录 一、基础环境准备 1.安装JDK 2.安装Tomcat 二、安装Jenkins 1.配置Jenkins插件镜像源 2.问题&#xff1a;进入manager jenkins页面报错 3.配置Git 4.配置jdk 三、重新安装Jenkins 四、另一种Centos安装jenkins的方式--最终可用版 克隆了一个base的虚拟机&#x…

深度学习入门:循环神经网络------RNN概述,词嵌入层,循环网络层及案例实践!(万字详解!)

目录 &#x1f354; RNN 概述 1.1 循环神经网络 1.2 自然语言处理 &#x1f354; 词嵌入层 2.1 词嵌入层的使用 2.2 关于词嵌入层的思考 2.3 小节 &#x1f354; 循环网络层 3.1 RNN 网络原理 3.1.1 RNN计算过程 3.1.2 如何计算神经元内部 3.2 PyTorch RNN 层的使用…

机器学习(前六关大总结)生动讲解+代码实例

老粉都知道&#xff08;还不点关注&#xff09;我这机器学习已经有几天没更了&#xff0c;主要是最近忙碌比赛&#xff0c;所以时间紧张 那么我为大家总结一下&#xff0c;之前的机器学习知识点&#xff0c;让大家更好了解机器学习领域。 在此阅读前&#xff0c;感谢大家的关…

HTMl标签;知识回忆;笔记分享;

HTML标签是用于定义和组织网页内容的基础构建块。每个标签都有特定的作用。 一&#xff0c;标准结构标签&#xff1a; HTML文档标准结构&#xff1a; <html><head></head><body>this is my second html... </body> </html> 【1】htm…

代码随想录 | day 15 | 二叉树part03

完全二叉树的节点个数 方法一&#xff1a;可以用递归法遍历一遍左子树和右子树的个数之和再加1等于全部节点个数 class Solution { public:int getcount(TreeNode* cur){if(curNULL) return 0;int leftcount getcount(cur->left);int rightcount getcount(cur->right…

Python3.11二进制AI项目程序打包为苹果Mac App(DMG)-应用程序pyinstaller制作流程(AppleSilicon)

众所周知&#xff0c;苹果MacOs系统虽然贵为Unix内核系统&#xff0c;但由于系统不支持N卡&#xff0c;所以如果想在本地跑AI项目&#xff0c;还需要对相关的AI模块进行定制化操作&#xff0c;本次我们演示一下如何将基于Python3.11的AI项目程序打包为MacOS可以直接运行的DMG安…

90. UE5 RPG 实现技能的装配

在上一篇里&#xff0c;我们实现了在技能面板&#xff0c;点击技能能够显示出技能的相关描述以及下一级的技能的对应描述。 在这一篇里&#xff0c;我们实现一下技能的装配。 在之前&#xff0c;我们实现了点击按钮时&#xff0c;在技能面板控制器里存储了当前选中的技能的相关…

企业高性能web服务器(nginx)

目录 Web服务器基础介绍 正常情况下的单次web服务器访问流程 Apache 经典的 Web服务端 Apache prefork 模型 Apache work模型 Apache event模型 服务端的I/O流程 服务器的I/O 磁盘I/O 网络I/O 网络I/O处理过程 I/O模型 I/O模型相关概念 同步/异步 阻塞/非阻塞 网…

Ant-Design-Vue快速入门+排坑全攻略:打造炫酷Vue应用的s实用指南!

Ant-Design-Vue 是一个基于 Vue.js 的高质量 UI 组件库&#xff0c;适用于企业级后台产品的快速开发。下面将提供一份快速上手指南&#xff0c;并分享一些常见的“坑”和解决方案。 一、Ant-Design-Vue 快速上手指南 1. 安装与引入 确保安装了 Node.js&#xff08;推荐使用最新…

数据结构基础详解(C语言): 栈与队列的详解附完整代码

数据结构 栈 栈的核心重点&#xff1a; 栈是只能从表尾插入和删除的数据结构。 栈的顺序存储结构由两部分组成&#xff0c;top指针和数组。 链栈其实本质就是单链表头插法 文章目录 数据结构 栈1.栈的基本概念1.1 栈的常用操作 2.栈的存储结构2.1 栈的顺序存储结构2.1.1 栈的定…

环境配置1-MobaXterm服务器中Anaconda、Pytorch的安装

①登录 Login as 输入密码时密码不显示&#xff0c;正常输入即可 ②进入指定的下载目录 出现类似界面后&#xff0c;键盘操作Ctrlc即可进行输入 cd / …….(要下载到的目录名称)/ Anaconda的安装 ①输入wget https://repo.anaconda.com/archive/Anaconda3-2022.10-Linux…

如何M3U8视频切片保存到本地,见过视频被别人拿走了吗?

一、数据来源分析 1.明确需求 网址:https://v.qq.com/x/cover/mzc002006n62s11/e0045s2g2eg.html 数据&#xff1a;视频 2.抓包分析 F12 刷新网站 搜索关键字找到对应的数据位置 M3U8 https://vd6.l.qq.com/proxyhttp 二、代码实现步骤 发送请求 …

Linux磁盘操作之df命令

Linux使用df命令&#xff0c;可以查看系统中每个文件系统的总容量、已使用空间、可用空间和使用率。这对于了解磁盘空间的使用情况以及判断是否需要清理或扩展磁盘空间非常有用。 参数说明 df是一个用于显示磁盘空间使用情况的命令&#xff0c;df是disk free的缩写&#xff0…

Kafka事件(消息、数据、日志)的存储

1、查看有关kafka日志配置文件的信息 2、查看kafka全部主题的日志文件 3、查看每个主题的日志文件 4、__consumer_offsets-xx文件夹的作用 package com.power;public class Test {public static void main(String[] args) {int partition Math.abs("myTopic".hashCo…

穿越时光的经典:从LeNet到ResNet,机器学习中的CNN架构进化史

在机器学习的浩瀚星空中&#xff0c;卷积神经网络&#xff08;Convolutional Neural Networks, CNNs&#xff09;无疑是最为耀眼的星辰之一&#xff0c;它们以其卓越的图像处理能力&#xff0c;在计算机视觉领域书写了无数辉煌篇章。从最初的简单架构到如今复杂而高效的模型&am…

嵌入式UI开发-lvgl+wsl2+vscode系列:9、控件(Widgets)(二)

一、前言 接下来我们总结第二部分的控件。 二、示例 1、image&#xff08;图像&#xff09; 1.1、示例1 #include "../../lv_examples.h" #if LV_USE_IMAGE && LV_BUILD_EXAMPLESvoid lv_example_image_1(void) {LV_IMAGE_DECLARE(img_cogwheel_argb);lv…

【算法进阶2-动态规划】最长公共子序列、欧几里得算法-分数、RSA算法-密码于加密

1 最长公共子序列 2 欧几里得算法 2.1 欧几里得算法-分数 3 RSA算法-密码于加密 1 最长公共子序列 -个序列的子序列是在该序列中删去若干元素后得 到的序列。 例:“ABCD”和“BDF”都是“ABCDEFG”的子序列最长公共子序列(LCS)问题:给定两个序列X和Y&#xff0c;求X和Y长度最大…

请你谈谈:async与await是如何控制异步操作的执行顺序

async/await 是 JavaScript 中用于处理异步操作的一种语法糖&#xff0c;它使得异步代码的编写、阅读和维护变得更加容易和直观。async 和 await 关键字是在 ES2017&#xff08;ES8&#xff09;中引入的&#xff0c;旨在简化基于 Promise 的异步操作。 1 async async 是一个函…