# 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. 向量标准化:
向量标准化旨在将每个向量的长度调整为单位长度,以确保在计算相似度时,尺度一致,从而提高匹配的准确性。
步骤:
-
计算向量的范数(长度): 对于给定的向量 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
-
将向量归一化为单位长度: 将向量的每个分量除以该向量的范数,得到标准化后的向量 u \mathbf{u} u:
u = v ∥ v ∥ \mathbf{u} = \frac{\mathbf{v}}{\|\mathbf{v}\|} u=∥v∥v
示例:
假设有一个向量 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),可以在保留主要信息的同时,降低向量的维度,提高计算效率。
步骤:
-
数据中心化: 将数据集中的每个向量减去均值向量,使数据集的均值为零。
-
计算协方差矩阵: 对于中心化后的数据集,计算其协方差矩阵。
-
特征值分解: 对协方差矩阵进行特征值分解,得到特征值和对应的特征向量。
-
选择主成分: 根据特征值的大小,选择前 k k k 个最大的特征值所对应的特征向量,作为新的基向量。
-
数据投影: 将原始数据投影到选定的主成分上,得到降维后的数据表示。
示例:
假设有一个二维数据集:
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
- 数据中心化:
计算每列的均值,并减去均值:
均值 = [ 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.5−0.50.51.5−1.5−0.50.51.5
- 计算协方差矩阵:
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=n−11Xcentered⊤Xcentered=[1.66671.66671.66671.6667]
- 特征值分解:
特征值:
λ 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=21[11],v2=21[−11]
- 选择主成分:
选择特征值最大的特征向量 v 1 \mathbf{v}_1 v1 作为主成分。
- 数据投影:
将中心化后的数据投影到主成分上:
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.1213−0.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 的比较表格,涵盖架构、可扩展性、性能、用例和使用成本等方面:
特性 | Milvus | MongoDB | pgvector | Faiss |
---|---|---|---|---|
架构 | 专为处理大规模向量数据设计的开源向量数据库,采用分布式架构,支持水平扩展。 | 文档型 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】二叉树的右视图
解法一:层级遍历,右侧看到的节点就是每一层最后一个元素 /*** 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 时隔多年,今天咱们继续进阶课程,这几年变化很大,但是一直还是从事Unity行业,行业虽难,依旧坚持,以后会养成习惯,定期更新,希望小伙伴们监督,有想学习…...
本地部署Jina AI Reader:用Docker打造你的智能解析引擎
本地部署Jina AI Reader:用Docker打造你的智能解析引擎 🌟 引言:为什么需要本地部署?📌 场景应用图谱🔧 部署指南(Linux环境)1. 环境准备2. Docker部署3. 验证服务状态 🚀…...
【MyBatis Plus 逻辑删除详解】
文章目录 MyBatis Plus 逻辑删除详解前言什么是逻辑删除?MyBatis Plus 中的逻辑删除1. 添加逻辑删除字段2. 实体类的配置3. 配置 MyBatis Plus4. 使用逻辑删除5. 查询逻辑删除的记录 MyBatis Plus 逻辑删除详解 前言 MyBatis Plus 是一个强大的持久化框架…...
Unity--GPT-SoVITS接入、处理GPTAPI的SSE响应流
GPT-SoVITS GPT-SoVITS- v2(v3也可以,两者对模型文件具有兼容) 点击后 会进入新的游览器网页 ----- 看了一圈,发现主要问题集中在模型的训练很需要CPU,也就是模型的制作上,问题很多,如果有现有…...
一次Linux下 .net 调试经历
背景: Xt160Api, 之前在windows下用.net调用,没有任何问题。 但是移植到Linux去后,.net程序 调用 init(config_path) 总是报错 /root/test 找不到 traderApi.ini (/root/test 是程序目录) 然后退出程序 解决过程: 于是考虑是不是参数传错了&…...
Manus 技术探索 - 使用 gVisor 在沙箱内运行 Ubuntu 容器并通过远程浏览器访问
在容器化技术中,gVisor 为运行不信任的工作负载提供了额外的安全隔离。本文将详细介绍如何利用 gVisor 运行带 GUI 的 Ubuntu 容器,并通过 VNC/NoVNC 实现远程浏览器访问,从而轻松控制容器内的桌面环境。 1. 安装 gVisor 如果你还没有安装 …...
PentestGPT 下载
PentestGPT 下载 PentestGPT 介绍 PentestGPT(Penetration Testing GPT)是一个基于大语言模型(LLM)的智能渗透测试助手。它结合了 ChatGPT(或其他 GPT 模型)与渗透测试工具,帮助安全研究人员自…...
Day07 -实例 非http/s数据包抓取工具的使用:科来 wrieshark 封包监听工具
引入:由于我们day06正确为模拟器配置好了抓包环境,现在用bp去抓取模拟器web包是可以抓取到的,但是某些小程序 & pc端的app 都是有走非http/https协议的数据包的,那么我们就需要用不同的工具去抓取这些其他协议的数据包。 工具…...
机器学习 [白板推导](三)[线性分类]
4. 线性分类 4.1. 线性分类的典型模型 硬分类:输出结果只有0或1这种离散结果; 感知机线性判别分析 Fisher 软分类:会输出0-1之间的值作为各个类别的概率; 概率生成模型:高斯判别分析GDA、朴素贝叶斯,主要…...
c# 查找相似颜色算法
下是一个基于欧几里得距离的C#颜色相似度查找算法实现,包含详细注释和优化策略: using System; using System.Collections.Generic;public class ColorMatcher {// 颜色容器 - 使用字典存储颜色ID到RGB的映射private readonly Dictionary<int, byte[]> _colorDictiona…...
【数据分析】读取文件
3. 读取指定列 针对只需要读取数据中的某一列或多列的情况,pd.read_csv()函数提供了一个参数:usecols,将包含对应的columns的列表传入该参数即可。 上面,我们学习了读取 "payment" 和 "items_count" 这…...
全星研发管理APQP软件系统:助力汽车零部件企业高效研发,打造核心竞争力
在竞争日益激烈的汽车零部件行业,产品质量和研发效率直接影响企业的生存与发展。APQP(先期产品质量策划)作为行业的研发管理框架,能够有效提升产品质量和研发效率。然而,传统的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 请求来识别局域网中的活动主机,并显示它们的 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. 最大波动的子字符串 - 力扣(LeetCode)2272. 最大波动的子字符串…...
【AI】技术人如何系统学习AI大模型应用开发?
从理论认知到全栈落地的完整指南 一、认知突破:理解大模型的技术本质(1-2周) 1.1 基础理论筑基 必学内容 大模型演进脉络:从Transformer到GPT-4的技术跃迁核心机制解析:注意力机制、位置编码、自监督学习关键能力边界…...
级联树SELECTTREE格式调整
步骤: 1、将全部列表设置成Map<Long, List<Obejct>> map的格式,方便查看每个父级对应的子列表,减少循环次数 2、对这个map进行递归,重新进行级联树的集合调整,将子集放置在对应的childs里面。 public Dyna…...
深入理解静态与动态代理设计模式:从理论到实践
静态代理设计模式 1.为什么需要代理设计模式? javaEE分层开发中,哪个层次对于我们来讲最重要 DAO---->Service---->Controller JavaEE分层中,最为重要的是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(条件深度卷积生成对抗网络)进行图像到图像转换的示例代码。该代码包含训练和可视化部分,假设输入为图片和 4 个工艺参数,根据这些输入生成相应的图片。 1. 导入必要的库 import …...
c#:使用Modbus RTU协议
Modbus是一种广泛应用于工业自动化领域的通信协议,支持多种传输方式,如RTU、TCP等。其中,Modbus RTU是一种基于串行通信的协议,具有高效、可靠的特点。本文将详细介绍Modbus RTU协议的基本原理,并重点解析功能码0x03&a…...
设计模式(行为型)-备忘录模式
目录 定义 类图 角色 角色详解 (一)发起人角色(Originator) (二)备忘录角色(Memento) (三)备忘录管理员角色(Caretaker)…...
基于yolo11+flask打造一个精美登录界面和检测系统
这个是使用flask实现好看登录界面和友好的检测界面实现yolov11推理和展示,代码仅仅有2个html文件和一个python文件,真正做到了用最简洁的代码实现复杂功能。 测试通过环境: windows x64 anaconda3python3.8 ultralytics8.3.81 flask1.1.…...
【软考-架构】13.1、软件架构概述-构件技术
✨资料&文章更新✨ GitHub地址:https://github.com/tyronczt/system_architect 文章目录 ✨【重点】系统架构设计软件架构概述软件架构设计与生命周期构件🌟软件架构风格数据流风格调用/返回风格独立构件风格虚拟机风格仓库风格闭环控制风格C2体系结…...
RabbitMQ(补档)
RabbitMQ 是一个开源的消息队列软件(有时也被称为消息代理),它实现了高级消息队列协议(AMQP)。它主要用于应用程序之间,或者软件组件之间的消息通信。通过使用 RabbitMQ,可以实现异步的、可靠的…...
仿“东方甄选”直播商城小程序运营平台
在公域直播流量红利趋于饱和、流量成本大幅攀升的当下,私域直播为企业开辟了新的流量聚集和转化渠道,特别是对于那些希望在私域流量领域取得突破的品牌商家来说,直播场景以其独特的高频互动氛围,相比其他运营方式,展现…...
增量数据同步怎么做
增量数据同步怎么做?比如A系统里有母猪数据,新增了一头母猪,这条母猪数据要低延迟地同步到B系统。而不是A系统全表扫描一遍,然后全部同步到B系统。这种全扫描同步方法延迟非常大,尤其涉及到母猪大数据时,会…...
LeetCode 解题思路 18(Hot 100)
解题思路: 继承 LinkedHashMap: 内置双向链表,自动维护节点的插入顺序和访问顺序。LRU 淘汰逻辑: 覆盖 removeEldestEntry,当元素数量超过 capacity 时,移除最旧条目。removeEldestEntry 方法提供钩子&…...
基于Spring Boot的民宿租赁系统的设计与实现(LW+源码+讲解)
专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…...
Go红队开发—web网络编程
文章目录 web网络编程Req快速请求 调试DevModeDebugLogTraceInfo瓶颈分析 控制请求与响应控制请求的字段内容控制调试打印的内容分开dump请求与响应部分请求体设置 作用范围级别设置参数查询URL 路径参数表单请求设置请求头设置 判断响应状态码解析数据SetSuccessResultgjson响…...
ollama不安装到c盘,安装到其他盘
ollama 安装包默认安装到c盘,安装程序并没有提供选择文件夹安装功能,本来c盘就快满了,下几个模型c盘都快爆了,如何将ollma安装到其他盘呢? 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、开发环境准备 在编辑器中写代码,在浏览器中看效果 …...
NPU、边缘计算与算力都是什么啊?
考虑到灵活性和经济性,公司购置一台边缘计算机,正在尝试将PCGPU的计算机视觉项目转到边缘计算机NPU上。本文简单整理了三个概念,并试图将其做个概要的说明。 一、算力:数字世界的“基础能源” 1.1 算力是什么 **算力(…...
spring声明式事务原理01-调用第1层@Transactional方法(事务访问入口)
文章目录 【README】【步骤1】UserAppService调用userSupport.saveNewUser()【步骤2】获取到TransactionInterceptor【步骤3】chain不为空,接着执行CglibMethodInvocation#proceed方法【补充】AopContext作用 【步骤4】CglibMethodInvocation#proceed方法【步骤5】调…...
[MoeCTF 2021]babyRCE
打开题目在线环境可以看到: <?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】二叉树展开为链表
解法一:执行一次先序遍历,把元素放入list中,然后放回root中 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { th…...
嵌入式八股,为什么单片机中不使用malloc函数
1. 资源限制 单片机的内存资源通常非常有限,尤其是RAM的大小可能只有几KB到几十KB。在这种情况下,使用 malloc 进行动态内存分配可能会导致内存碎片化,使得程序在运行过程中逐渐耗尽可用内存。 2. 内存碎片问题 malloc 函数在分配和释放内…...
基于Python的selenium入门超详细教程(第1章)--WebDriver API篇
学习路线 自动化测试介绍及学习路线-CSDN博客 自动化测试之Web自动化(基于pythonselenium)-CSDN博客 参照博文:selenium入门超详细教程——网页自动化操作-CSDN博客 目录 前言 一、WebDriver API介绍 1.1 什么是WebDriver? 1.2 工…...
IIC通信协议详解与STM32实战指南
IIC通信协议详解与STM32实战指南 引言 IIC(Inter-Integrated Circuit)是Philips公司开发的串行通信协议,广泛应用于传感器、EEPROM、RTC等低速外设的连接。本文深入解析IIC协议原理,并提供基于STM32的GPIO模拟实现方案ÿ…...
【算法】数组、链表、栈、队列、树
⭐️个人主页:小羊 ⭐️所属专栏:Linux 很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~ 目录 持续更新中...数组、链表点击消除环形链表环形链表 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版本太低, 而很多时候为了项目稳定或风险太高, 我们不太希…...