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

# RAG 框架 # 一文入门 全链路RAG系统构建与优化 —— 架构、策略与实践

本文全面阐述了RAG系统从数据收集、数据清洗(包括领域专有名词处理)、智能数据分块与QA对生成,到向量化、向量数据库选择与配置,再到检索方式及重排序,直至整合输出、监控反馈和安全保障的全流程。通过这一完整方案,旨在为构建高效、稳定且安全的检索增强生成系统提供切实可行的解决方案。
在这里插入图片描述

一 、整体链路

在这里插入图片描述

1. 细化数据清洗:(略)

  • 领域专有名词处理: 在数据清洗过程中,处理领域相关的专有名词(如同义词替换、实体识别)有助于提高向量匹配的效果。

2. 数据分块及QA对生成:

  • 智能分块策略: 将文本按语义边界、章节或段落进行分块,避免仅依据长度拆分,以保留上下文完整性。
  • 自动化QA对生成: 利用自动化工具生成QA对,丰富检索内容,辅助模型理解和回答用户查询。

3. 向量化:

  • 多模型融合: 结合通用模型和领域特定模型,提升向量表达能力。
  • 预处理优化: 采用向量标准化和降维等预处理方法,提高匹配效率。

4. 向量数据库选择与配置:

  • 综合考虑因素: 选择向量数据库时,考虑数据更新、扩展性和并发处理能力等因素,确保系统性能和稳定性。

5. 检索方式及重排序:

  • 混合检索策略: 结合传统的BM25和向量检索,提升检索效果。
  • 高级重排序模型: 引入Cross-Encoder或BERT-based reranker等复杂模型,对检索结果进行重排序,确保高相关性。

6. 整合输出:

  • 增强回答质量: 在输出阶段,结合逻辑推理、多轮问答上下文保持和答案可信度评估等机制,提升回答的准确性和用户满意度。
  • 多样化输出格式: 根据需求,提供JSON、Markdown或纯文本等多种输出格式,方便系统集成或直接展示给用户。

7. 补充其他模块:

  • 监控与日志记录: 在各环节建立监控和日志系统,便于后续调试和优化。
  • 反馈机制与持续优化: 设计用户反馈环节,根据实际效果不断调优检索策略、向量化模型和生成模型。
  • 安全与隐私: 在数据收集和处理过程中,注意数据安全和隐私保护,确保符合相关法规要求。

通过实施上述策略,可以有效提升RAG系统的性能和可靠性,确保其在实际应用中更好地满足用户需求。

二、数据分块及QA对生成

您提出了关于数据分块及问答对(QA)生成的深入思考,以下是对您想法的扩充和建议:

1. 选择合适的文本分块大小:

  • 长文本使用更大的分块: 在处理长文本时,采用更大的分块有助于保持上下文的完整性,确保模型能够捕捉到段落或章节级别的语义信息。然而,过大的分块可能导致模型输入超长,影响处理效率。

  • 短文本尽可能不分块: 对于短文本,避免分块可以保持其原始语义,防止因切分而丢失关键信息。

  • 分块大小与模型的关系: 不同的语言模型对输入长度有特定的优化范围。例如,某些模型在处理长度为256到512个标记(tokens)的文本时表现最佳。

  • 实践中的分块策略: 在实际应用中,常采用不同的分块大小(如128、256、512、1024等)进行实验,并评估其对模型性能的影响,以确定最适合的分块策略。

  • 分块策略的选择: 除了固定大小的分块方法,还可以考虑基于内容的可变大小分块策略。例如,利用句子结束标点符号、段落结构或自然语言处理技术,将文本切分为语义完整的块。这种方法可以提高模型对上下文的理解能力。

  • 分块间的重叠: 在分块时引入一定程度的重叠(如10-15%)有助于保留上下文信息,避免因切分导致的语义断裂。例如,对于长度为256个标记的分块,可以设置25个标记的重叠区域。

  • 动态调整分块策略: 根据不同类型的文本内容,灵活调整分块策略。例如,技术文档可能需要较大的分块以涵盖复杂的概念,而新闻文章可能适合较小的分块以捕捉具体的信息。

2. QA对的生成方式:

  • 人工整理: 人工创建QA对可以确保问题的质量和相关性,特别是在需要高精度的应用场景中。

    • 问题清晰度: 确保问题表述清晰明确,有助于模型更准确地理解和回答。

    • 完整描述问题的必要性: 在某些情况下,详细描述问题可以提供更多上下文,帮助模型生成更精确的答案。然而,过于冗长的问题可能增加理解难度,需要在清晰度和简洁性之间取得平衡。

  • 自动化生成: 利用大型语言模型(如GPT系列)自动生成QA对,可以大幅提升效率,特别是在大规模数据集构建中。

    • 方法示例: 一些研究提出了分层条件变分自动编码器(HCVAE)等模型,从非结构化文本中生成多样且一致的QA对。这种方法通过从上下文中抽取答案,然后生成相关问题,确保了QA对的多样性和质量。

    • 工具支持: 现有工具(如RAG-QA-Generator)可以自动读取文档数据,利用大型语言模型生成高质量的QA对,并将其插入数据库中,简化了知识库的构建和管理过程。

  • QA对的多样性: 在自动生成QA对时,确保问题和答案的多样性可以提高模型的泛化能力。一些研究提出了在生成过程中引入信息最大化正则化器,以增强生成QA对之间的一致性和多样性。

三、向量化

在这里插入图片描述

bge-large 模型为例:

3.1. 多模型融合:

要融合 bge-large 模型与领域特定模型,以提升向量表示的效果,您可以考虑以下方法:

3.1.1. 微调(Fine-tuning)领域特定模型:

  • 数据准备: 收集与您的领域相关的大量高质量文本数据,确保涵盖领域内的专业术语和表达方式。

  • 模型选择: 在领域特定数据上微调现有的 bge-large 模型,使其更好地适应特定领域的语言特征。

3.1.2. 模型融合策略:

  • 加权平均: 对同一输入,分别使用 bge-large 模型和领域特定模型生成向量表示,然后对这两个向量进行加权平均。权重可以根据模型在验证集上的表现进行调整,以平衡通用性和领域特定性。

  • 向量拼接:bge-large 模型和领域特定模型生成的向量表示直接拼接在一起,形成一个更长的向量。这样可以保留两种模型的特征,有助于提升下游任务的性能。

3.1.3. 多模态学习:

  • 设计联合模型: 构建一个能够同时处理来自 bge-large 和领域特定模型向量输入的联合模型,学习它们之间的关联,提高模型的理解能力。

3.1.4. 神经-符号融合:

  • 结合符号推理: 将神经网络的学习能力与符号推理相结合,利用领域特定的知识库或规则,增强模型的推理能力。

通过以上方法,您可以有效地融合 bge-large 模型与领域特定模型的优势,提升向量表示的效果,满足特定应用场景的需求。

3.2. 预处理优化:

  • 向量标准化: 对向量进行标准化处理,如将向量归一化为单位长度,以确保在计算相似度时,尺度一致,有助于提高匹配的准确性。

  • 降维处理: 高维向量可能导致计算复杂度增加,甚至引发“维度灾难”。采用降维技术,如主成分分析(PCA),可以在保留主要信息的同时,降低向量的维度,提高计算效率。

通过上述策略,您可以在保持 bge-large 模型优势的同时,进一步优化向量表示和匹配效率。
要优化向量的预处理,您可以采用以下两种方法:向量标准化降维处理。以下是具体的实施步骤:

3.2.1. 向量标准化:
在这里插入图片描述
在这里插入图片描述

向量标准化旨在将每个向量的长度调整为单位长度,以确保在计算相似度时,尺度一致,从而提高匹配的准确性。

步骤:

  1. 计算向量的范数(长度): 对于给定的向量 v = [ v 1 , v 2 , … , v n ] \mathbf{v} = [v_1, v_2, \ldots, v_n] v=[v1,v2,,vn],其范数(通常使用欧几里得范数)计算如下:

    ∥ v ∥ = v 1 2 + v 2 2 + ⋯ + v n 2 \|\mathbf{v}\| = \sqrt{v_1^2 + v_2^2 + \cdots + v_n^2} v=v12+v22++vn2

  2. 将向量归一化为单位长度: 将向量的每个分量除以该向量的范数,得到标准化后的向量 u \mathbf{u} u

    u = v ∥ v ∥ \mathbf{u} = \frac{\mathbf{v}}{\|\mathbf{v}\|} u=vv

示例:

假设有一个向量 v = [ 3 , 4 ] \mathbf{v} = [3, 4] v=[3,4]。其范数为:

∥ v ∥ = 3 2 + 4 2 = 5 \|\mathbf{v}\| = \sqrt{3^2 + 4^2} = 5 v=32+42 =5

因此,标准化后的向量为:

u = [ 3 5 , 4 5 ] = [ 0.6 , 0.8 ] \mathbf{u} = \left[\frac{3}{5}, \frac{4}{5}\right] = [0.6, 0.8] u=[53,54]=[0.6,0.8]

3.2.2. 降维处理:

高维向量可能导致计算复杂度增加,甚至引发“维度灾难”。采用降维技术,如主成分分析(PCA),可以在保留主要信息的同时,降低向量的维度,提高计算效率。

步骤:

  1. 数据中心化: 将数据集中的每个向量减去均值向量,使数据集的均值为零。

  2. 计算协方差矩阵: 对于中心化后的数据集,计算其协方差矩阵。

  3. 特征值分解: 对协方差矩阵进行特征值分解,得到特征值和对应的特征向量。

  4. 选择主成分: 根据特征值的大小,选择前 k k k 个最大的特征值所对应的特征向量,作为新的基向量。

  5. 数据投影: 将原始数据投影到选定的主成分上,得到降维后的数据表示。

示例:

假设有一个二维数据集:

X = [ 2 3 3 4 4 5 5 6 ] \mathbf{X} = \begin{bmatrix} 2 & 3 \\ 3 & 4 \\ 4 & 5 \\ 5 & 6 \end{bmatrix} X= 23453456

  1. 数据中心化:

计算每列的均值,并减去均值:

均值 = [ 3.5 4.5 ] \text{均值} = \begin{bmatrix} 3.5 & 4.5 \end{bmatrix} 均值=[3.54.5]

中心化后的数据:

X centered = [ − 1.5 − 1.5 − 0.5 − 0.5 0.5 0.5 1.5 1.5 ] \mathbf{X}_{\text{centered}} = \begin{bmatrix} -1.5 & -1.5 \\ -0.5 & -0.5 \\ 0.5 & 0.5 \\ 1.5 & 1.5 \end{bmatrix} Xcentered= 1.50.50.51.51.50.50.51.5

  1. 计算协方差矩阵:

C = 1 n − 1 X centered ⊤ X centered = [ 1.6667 1.6667 1.6667 1.6667 ] \mathbf{C} = \frac{1}{n-1} \mathbf{X}_{\text{centered}}^\top \mathbf{X}_{\text{centered}} = \begin{bmatrix} 1.6667 & 1.6667 \\ 1.6667 & 1.6667 \end{bmatrix} C=n11XcenteredXcentered=[1.66671.66671.66671.6667]

  1. 特征值分解:

特征值:

λ 1 = 3.3333 , λ 2 = 0 \lambda_1 = 3.3333, \quad \lambda_2 = 0 λ1=3.3333,λ2=0

特征向量:

v 1 = 1 2 [ 1 1 ] , v 2 = 1 2 [ − 1 1 ] \mathbf{v}_1 = \frac{1}{\sqrt{2}} \begin{bmatrix} 1 \\ 1 \end{bmatrix}, \quad \mathbf{v}_2 = \frac{1}{\sqrt{2}} \begin{bmatrix} -1 \\ 1 \end{bmatrix} v1=2 1[11],v2=2 1[11]

  1. 选择主成分:

选择特征值最大的特征向量 v 1 \mathbf{v}_1 v1 作为主成分。

  1. 数据投影:

将中心化后的数据投影到主成分上:

X projected = X centered v 1 = [ − 2.1213 − 0.7071 0.7071 2.1213 ] \mathbf{X}_{\text{projected}} = \mathbf{X}_{\text{centered}} \mathbf{v}_1 = \begin{bmatrix} -2.1213 \\ -0.7071 \\ 0.7071 \\ 2.1213 \end{bmatrix} Xprojected=Xcenteredv1= 2.12130.70710.70712.1213

通过上述步骤,可以有效地对向量进行标准化和降维处理,从而提高计算效率和匹配准确性。

四、向量数据库选择与配置

在这里插入图片描述

在选择和配置向量数据库时,综合考虑数据更新、扩展性和并发处理能力等因素至关重要。以下是对 Milvus、MongoDB、pgvector 和 Faiss 的比较分析:

1. Milvus:

  • 架构与扩展性: Milvus 是专为处理大规模向量数据而设计的开源向量数据库,采用分布式架构,支持水平扩展,能够高效管理和检索海量向量数据。

  • 数据更新与并发处理: Milvus 支持完整的 CRUD 操作,允许实时数据插入、更新和删除,并具备高并发处理能力,适用于需要频繁数据更新的应用场景。

2. MongoDB:

  • 向量支持: 作为 NoSQL 数据库,MongoDB 主要处理文档型数据。虽然可以存储向量,但缺乏专门的向量索引和检索功能,可能需要额外的插件或自定义实现。

  • 扩展性与并发处理: MongoDB 具备良好的扩展性和并发处理能力,但在处理高维向量数据时,性能可能不如专用的向量数据库。

3. pgvector(PostgreSQL 扩展):

  • 向量支持: pgvector 是 PostgreSQL 的扩展,添加了向量数据类型和相似性搜索功能,使传统关系型数据库能够处理向量数据。

  • 扩展性与性能: 由于 PostgreSQL 的关系模型与非结构化向量数据之间存在不匹配,这可能导致涉及向量相似性搜索的操作效率低下,尤其是在处理大规模高维向量数据时。

4. Faiss:

  • 性质与用途: Faiss 是由 Facebook 开发的开源库,专注于高效的向量相似性搜索和聚类。它并非完整的数据库管理系统,而是一个用于构建向量索引的库。

  • 数据更新与扩展性: Faiss 更适合处理静态或偶尔更新的数据集,缺乏对实时数据更新和高并发处理的支持,不适用于需要频繁数据更新的场景。

总结:

  • Milvus: 适用于需要处理大规模向量数据、支持实时更新和高并发访问的应用场景。

  • MongoDB: 适用于需要存储和检索文档型数据的场景,但在处理高维向量数据时可能需要额外的开发工作。

  • pgvector: 适用于希望在现有 PostgreSQL 系统中添加基本向量搜索功能的小规模应用,但在处理大规模高维向量数据时可能存在性能瓶颈。

  • Faiss: 适用于需要高效向量相似性搜索的静态数据集,但不适合需要频繁数据更新或高并发访问的场景。

以下是对 Milvus、MongoDB、pgvector 和 Faiss 的比较表格,涵盖架构、可扩展性、性能、用例和使用成本等方面:

特性MilvusMongoDBpgvectorFaiss
架构专为处理大规模向量数据设计的开源向量数据库,采用分布式架构,支持水平扩展。文档型 NoSQL 数据库,主要处理文档数据,缺乏专门的向量索引和检索功能。PostgreSQL 的扩展插件,添加了向量数据类型和相似性搜索功能。由 Facebook 开发的开源库,专注于高效的向量相似性搜索和聚类,但并非完整的数据库管理系统。
可扩展性采用分布式架构,支持水平扩展,适用于大规模向量数据的管理和检索。具备良好的扩展性,但在处理高维向量数据时,性能可能不如专用的向量数据库。作为 PostgreSQL 的扩展,受限于 PostgreSQL 的扩展性,在处理大规模高维向量数据时可能存在性能瓶颈。缺乏对实时数据更新和高并发处理的支持,不适用于需要频繁数据更新的场景。
性能专为高效处理向量相似性搜索而设计,性能表现优异。需要额外的插件或自定义实现向量检索功能,性能可能不如专用的向量数据库。提供基本的向量搜索功能,但在处理大规模高维向量数据时,性能可能不如专用的向量数据库。在静态或偶尔更新的数据集上表现良好,但不适合需要频繁数据更新或高并发访问的场景。
用例适用于需要处理大规模向量数据、支持实时更新和高并发访问的应用场景。适用于需要存储和检索文档型数据的场景,但在处理高维向量数据时可能需要额外的开发工作。适用于希望在现有 PostgreSQL 系统中添加基本向量搜索功能的小规模应用。适用于需要高效向量相似性搜索的静态数据集,但不适合需要频繁数据更新或高并发访问的场景。
使用成本开源免费,但需要考虑部署和维护成本。开源免费,但需要考虑向量检索功能的开发和维护成本。作为 PostgreSQL 的免费扩展,适用于已有 PostgreSQL 部署的场景。开源免费,但需要与其他系统集成以实现完整的数据库功能,可能增加复杂性。

在选择向量数据库时,应根据具体应用需求,权衡数据规模、更新频率、并发要求和系统架构等因素,选择最适合的解决方案。

五、 检索方式及重排序:

在信息检索领域,主要存在三种检索方式:全文检索语义检索混合检索。以下是对这三种方式的比较表格:

特性全文检索语义检索混合检索
检索方式基于关键词的匹配,利用倒排索引等技术实现快速查找。利用自然语言处理和机器学习技术,将文本转换为向量表示,通过计算向量之间的相似度来实现检索。结合全文检索和语义检索的优势,同时利用关键词匹配和语义相似度计算,以提高检索效果。
优点- 检索速度快,适用于大规模文档集。
- 对精确匹配的关键词查询效果较好。
- 能够理解词语的语义关系,提高检索的准确性。
- 对同义词、近义词具有较好的处理能力。
- 综合利用两种检索方式的优势,提高了检索的准确性和召回率。
- 在处理复杂查询时表现更佳,能够更好地理解用户意图。
缺点- 无法理解词语的语义关系,可能导致漏检或误检。
- 对同义词、近义词的处理能力有限。
- 计算复杂度高,可能影响检索速度。
- 需要大量高质量的训练数据,模型训练成本较高。
- 实现复杂度较高,需要协调两种检索方式的结果。
- 可能增加系统资源的消耗。
适用场景- 需要快速、精确的关键词匹配的场景。- 需要理解用户查询的深层语义,提高检索准确性的场景。- 需要兼顾关键词匹配和语义理解,提高检索效果的场景。

高级重排序模型:

在检索过程中,为了进一步提升结果的相关性,常引入高级重排序模型,如 Cross-Encoder 或基于 BERT 的 reranker。这些模型对初步检索结果进行重新排序,确保与用户查询的高度相关性。

总结:

选择适合的检索方式应根据具体应用场景和需求。如果需要快速、精确的关键词匹配,全文检索可能更适合;如果需要理解用户查询的深层语义,语义检索更为有效;而混合检索则在需要兼顾两者优势的情况下表现最佳。

六. 整合输出

从结合增强回答质量和多样化输出格式两个方面讲解整合输出

1. 增强回答质量:

  • 逻辑推理: 在输出阶段,通过引入逻辑推理机制,确保回答不仅是简单信息的拼接,而是能够对检索到的内容进行合理的逻辑推断和解释。这可以通过设计专门的提示或采用链式思维(Chain-of-Thought)来实现。
  • 多轮问答上下文保持: 对于多轮对话场景,系统需要保持上下文信息,使得连续对话中的回答能够参考先前的交流内容,从而提供连贯且准确的解答。
  • 答案可信度评估: 在生成最终回答之前,可以通过评估答案的可信度、引用信息的准确性以及多模型投票机制等方式,对答案进行打分和筛选,确保最终输出的信息具有较高的准确性和权威性。

2. 多样化输出格式:

  • 灵活的输出形式: 根据应用场景的不同,可以将生成的回答以多种格式输出,如 JSON 格式便于程序调用、Markdown 格式适合文本展示以及纯文本格式便于直接阅读。
  • 格式化策略: 在设计输出模块时,需要预先定义好各类输出模板,并根据具体任务动态选择相应模板。例如,对于结构化数据查询,输出 JSON 格式可以方便后续处理;对于展示场景,则可以使用 Markdown 格式增强可读性。

综合说明:
在整合输出阶段,不仅仅是简单地返回检索或生成的文本,而是需要通过逻辑推理、多轮对话上下文保持和答案可信度评估等机制,进一步提升回答的准确性和用户满意度。同时,根据用户和系统的需求,提供多样化的输出格式,以便于系统集成和直接展示。这样的设计能够使系统在实际应用中更好地满足不同场景的需求,增强用户体验和系统可靠性。

七、 补充其他模块

在构建和优化 RAG(Retrieval-Augmented Generation)系统时,以下补充模块对于提升系统的可靠性、用户满意度以及合规性至关重要:

1. 监控与日志记录:

  • 建立全面的监控系统: 在数据收集、处理、检索和生成等各个环节,设置实时监控机制,及时发现并处理异常情况,确保系统的稳定运行。

  • 实施详细的日志记录: 对系统操作、用户交互、错误信息等进行详细记录,便于后续的调试、性能分析和问题追踪。

  • 采用专业工具: 使用如 Oracle 的 LogMiner 等专业工具,深入分析数据库日志,帮助识别数据库事件的时间、隔离错误事务以及制定数据恢复步骤。

2. 反馈机制与持续优化:

  • 设计用户反馈环节: 收集用户对系统输出的评价和建议,了解用户需求和痛点,为系统改进提供依据。

  • 持续调优模型和策略: 根据用户反馈和系统性能指标,定期优化检索策略、向量化模型和生成模型,提升系统的准确性和用户满意度。

  • 建立闭环反馈机制: 确保用户反馈能够被有效采纳,并在系统中得到体现,形成持续改进的良性循环。

3. 安全与隐私:

  • 遵守国际标准: 参考 ISO/IEC 27000 系列等国际标准,建立信息安全管理体系,确保信息安全管理的规范性和有效性。

  • 遵循法律法规: 在数据收集和处理过程中,严格遵守相关法律法规,如《中华人民共和国个人信息保护法》 和欧盟的《一般数据保护规范》(GDPR) ,确保数据处理活动合法合规。

  • 实施数据保护措施: 采用数据加密、访问控制、匿名化等技术手段,保护用户数据的安全性和隐私性,防止数据泄露和滥用。

  • 定期安全审计: 定期对系统进行安全审计和风险评估,及时发现并修复安全漏洞,提升系统的安全防护能力。

通过在 RAG 系统中引入上述补充模块,可以有效提升系统的可靠性、用户满意度以及合规性,确保系统在实际应用中安全、稳定、高效地运行。


本文详细介绍了RAG系统的全流程,从数据收集、细化数据清洗(包括领域专有名词处理)、智能数据分块与QA对生成,到向量化(涵盖多模型融合和预处理优化)、向量数据库的选择与配置,再到检索方式及重排序的多样策略,最后讨论了整合输出、监控、反馈机制及安全隐私保护等补充模块。
通过这一系列环节的优化与融合,系统不仅能够高效地处理和检索海量数据,还能确保回答的准确性和用户体验,并在实际应用中满足不断变化的业务需求。此完整的方案为构建一个高效、稳定且安全的RAG系统提供了清晰的实践指导和全面的解决思路。


参考文献

特定领域嵌入模型微调:从理论到实践

漫谈文本增强

维基百科-命名实体识别

bge-large-zh-v1.5 与Pro/BAAI/bge-m3 区别
多模态模型新篇章:智源研究院推出BGE-VL开源模型

归一化 (Normalization)、标准化 (Standardization)和中心化/零均值化 (Zero-centered)
讲讲降维算法:PCA 主成分分析

向量数据库对比:Weaviate、Milvus和Qdrant
应对数据爆炸时代,揭秘向量数据库如何成为AI开发者的新宠,各数据库差异对比
全面对比与选择指南:Milvus、PGVector、Zilliz及其他向量数据库

维基百科-ISO/IEC 27000系列
全文检索、向量检索和混合检索的比较分析

相关文章:

# RAG 框架 # 一文入门 全链路RAG系统构建与优化 —— 架构、策略与实践

本文全面阐述了RAG系统从数据收集、数据清洗(包括领域专有名词处理)、智能数据分块与QA对生成,到向量化、向量数据库选择与配置,再到检索方式及重排序,直至整合输出、监控反馈和安全保障的全流程。通过这一完整方案&am…...

网络运维学习笔记(DeepSeek优化版) 017 HCIA-Datacom综合实验02

文章目录 综合实验2sw3sw4gwcore1(sw1)core2(sw2)ISP 综合实验2 sw3 vlan 2 stp mode stp int e0/0/1 port link-type trunk port trunk allow-pass vlan 2 int e0/0/2 port link-type trunk port trunk allow-pass vlan 2 int e…...

Flutter——Android与Flutter混合开发详细教程

目录 1.创建FlutterModule项目,相当于Android项目里面的module库;2.或者编辑aar引用3.创建Android原生项目3.直接运行跑起来 1.创建FlutterModule项目,相当于Android项目里面的module库; 2.或者编辑aar引用 执行 flutter build a…...

java手机号、邮箱、日期正则表达式

Java正则核心API Java中用 java.util.regex 包的两个类: Pattern:编译正则表达式Matcher:执行匹配操作 1. 验证手机号 String regex "1[3-9]\\d{9}"; boolean isValid "18812345678".matches(regex); // true2. 提取…...

0x04.若依框架微服务开发(含AI模块运行)

微服务本地开发硬件资源有限,所以会将核心微服务组件先部署在服务器上比如:mysql,redis,注册中心Nacos,网关Gateway,认证中心Auth和upms模块以及低代码生成模块。 mysql、redis部署前篇已讲,这…...

数据库管理-第302期 国产类RAC架构数据库网络连接方式(20250314)

数据库管理302期 2025-03-14 数据库管理-第302期 国产类RAC架构数据库网络连接方式(20250314)1 Oracle RAC2 DMDSC3 YAC4 KES RAC总结 数据库管理-第302期 国产类RAC架构数据库网络连接方式(20250314) 作者:胖头鱼的鱼…...

ctf web入门知识合集

文章目录 01做题思路02信息泄露及利用robots.txt.git文件泄露dirsearch ctfshow做题记录信息搜集web1web2web3web4web5web6web7web8SVN泄露与 Git泄露的区别web9web10 php的基础概念php的基础语法1. PHP 基本语法结构2. PHP 变量3.输出数据4.数组5.超全局变量6.文件操作 php的命…...

CSS3-流星雨

1. 绘制标签 <div class"container"><span></span> </div>2. 设置div背景 在百度上搜索一幅星空的图片 <style>* {/* 初始化 */margin: 0;padding: 0;}body {/* 高度100% */height: 100vh;/* 溢出隐藏 */overflow: hidden;}.contai…...

【leetcode hot 100 199】二叉树的右视图

解法一&#xff1a;层级遍历&#xff0c;右侧看到的节点就是每一层最后一个元素 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }…...

Unity进阶课程【二】Mask 组件的使用 UI遮罩效果以及透明抠图效果

Unity组件讲解 Mask 时隔多年&#xff0c;今天咱们继续进阶课程&#xff0c;这几年变化很大&#xff0c;但是一直还是从事Unity行业&#xff0c;行业虽难&#xff0c;依旧坚持&#xff0c;以后会养成习惯&#xff0c;定期更新&#xff0c;希望小伙伴们监督&#xff0c;有想学习…...

本地部署Jina AI Reader:用Docker打造你的智能解析引擎

本地部署Jina AI Reader&#xff1a;用Docker打造你的智能解析引擎 &#x1f31f; 引言&#xff1a;为什么需要本地部署&#xff1f;&#x1f4cc; 场景应用图谱&#x1f527; 部署指南&#xff08;Linux环境&#xff09;1. 环境准备2. Docker部署3. 验证服务状态 &#x1f680…...

【MyBatis Plus 逻辑删除详解】

文章目录 MyBatis Plus 逻辑删除详解前言什么是逻辑删除&#xff1f;MyBatis Plus 中的逻辑删除1. 添加逻辑删除字段2. 实体类的配置3. 配置 MyBatis Plus4. 使用逻辑删除5. 查询逻辑删除的记录 MyBatis Plus 逻辑删除详解 前言 MyBatis Plus 是一个强大的持久化框架&#xf…...

Unity--GPT-SoVITS接入、处理GPTAPI的SSE响应流

GPT-SoVITS GPT-SoVITS- v2&#xff08;v3也可以&#xff0c;两者对模型文件具有兼容&#xff09; 点击后 会进入新的游览器网页 ----- 看了一圈&#xff0c;发现主要问题集中在模型的训练很需要CPU&#xff0c;也就是模型的制作上&#xff0c;问题很多&#xff0c;如果有现有…...

一次Linux下 .net 调试经历

背景&#xff1a; Xt160Api, 之前在windows下用.net调用&#xff0c;没有任何问题。 但是移植到Linux去后&#xff0c;.net程序 调用 init(config_path) 总是报错 /root/test 找不到 traderApi.ini (/root/test 是程序目录) 然后退出程序 解决过程: 于是考虑是不是参数传错了&…...

Manus 技术探索 - 使用 gVisor 在沙箱内运行 Ubuntu 容器并通过远程浏览器访问

在容器化技术中&#xff0c;gVisor 为运行不信任的工作负载提供了额外的安全隔离。本文将详细介绍如何利用 gVisor 运行带 GUI 的 Ubuntu 容器&#xff0c;并通过 VNC/NoVNC 实现远程浏览器访问&#xff0c;从而轻松控制容器内的桌面环境。 1. 安装 gVisor 如果你还没有安装 …...

PentestGPT 下载

PentestGPT 下载 PentestGPT 介绍 PentestGPT&#xff08;Penetration Testing GPT&#xff09;是一个基于大语言模型&#xff08;LLM&#xff09;的智能渗透测试助手。它结合了 ChatGPT&#xff08;或其他 GPT 模型&#xff09;与渗透测试工具&#xff0c;帮助安全研究人员自…...

Day07 -实例 非http/s数据包抓取工具的使用:科来 wrieshark 封包监听工具

引入&#xff1a;由于我们day06正确为模拟器配置好了抓包环境&#xff0c;现在用bp去抓取模拟器web包是可以抓取到的&#xff0c;但是某些小程序 & pc端的app 都是有走非http/https协议的数据包的&#xff0c;那么我们就需要用不同的工具去抓取这些其他协议的数据包。 工具…...

机器学习 [白板推导](三)[线性分类]

4. 线性分类 4.1. 线性分类的典型模型 硬分类&#xff1a;输出结果只有0或1这种离散结果&#xff1b; 感知机线性判别分析 Fisher 软分类&#xff1a;会输出0-1之间的值作为各个类别的概率&#xff1b; 概率生成模型&#xff1a;高斯判别分析GDA、朴素贝叶斯&#xff0c;主要…...

c# 查找相似颜色算法

下是一个基于欧几里得距离的C#颜色相似度查找算法实现,包含详细注释和优化策略: using System; using System.Collections.Generic;public class ColorMatcher {// 颜色容器 - 使用字典存储颜色ID到RGB的映射private readonly Dictionary<int, byte[]> _colorDictiona…...

【数据分析】读取文件

3. 读取指定列 针对只需要读取数据中的某一列或多列的情况&#xff0c;pd.read_csv()函数提供了一个参数&#xff1a;usecols&#xff0c;将包含对应的columns的列表传入该参数即可。 上面&#xff0c;我们学习了读取 "payment" 和 "items_count" 这…...

全星研发管理APQP软件系统:助力汽车零部件企业高效研发,打造核心竞争力

在竞争日益激烈的汽车零部件行业&#xff0c;产品质量和研发效率直接影响企业的生存与发展。APQP&#xff08;先期产品质量策划&#xff09;作为行业的研发管理框架&#xff0c;能够有效提升产品质量和研发效率。然而&#xff0c;传统的APQP管理方式往往面临流程繁琐、信息分散…...

ccf3501密码

//密码 #include<iostream> #include<cstring> using namespace std; int panduan(char a[]){int lstrlen(a);int s0;int zm0,sz0,t0;int b[26]{0},c[26]{0},d[10]{0},e0,f0;while(s<l&&l>6){if(a[s]<Z&&a[s]>A){b[a[s]-A];zm;}if(a[s…...

kali之netdiscover

kali之netdiscover Netdiscover 是 Kali Linux 中一款用于网络发现和主机扫描的工具。它通过主动发送 ARP 请求来识别局域网中的活动主机&#xff0c;并显示它们的 IP 地址、MAC 地址和网卡厂商信息。Netdiscover 特别适用于局域网内的主机发现和网络映射。 1. Netdiscover 的…...

Leetcode-2272. Substring With Largest Variance [C++][Java]

目录 一、题目描述 二、解题思路 【C】 【Java】 Leetcode-2272. Substring With Largest Variancehttps://leetcode.com/problems/substring-with-largest-variance/description/2272. 最大波动的子字符串 - 力扣&#xff08;LeetCode&#xff09;2272. 最大波动的子字符串…...

【AI】技术人如何系统学习AI大模型应用开发?

从理论认知到全栈落地的完整指南 一、认知突破&#xff1a;理解大模型的技术本质&#xff08;1-2周&#xff09; 1.1 基础理论筑基 必学内容 大模型演进脉络&#xff1a;从Transformer到GPT-4的技术跃迁核心机制解析&#xff1a;注意力机制、位置编码、自监督学习关键能力边界…...

级联树SELECTTREE格式调整

步骤&#xff1a; 1、将全部列表设置成Map<Long, List<Obejct>> map的格式&#xff0c;方便查看每个父级对应的子列表&#xff0c;减少循环次数 2、对这个map进行递归&#xff0c;重新进行级联树的集合调整&#xff0c;将子集放置在对应的childs里面。 public Dyna…...

深入理解静态与动态代理设计模式:从理论到实践

静态代理设计模式 1.为什么需要代理设计模式&#xff1f; javaEE分层开发中&#xff0c;哪个层次对于我们来讲最重要 DAO---->Service---->Controller JavaEE分层中&#xff0c;最为重要的是Service层 Service层包含了那些代码 Service层核心功能(几十行 上百代码) 额外…...

NET进行CAD二次开发之二

本文主要针对CAD 二次开发入门与实践:以 C# 为例_c# cad-CSDN博客的一些实践问题做一些补充。 一、DLL介绍 在 AutoCAD 中,accoremgd.dll、acdbmgd.dll 和 acmgd.dll 都是与.NET API 相关的动态链接库,它们在使用.NET 语言(如 C#、VB.NET)进行 AutoCAD 二次开发时起着关…...

PyTorch 实现 Conditional DCGAN(条件深度卷积生成对抗网络)进行图像到图像转换的示例代码

以下是一个使用 PyTorch 实现 Conditional DCGAN&#xff08;条件深度卷积生成对抗网络&#xff09;进行图像到图像转换的示例代码。该代码包含训练和可视化部分&#xff0c;假设输入为图片和 4 个工艺参数&#xff0c;根据这些输入生成相应的图片。 1. 导入必要的库 import …...

c#:使用Modbus RTU协议

Modbus是一种广泛应用于工业自动化领域的通信协议&#xff0c;支持多种传输方式&#xff0c;如RTU、TCP等。其中&#xff0c;Modbus RTU是一种基于串行通信的协议&#xff0c;具有高效、可靠的特点。本文将详细介绍Modbus RTU协议的基本原理&#xff0c;并重点解析功能码0x03&a…...

设计模式(行为型)-备忘录模式

目录 定义 类图 角色 角色详解 &#xff08;一&#xff09;发起人角色&#xff08;Originator&#xff09;​ &#xff08;二&#xff09;备忘录角色&#xff08;Memento&#xff09;​ &#xff08;三&#xff09;备忘录管理员角色&#xff08;Caretaker&#xff09;​…...

基于yolo11+flask打造一个精美登录界面和检测系统

这个是使用flask实现好看登录界面和友好的检测界面实现yolov11推理和展示&#xff0c;代码仅仅有2个html文件和一个python文件&#xff0c;真正做到了用最简洁的代码实现复杂功能。 测试通过环境&#xff1a; windows x64 anaconda3python3.8 ultralytics8.3.81 flask1.1.…...

【软考-架构】13.1、软件架构概述-构件技术

✨资料&文章更新✨ GitHub地址&#xff1a;https://github.com/tyronczt/system_architect 文章目录 ✨【重点】系统架构设计软件架构概述软件架构设计与生命周期构件&#x1f31f;软件架构风格数据流风格调用/返回风格独立构件风格虚拟机风格仓库风格闭环控制风格C2体系结…...

RabbitMQ(补档)

RabbitMQ 是一个开源的消息队列软件&#xff08;有时也被称为消息代理&#xff09;&#xff0c;它实现了高级消息队列协议&#xff08;AMQP&#xff09;。它主要用于应用程序之间&#xff0c;或者软件组件之间的消息通信。通过使用 RabbitMQ&#xff0c;可以实现异步的、可靠的…...

仿“东方甄选”直播商城小程序运营平台

在公域直播流量红利趋于饱和、流量成本大幅攀升的当下&#xff0c;私域直播为企业开辟了新的流量聚集和转化渠道&#xff0c;特别是对于那些希望在私域流量领域取得突破的品牌商家来说&#xff0c;直播场景以其独特的高频互动氛围&#xff0c;相比其他运营方式&#xff0c;展现…...

增量数据同步怎么做

增量数据同步怎么做&#xff1f;比如A系统里有母猪数据&#xff0c;新增了一头母猪&#xff0c;这条母猪数据要低延迟地同步到B系统。而不是A系统全表扫描一遍&#xff0c;然后全部同步到B系统。这种全扫描同步方法延迟非常大&#xff0c;尤其涉及到母猪大数据时&#xff0c;会…...

LeetCode 解题思路 18(Hot 100)

解题思路&#xff1a; 继承 LinkedHashMap&#xff1a; 内置双向链表&#xff0c;自动维护节点的插入顺序和访问顺序。LRU 淘汰逻辑&#xff1a; 覆盖 removeEldestEntry&#xff0c;当元素数量超过 capacity 时&#xff0c;移除最旧条目。removeEldestEntry 方法提供钩子&…...

基于Spring Boot的民宿租赁系统的设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…...

Go红队开发—web网络编程

文章目录 web网络编程Req快速请求 调试DevModeDebugLogTraceInfo瓶颈分析 控制请求与响应控制请求的字段内容控制调试打印的内容分开dump请求与响应部分请求体设置 作用范围级别设置参数查询URL 路径参数表单请求设置请求头设置 判断响应状态码解析数据SetSuccessResultgjson响…...

ollama不安装到c盘,安装到其他盘

ollama 安装包默认安装到c盘&#xff0c;安装程序并没有提供选择文件夹安装功能&#xff0c;本来c盘就快满了&#xff0c;下几个模型c盘都快爆了&#xff0c;如何将ollma安装到其他盘呢&#xff1f; ollama 默认安装位置 C:\Users\Admin\.ollama 是 Ollama 用来放大模型的文件夹…...

【HTML】一、基础标签

文章目录 1、开发环境准备2、html介绍3、html基本骨架4、标签的关系5、常用标签5.1 标题5.2 段落5.3 换行与水平线5.4 文本格式化标签5.5 图像标签5.6 超链接标签5.7 音频标签5.8 视频标签 6、路径7、网页制作 1、开发环境准备 在编辑器中写代码&#xff0c;在浏览器中看效果 …...

NPU、边缘计算与算力都是什么啊?

考虑到灵活性和经济性&#xff0c;公司购置一台边缘计算机&#xff0c;正在尝试将PCGPU的计算机视觉项目转到边缘计算机NPU上。本文简单整理了三个概念&#xff0c;并试图将其做个概要的说明。 一、算力&#xff1a;数字世界的“基础能源” 1.1 算力是什么 **算力&#xff08…...

spring声明式事务原理01-调用第1层@Transactional方法(事务访问入口)

文章目录 【README】【步骤1】UserAppService调用userSupport.saveNewUser()【步骤2】获取到TransactionInterceptor【步骤3】chain不为空&#xff0c;接着执行CglibMethodInvocation#proceed方法【补充】AopContext作用 【步骤4】CglibMethodInvocation#proceed方法【步骤5】调…...

[MoeCTF 2021]babyRCE

打开题目在线环境可以看到&#xff1a; <?php$rce $_GET[rce]; if (isset($rce)) {if (!preg_match("/cat|more|less|head|tac|tail|nl|od|vi|vim|sort|flag| |\;|[0-9]|\*|\|\%|\>|\<|\|\"/i", $rce)) {system($rce);}else {echo "hhhhhhacke…...

【leetcode hot 100 114】二叉树展开为链表

解法一&#xff1a;执行一次先序遍历&#xff0c;把元素放入list中&#xff0c;然后放回root中 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { th…...

嵌入式八股,为什么单片机中不使用malloc函数

1. 资源限制 单片机的内存资源通常非常有限&#xff0c;尤其是RAM的大小可能只有几KB到几十KB。在这种情况下&#xff0c;使用 malloc 进行动态内存分配可能会导致内存碎片化&#xff0c;使得程序在运行过程中逐渐耗尽可用内存。 2. 内存碎片问题 malloc 函数在分配和释放内…...

基于Python的selenium入门超详细教程(第1章)--WebDriver API篇

学习路线 自动化测试介绍及学习路线-CSDN博客 ​自动化测试之Web自动化&#xff08;基于pythonselenium&#xff09;-CSDN博客 参照博文&#xff1a;selenium入门超详细教程——网页自动化操作-CSDN博客 目录 前言 一、WebDriver API介绍 1.1 什么是WebDriver? 1.2 工…...

IIC通信协议详解与STM32实战指南

IIC通信协议详解与STM32实战指南 引言 IIC&#xff08;Inter-Integrated Circuit&#xff09;是Philips公司开发的串行通信协议&#xff0c;广泛应用于传感器、EEPROM、RTC等低速外设的连接。本文深入解析IIC协议原理&#xff0c;并提供基于STM32的GPIO模拟实现方案&#xff…...

【算法】数组、链表、栈、队列、树

⭐️个人主页&#xff1a;小羊 ⭐️所属专栏&#xff1a;Linux 很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~ 目录 持续更新中...数组、链表点击消除环形链表环形链表 II 栈、队列树 持续更新中… 数组、链表 点击消除 AB5 点击消除 这个题很容…...

vscode 配置golang开发环境

vscode 配置golang开发环境 在go1.20环境中需要指定工具的安装版本 go install golang.org/x/tools/goplsv0.15.3 go install github.com/go-delve/delve/cmd/dlvv1.21.0使用go Install/Update tool安装工具会报错 go版本太低, 而很多时候为了项目稳定或风险太高, 我们不太希…...