# 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…...
【Golang】第二弹-----变量、基本数据类型、标识符
笔上得来终觉浅,绝知此事要躬行 🔥 个人主页:星云爱编程 🔥 所属专栏:Golang 🌷追光的人,终会万丈光芒 🎉欢迎大家点赞👍评论📝收藏⭐文章 目录 一、变量 1.1基本介绍…...
c#:使用Modbus RTU协议
Modbus是一种广泛应用于工业自动化领域的通信协议,支持多种传输方式,如RTU、TCP等。其中,Modbus RTU是一种基于串行通信的协议,具有高效、可靠的特点。本文将详细介绍Modbus RTU协议的基本原理,并重点解析功能码0x03&a…...
linux系统CentOS 7版本搭建NFS共享存储
一、什么是NFS共享存储方式 NFS共享存储方式 是一种分布式文件系统协议,允许客户端通过网络访问远程服务器上的文件,就像访问本地文件一样。 二、 NFS的基本概念 (1)服务器端:提供共享存储的机器,负责导…...
Matlab 基于SVPWM的VF三电平逆变器异步电机速度控制
1、内容简介 略 Matlab 167-基于SVPWM的VF三电平逆变器异步电机速度控制 可以交流、咨询、答疑 2、内容说明 略 3、仿真分析 略 4、参考论文 略...
Android Dagger2 框架依赖图构建模块深度剖析(三)
一、引言 在 Android 开发中,依赖注入(Dependency Injection,简称 DI)是一种重要的设计模式,它能够降低代码的耦合度,提高代码的可测试性和可维护性。Dagger 2 作为一款高效的依赖注入框架,在编…...
(一)微服务初见之 Spring Cloud 介绍
微服务架构简介 从单体应用架构发展到SOA架构,再到微服务架构,应用架构经历了多年的不断演进。微服务架构不是凭空产生的,而是技术发展的必然结果,分布式云平台的应用环境使得微服务代替单体应用成为互联网大型系统的架构选择。目…...
python--面试题--基础题
join() 和 split() 函数 join() 函数可以将指定的字符添加到字符串中。 a[my, name, shi, wzngz] print(..join(a)) 输出结果:my.name.shi.wzngz split() 函数可以用指定的字符分割字符串 a"my name shi wzngz " print(a.split()) 输出结果ÿ…...
架构思维:软件建模与架构设计的关键要点
文章目录 1. 软件建模的核心概念2. 七种常用UML图及其应用场景类图时序图组件图部署图用例图状态图活动图 3. 软件设计文档的三阶段结构4. 架构设计的关键实践1. 用例图:核心功能模块2. 部署图:架构演进阶段3. 技术挑战与解决方案4. 关键架构图示例5. 架…...
【RNN神经网络】序列模型与RNN神经网络
前言 清库存。正式切入大模型后,打算把基础知识都梳理一遍,然后写了两篇就发现写不动了,后面就捡重要的记录。RNN知识仅此一篇记录,扫盲记录。 【自然语言处理】 (Natural Language Processing,NLP…...
Python文件管理
目录 一、文本文件读写 1、相关函数 2、读写文件 3、使用readline读取一行 4、读写文件的异常处理 5、添加内容 二、文本文件的编码 1、常见的编码 2、Python程序的编码 3、指定编码 三、文件的路径 1、相对路径 2、绝对路径 3、路径的改变 四、文件夹操作 五、…...
vue3 前端路由权限控制与字典数据缓存实践(附Demo)
目录 前言1. 基本知识2. Demo3. 实战 前言 🤟 找工作,来万码优才:👉 #小程序://万码优才/r6rqmzDaXpYkJZF 从实战中出发: 1. 基本知识 Vue3 和 Java 通信时如何进行字典数据管理 需要了解字典数据的结构。通常&#x…...
基于javaweb的SpringBoot精美物流管理系统设计与实现(源码+文档+部署讲解)
技术范围:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论…...
【极光 Orbit·STC8x】05. GPIO库函数驱动LED流动
【极光 OrbitSTC8】05. GPIO库函数驱动LED流动 七律 逐光流转 八灯列阵若星河,状态为舟渡长波。 寄存器中藏玄机,Switch语句定山河。 循环往复如潮涌,步骤变量掌沉浮。 单片机前展锋芒,代码织就光之舞。 摘要 本文基于STC8H8K6…...
DeepSeek进阶应用(二):结合Kimi制作PPT(双AI协作教程)
🌟引言: DeepSeek作为国产AI大模型,以强大的逻辑推理和结构化内容生成能力著称,擅长根据用户需求生成PPT大纲或Markdown文本;Kimi的PPT助手则能解析结构化内容并套用模板快速生成美观的PPT,两者结合实现“内…...
【Aioredis实战总结】Aioredis简介
一、Aioredis简介 Aioredis 是一个基于Python asyncio框架的异步Redis客户端库,专为高并发场景设计。它允许开发者在不阻塞主线程的情况下执行Redis操作,显著提升I/O密集型任务(如Web应用的缓存、实时消息队列等)的性能。自4.2.0…...
SpringBoot——Maven篇
Spring Boot 是一个用于快速开发基于 Spring 框架的应用程序的工具。它具有许多特性,其中一些重要的特性包括: 1. 自动配置:Spring Boot 提供了自动配置的机制,可以根据应用程序的依赖和环境自动配置应用程序的各种组件ÿ…...
Python中的多态与Java、C#、C++中的多态的区别有哪些?
Python中的多态与Java、C#、C等静态类型语言的主要区别体现在以下几个方面: 1. 类型系统与多态实现方式 Python(动态类型,鸭子类型) 多态基于对象的行为(方法的存在性),而非继承或接口。只要对…...
卷积神经网络(知识点)
一、为了使特征图变小: 由两种方法:1.增大步长:卷积的时候不是一次一步,而是一次多步,类似一张图片,在原来的像素基础上,每隔一个取一个像素点。 其中S就是步长 注意:扩大步长不经…...
Vision Transformer (ViT):将Transformer带入计算机视觉的革命性尝试(代码实现)
Vision Transformer (ViT):将Transformer带入计算机视觉的革命性尝试 作为一名深度学习研究者,如果你对自然语言处理(NLP)领域的Transformer架构了如指掌,那么你一定不会对它在序列建模中的强大能力感到陌生。然而&am…...
特殊 IP 地址
文章目录 特殊IP地址概述受限广播地址(Limited Broadcast Address)直接广播地址(Directed Broadcast Address)多播地址(Multicast Address)环回地址(Loopback Address)本网络本主机&…...
数学——A. K-divisible Sum + D. Exam in MAC
A. K-divisible Sum 题目: 思路: 以下 “[xxx]” 符号均代表向上取整 我们假设总和是sum,那么就有sum k * cnt 要想最大值最小,肯定是要让sum尽可能小,这样每个元素都能变小 最小情况是 sum 恰好等于 n 时&#…...
30天学习Java第五天——数组 字符串
数组 一维数组 定义 int[] anArray;int anOtherArray[];初始化int anOtherArray[] new int[] {1, 2, 3, 4, 5}; 访问 anArray[0] 10;可变数组:void varargsMethod(String... varargs) {} 该方法可以接收任意数量的字符串参数,可以是 0 个或者 N 个…...
【DeepSeek应用】本地部署deepseek模型后,如何在vscode中调用该模型进行代码撰写,检视和优化?
若已成功在本地部署了 DeepSeek 模型(例如通过 vscode-llm、ollama 或私有 API 服务),在 VS Code 中调用本地模型进行代码撰写、检视和优化的完整流程如下: 1. 准备工作:确认本地模型服务状态 模型服务类型: 若使用 HTTP API 服务(如 FastAPI/Flask 封装),假设服务地址…...
2025年【广东省安全员C证第四批(专职安全生产管理人员)】考试及广东省安全员C证第四批(专职安全生产管理人员)模拟试题
安全生产是各行各业不可忽视的重要环节,特别是在广东省这样的经济大省,安全生产的重要性更是不言而喻。为了确保安全生产管理人员具备足够的专业知识和实际操作能力,广东省定期举办安全员C证考试。本文将详细介绍2025年广东省安全员C证第四批…...
网络编程、URI和URL的区别、TCP/IP协议、IP和端口、URLConnection
DAY12.1 Java核心基础 网络编程 在互联网时代,网络在生活中处处可见,javaWeb占据了很大一部分 那如何实现javaWeb编程呢? Web编程就是运行在同一个网络下面的终端,使得它们之间可以进行数据传输 计算机网络基本知识 计算机网络…...
JAVA面试_进阶部分_Java JVM:垃圾回收(GC 在什么时候,对什么东西,做了什么事情)
在什么时候: 首先需要知道,GC又分为minor GC 和 Full GC(major GC)。Java堆内存分为新生代和老年代,新生代 中又分为1个eden区和两个Survior区域。 一般情况下,新创建的对象都会被分配到eden区ÿ…...
自探索大语言模型微调(一)
一、数据 1.1、失败案例 Hugging Face: 根据B站上搜索到的资料,datasets这个库可以直接下载丰富的数据集合和与训练模型,调用也非常的简单,唯一的缺点就是,需要外网(翻墙),用国内的…...
Unity 和 Python 的连接(通过SocketIO)附源码
在游戏或者项目开发中,Unity 通常用于创建前端,而 Python 则因其强大的数据处理能力常被用作后端。通过 Socket.IO,我们可以轻松地实现 Unity 和 Python 的实时通信。本文将介绍如何通过 Socket.IO 连接 Unity 和 Python,并附上完…...
89.HarmonyOS NEXT 应用安全与隐私保护指南:构建安全可靠的应用
温馨提示:本篇博客的详细代码已发布到 git : https://gitcode.com/nutpi/HarmonyosNext 可以下载运行哦! HarmonyOS NEXT 应用安全与隐私保护指南:构建安全可靠的应用 文章目录 HarmonyOS NEXT 应用安全与隐私保护指南:构建安全可…...

