通过微调 Embedding 优化 RAG

大型语言模型 (LLM) 向用户和组织展示了巨大的潜力;它们的强大功能和生成能力使它们最近广受欢迎并被广泛接受。LLM 面临的一些缺点是无法以上下文感知的方式生成或响应用户给出的提示,听起来非常通用和开放,或者有时响应的信息已经过时。如果正确实施,检索增强生成 (RAG) 已被用于解决这一挑战。

RAG(检索增强生成)最近已成为利用公开可用的 LLM 的最流行方式之一。RAG 提高了 LLM 生成的响应质量,这就是为什么许多组织在其软件系统中实施 LLM 时采用 RAG 的原因。

对能够构建高度优化的 RAG 系统以满足组织需求的专业人员的需求日益增长。根据 Grandview 的研究,去年(2023 年)RAG 市场规模估计为 10.427 亿美元;有预测称,从 2024 年到 2030 年,该领域的复合年增长率将达到 44.7%,这是由于自然语言处理 (NLP) 领域的快速发展以及对智能 AI 系统的需求。

RAG 实施的另一面是 RAG 优化;这是通过使信息检索更准确来提高 RAG 系统性能的过程,从而提高整体性能。在本教程的后面部分,您将学习几种实现此目的的技术。

阅读本文的先决条件

要完全理解这篇技术文章,您应该熟悉 LLM 及其工作原理。您还应该熟悉 Python 编程,因为本文的代码、片段和实现都是用 Python 编写的。

了解 RAG 及其组件

RAG 只是通过引用训练数据之外的外部权威知识库来优化 LLM 生成的输出信息。此权威知识库是包含特定于特定组织或领域的数据的附加信息。

LLM 通常接受大量数据的训练,这使它们能够执行语言翻译和生成问题答案等任务。

RAG 利用 LLM 的生成功能来生成自定义、机构和特定领域的响应。因此,RAG 为公开可用的 LLM 添加了额外的功能。这节省了从头开始构建自定义 LLM 以实现预期目的(例如,为企业构建聊天机器人)所需的大量时间和财务影响。

让我带您了解 RAG 系统的高级工作流程:

  1. 用户从前端界面发出提示

  2. 然后,RAG 模型确保根据收到的提示从权威知识库中检索到正确的信息

  3. 现在,从权威知识库检索到的信息用于由 LLM 生成响应,并发送回客户端

这样,您就会看到提示不会直接进入 LLM,就像没有 RAG 实现那样。尽管如此,仍会从权威知识库中检索与提示语义同步的信息。现在,LLM 的生成功能用于生成用户可以看到、理解和欣赏的响应。

RAG 加上 LLM 等于魔法。

RAG 的应用

由于其对自然语言处理领域的价值和影响,RAG 已在不同行业和用例中得到广泛采用和适用。甚至非技术人员也开始将 RAG 系统集成到他们的业务中,以提高生产力。

RAG 的一些应用范围从内容创建和摘要到对话代理和聊天机器人。功能性 RAG 系统通常由三个组件组成,它们是:

  1. 检索组件

  2. 增强组件

  3. 生成组件

检索组件

此组件处理从外部权威知识库检索相关信息。它确保检索到的信息或段落与给出的提示最密切相关。可以使用多种机制,包括基于关键字的搜索、语义相似性搜索和基于神经网络的检索方法。

可以根据适合项目的方案实施其中任何一种。

以下代码片段显示了如何在 RAG 系统中从外部知识库进行检索。

import faiss  # This handles similarity search
import numpy as np
from transformers import AutoTokenizer, AutoModel
import torch
 
# A pre-trained embedding model (e.g., BERT) is loaded
model_name = "sentence-transformers/all-MiniLM-L6-v2"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModel.from_pretrained(model_name)
 
# Function to encode text into embeddings
def text_to_embedding(text):
    inputs = tokenizer(text, return_tensors="pt", truncation=True, padding=True)
    with torch.no_grad():
        embeddings = model(**inputs).last_hidden_state.mean(dim=1)  # Mean pooling
    return embeddings.cpu().numpy()
 
# Sample document corpus also known as the
# authoritative knowledge base, in this example it is for a # bakery shop
documents = [
    "We are open for 6 days of the week, on Monday, Tuesday, Wednesday, Thursday, Friday, Saturday",
    "The RAG system uses a retrieval component to fetch information.",
"We are located in Lagos, our address is 456 computer Lekki-Epe Express way.",
"Our CEO is Mr Austin, his phone number is 09090909090"]
 
# Encode documents and store in FAISS index
dimension = 384  # Set embedding dimension based on #the model used
index = faiss.IndexFlatL2(dimension)  # Create FAISS index
 
# Create document embeddings and add to FAISS index
doc_embeddings = np.vstack([embed_text(doc) for doc in documents])
index.add(doc_embeddings)
 
# Query Given it by a user
query = "Where is the location of your business?"
query_embedding = embed_text(query)
 
# Retrieve top 2 documents based on similarity
top_k = 2
_, indices = index.search(query_embedding, top_k)
retrieved_docs = [documents[idx] for idx in indices[0]]
 
print("Your Query:", query)
print("Retrieved Documents:", retrieved_docs)

上面的代码片段为您提供了实用的信息,并让您更详细地了解 RAG 检索过程的内部工作原理。

发生了三件大事:

  1. 嵌入创建:文档或权威知识库以及传递给它的查询被嵌入。不要太担心“嵌入”的新概念;您将在本文的后面部分详细了解它

  2. 使用 FAISS 进行索引:嵌入的文档存储在 FAISS 索引中,从而实现快速相似性搜索

  3. 检索:根据余弦相似度检索与用户传递的查询最相似的前 k 个文档

增强组件

检索过程成功完成后,增强过程会为检索到的信息添加更多与用户传递的提示相关的上下文含义,使其更加流畅。

生成组件

生成过程确保基于增强信息生成自然语言。它允许人类理解检索到的信息,这可以通过使用 GPT-4、GPT-5、BERTH 等预先训练的 LLM 来实现。

下面的代码片段提供了一个完整的 RAG 管道,展示了使用 Pytorch 的 RAG 系统的检索、增强和生成过程。

from sentence_transformers import SentenceTransformer
from transformers import T5ForConditionalGeneration, T5Tokenizer
import faiss
import torch

# Load Sentence Transformer model for embeddings (using PyTorch)
embed_model = SentenceTransformer('all-MiniLM-L6-v2')

# Sample documents for retrieval
documents = [
    "We are open for 6 days of the week, on Monday, Tuesday, Wednesday,            Thursday, Friday, Saturday",
    "The RAG system uses a retrieval component to fetch information.",
"We are located in Lagos, our address is 456 computer Lekki-Epe Express way.",
"Our CEO is Mr. Austin, his phone number is 09090909090"
]

# Embed the documents
doc_embeddings = embed_model.encode(documents)

# Use FAISS for fast similarity search
dimension = doc_embeddings.shape[1]
index = faiss.IndexFlatL2(dimension)
index.add(doc_embeddings)

# Load T5 model and tokenizer for the generation component
tokenizer = T5Tokenizer.from_pretrained("t5-small")
model = T5ForConditionalGeneration.from_pretrained("t5-small")

# Define a query
query = "How does a RAG system work in machine learning?"

# Retrieve top-k relevant documents
query_embedding = embed_model.encode([query])
top_k = 2
_, indices = index.search(query_embedding, top_k)
retrieved_docs = [documents[idx] for idx in indices[0]]

# Concatenate retrieved docs to augment the query
augmented_query = query + " " + " ".join(retrieved_docs)
print("Augmented Query:", augmented_query)

# Prepare input for T5 model
input_text = f"answer_question: {augmented_query}"
input_ids = tokenizer.encode(input_text, return_tensors="pt")

# Generate answer using T5
with torch.no_grad():
    output = model.generate(input_ids, max_length=50, num_beams=5, early_stopping=True)
answer = tokenizer.decode(output[0], skip_special_tokens=True)

print("Generated Answer:", answer)

什么是 RAG 嵌入

RAG 中的嵌入是文本的密集向量表示;这与将单词表示为高维稀疏向量的独热编码不同;嵌入将这些信息压缩为低维和连续向量,捕获单词之间的语义关系,使模型理解上下文。

因此,嵌入基本上涉及将文本转换为能够理解语义关系的低维向量表示。

您在 RAG 系统中嵌入了什么?您正在嵌入用户传递的提示和要检索的自定义文档/权威领域特定知识。这样做是为了让信息检索在语义上与传递的提示一致。

下一步是在开发 RAG 系统并选择 LLM(例如 GPT-4)时选择检索模型。一些流行的模型是 DPR(密集段落检索器)、Sentence-BERT 和 RoBERTa;这些模型为您处理嵌入。之后,您的自定义文档将被处理和集成以供检索。

因此,您发送提示。检索模型嵌入提示,捕获上下文和语义关系。它从嵌入式数据库中检索最相关的信息。它将其传递给 LLM,LLM 利用其生成能力生成与检索到的数据一致的文本。

优化 RAG 中嵌入的必要性

在 RAG 系统中,嵌入优化在确保从知识源或权威库检索到的信息/数据的质量和相关性方面起着至关重要的作用,就像之前讨论嵌入是什么时所解释的那样;传递给模型的提示被转换为嵌入,这些嵌入在从权威知识库检索之前捕获用户提示的语义含义。

如果嵌入得到适当优化,它们可以通过检索与用户提示非常接近的正确信息来提高模型的整体性能。这就是为什么嵌入优化对 RAG 系统至关重要。

此外,根据 RAG 系统的实现,会使用预先训练的嵌入模型。一些常用的嵌入模型是:

  • DPR(密集段落检索器)

  • Sentence-BERT

  • RoBERTa

  • infloat/e5-large-v2

这些预先训练的嵌入模型可以为您处理嵌入(它们将您的提示转换为嵌入或数字表示),但这需要权衡;由于它们是在大型通用数据集中训练的,因此它们可能无法完全理解自定义或域应用程序。这就是为什么您必须微调或优化嵌入模型的原因。

在 RAG 中嵌入调优的技术

有多种方法可以实现嵌入调整;下面是一些实现嵌入调整的流行技术;

1. 通过适应领域

专门针对特定领域或主题进行调整的嵌入可以产生很大的不同。例如,在相关数据上训练嵌入可以使 RAG 模型在法律或医疗保健等领域更加精确,因为这些领域的语言具有独特的术语和细微差别。这样,当用户提问时,他们会得到与上下文产生共鸣的答案。

2. 使用对比学习

将对比学习视为帮助模型“磨练”相似和不相似的内容。通过教导模型将相关的查询和答案更紧密地分组在一起(并将不相关的查询和答案分开),您可以让模型更容易返回对所提问题有意义的结果。

3. 添加来自真实数据的信号

添加一些监督数据(如用户反馈或标记示例)可以使嵌入更接近人们的期望。这有助于引导模型找到重要的模式,例如识别哪些响应往往会达到目标,哪些不会。模型从真实用户交互中学习得越多,它就越能提供有用的响应。

4. 自监督学习

自监督学习是处理标记数据较少的情况的绝佳选择。此方法在数据本身中发现模式,这有助于为模型构建基础,而无需进行太多手动标记。它非常适合需要保持灵活性的通用 RAG 系统。

5. 结合嵌入以获得更丰富的响应

有时,混合多个嵌入会产生奇效。例如,将通用嵌入与针对特定领域进行微调的嵌入相结合可以创建一个全面的模型,该模型可以理解一般和小众问题。如果您要处理广泛的主题,这种方法尤其有用。

6. 保持嵌入平衡

正则化技术(如 dropout 或 triplet loss)可帮助模型避免“卡”在某些单词或想法上,使其理解范围足够广泛,以处理不同的查询。这可确保模型的响应范围不会太窄,从而有助于其保持对新问题或意外问题的灵活性。

7. 用硬否定挑战模型

硬否定足够接近,但仍然不正确。在训练中添加这些可以鼓励模型完善其理解,尤其是在处理细微差异时。这就像给它所需的心理重复,以便更好地在几乎正确的选项中找到正确答案。

8. 使用反馈循环进行持续改进

通过主动学习,您可以设置一个反馈循环,其中将不确定或具有挑战性的答案标记为人工审核。这些评论反馈到模型中,以随着时间的推移不断提高其准确性,这对于不断发展或具有许多复杂细微差别的领域非常有用。

9. 通过跨编码器调优进行更深入的研究

对于更细微的查询(尤其是需要问题和答案紧密匹配的查询),跨编码器方法可以提供帮助。跨编码器直接评估查询和文档对,因此模型会将它们一起“读取”,而不是将它们视为单独的实体。这通常会在精确匹配是关键的领域带来更深入的理解。

通过这种方式对嵌入进行微调,RAG 模型可以提供更自然、更切题的响应。简而言之,就是要让 AI 成为更好的倾听者和响应者,为用户提供切中要害的答案。

评估 RAG 嵌入质量的方法

评估 RAG 系统嵌入的质量至关重要,因为它可以作为一个指标,表明它是否可以检索相关且上下文正确的数据,无论是否经过优化。

下面列出了用于评估 RAG 中嵌入质量的方法:

  • 余弦相似度和最近邻评估:此方法计算查询嵌入与其相关文档之间的余弦相似度

  • 平均倒数排名 (MRR) 和平均准确率 (MAP):在此方法中,当给出查询时,检索到的文档将根据相关性进行排名,并计算 MRR 或 MAP 分数

  • 嵌入聚类和可视化:这涉及使用 t-SNE 或 UMAP 等技术将嵌入投影到 2D 或 3D 空间中,以可视化查询和文档如何聚类在一起的相似性

  • 人工判断和反馈循环:这涉及使用人工根据提示评估检索到的信息的质量并提供反馈以进行可能的改进

  • 特定领域的评估指标:此方法可确保嵌入有效地针对特定领域的细微差别,因为这会对应用于此类专业学科的 RAG 系统的性能产生负面影响

嵌入 RAG 调优的挑战

尽管嵌入调整会对 RAG 系统的性能产生巨大影响,但有时实施起来非常具有挑战性。它不是直接的,有时需要迭代才能达到所需的性能。

其中一些挑战包括:

  • 成本:训练和微调嵌入的计算成本,尤其是在处理大型数据集时

  • 过拟合:模型可能对训练数据过于熟悉。如果向其传递除精确训练数据之外的提示,则无法检索正确的信息

  • 难以获得高质量数据:由于模型严重依赖于用于训练的数据,如果没有使用有关特定领域或细分市场的足够高质量和准确的数据来训练模型,则模型可能会出现偏差且性能不佳

  • 管理领域趋势的变化:由于大多数领域的动态性质,总是有新的更新和进步,因此必须经常重新训练模型以避免过时,而这并不容易跟上

写在最后的话

在开发需要高精度的系统时,RAG 优化至关重要,因为用于开发 RAG 系统的嵌入模型主要用于通用应用程序。嵌入调整对于提高 RAG 系统的检索精度以获得更好的性能是必要的。

在开发 RAG 模型时实施上述任何一种检索技术后,正确的做法是测试新开发的 RAG 模型的性能,以了解它对传递给它的某些提示的响应程度;如果它表现得非常好;满足您的期望和要求,那对您来说很好,您在开发 RAG 系统方面做得很好。如果在向它传递某些提示时它没有给您所需的响应,请不要担心;您仍然可以通过进一步优化和微调来提高模型的性能。谢谢阅读。

如何学习AI大模型?

大模型时代,火爆出圈的LLM大模型让程序员们开始重新评估自己的本领。 “AI会取代那些行业?”“谁的饭碗又将不保了?”等问题热议不断。

不如成为「掌握AI工具的技术人」,毕竟AI时代,谁先尝试,谁就能占得先机!

想正式转到一些新兴的 AI 行业,不仅需要系统的学习AI大模型。同时也要跟已有的技能结合,辅助编程提效,或上手实操应用,增加自己的职场竞争力。

但是LLM相关的内容很多,现在网上的老课程老教材关于LLM又太少。所以现在小白入门就只能靠自学,学习成本和门槛很高

那么针对所有自学遇到困难的同学们,我帮大家系统梳理大模型学习脉络,将这份 LLM大模型资料 分享出来:包括LLM大模型书籍、640套大模型行业报告、LLM大模型学习视频、LLM大模型学习路线、开源大模型学习教程等, 😝有需要的小伙伴,可以 扫描下方二维码领取🆓↓↓↓

👉[CSDN大礼包🎁:全网最全《LLM大模型入门+进阶学习资源包》免费分享(安全链接,放心点击)]()👈

学习路线

在这里插入图片描述

第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;

第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;

第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;

第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;

第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;

第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;

第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。

在这里插入图片描述

👉学会后的收获:👈

• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。

在这里插入图片描述

1.AI大模型学习路线图
2.100套AI大模型商业化落地方案
3.100集大模型视频教程
4.200本大模型PDF书籍
5.LLM面试题合集
6.AI产品经理资源合集

👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

微信小程序生成二维码

目前是在开发小程序端 --> 微信小程序。然后接到需求:根据 form 表单填写内容生成二维码(第一版:表单目前需要客户进行自己输入,然后点击生成按钮实时生成二维码,不需要向后端请求,不存如数据库&#xf…

用接地气的例子趣谈 WWDC 24 全新的 Swift Testing 入门(二)

概述 从 WWDC 24 开始,苹果推出了全新的测试机制:Swift Testing。利用它我们可以大幅度简化之前“老态龙钟”的 XCTest 编码范式,并且使得单元测试更加灵动自由,更符合 Swift 语言的优雅品味。 在这里我们会和大家一起初涉并领略…

Python的自然语言生成与对话系统介绍

1. 背景介绍 自然语言生成(Natural Language Generation,NLG)和对话系统是人工智能领域的重要研究方向。NLG 涉及将计算机理解的信息转换为自然语言文本,而对话系统则涉及计算机与用户之间的自然语言交互。Python 作为一种易于学习、易于使用的编程语言…

HarmonyOS NEXT 应用开发实战(十、从零设计一款个人中心页面详细示例)

随着HarmonyOS的不断发展,越来越多的开发者开始关注这个平台上的应用开发。本篇文章将详细讲解如何从零开始设计一款个人中心页,并在代码中实现其相关功能。 1. 项目结构设计 首先,我们需要设计一个合理的项目结构。我们将个人中心页面分为几…

Node.js 入门指南:从零开始构建全栈应用

​🌈个人主页:前端青山 🔥系列专栏:node.js篇 🔖人终将被年少不可得之物困其一生 依旧青山,本期给大家带来node.js篇专栏内容:node.js-入门指南:从零开始构建全栈应用 前言 大家好,我是青山。作…

我们来学mysql -- 连接(原理版)

我们来学mysql -- 连接 题记两张表驱动表 题记 回到初学者的视角,navicat或命令窗口,呈现一行行数据,类比为excel工作薄更是深入人心通过join将多表的记录关联起来,这似乎也没啥问题只是好像是那么回事,又…似乎有想说…

ssm校园二手交易管理系统+vue

系统包含:源码论文 所用技术:SpringBootVueSSMMybatisMysql 免费提供给大家参考或者学习,获取源码看文章最下面 需要定制看文章最下面 目 录 1 绪论 1 1.1 选题背景 1 1.2 选题意义 1 1.3 研究内容 2 2 系统开发技术 3 2.1 MySQL数…

2024年前三季度币安、OKX等五大交易所上币表现分析

随着加密市场竞争的加剧,头部交易所逐渐在上币策略、代币选择、交易活跃度等方面采取了不同的应对策略。Animoca Digital Research近期发布的一份报告,通过对币安、OKX、Bitget、KuCoin和Bybit五大交易所2024年前三季度的上币情况进行了详细分析。本文将…

Nature文章《deep learning》文章翻译

这篇文章是对Nature上《deep learning》文章的翻译。原作者 Yann LeCun, Yoshua Bengio& Geoffrey Hinton。 这篇文章的中心思想是深入探讨深度学习在机器学习中的革命性贡献,重点介绍其在特征学习、监督学习、无监督学习等方面的突破,并阐述其在图…

使用 RabbitMQ 有什么好处?

大家好,我是锋哥。今天分享关于【使用 RabbitMQ 有什么好处?】面试题。希望对大家有帮助; 使用 RabbitMQ 有什么好处? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 RabbitMQ 是一种流行的开源消息代理,广…

Scrapy链接MongoDB数据库

本文章是在Scrapy入门-CSDN博客的基础上改写的代码。 1.声明采集目标 打开mySpider/mySpider1/items.py文件,修改MyspiderItem类为AIspiderItem: class AIspiderItem(scrapy.Item): title scrapy.Field() url scrapy.Field() date scrapy.Field() 2…

Qt项目实战:红绿灯小程序

目录 一.初始化对象 二.捕获并处理特定的事件 三.自定义绘制方法 四.绘制外部边框 五.绘制内部边框 六.绘制按钮的背景色 七.绘制覆盖层(高光效果) 八.效果 九.代码 1.h 2.cpp 一.初始化对象 1.设置文本、颜色、边框和背景色等默认值。 2.安…

ReactPress 是什么?

ReactPress Github项目地址:https://github.com/fecommunity/reactpress 欢迎Star。 ReactPress 是什么? ReactPress 是使用React开发的开源发布平台,用户可以在支持React和MySQL数据库的服务器上架设属于自己的博客、网站。也可以把 ReactP…

萤石私有化设备视频平台EasyCVR视频融合平台如何构建农业综合监控监管系统?

现代农业的迅速发展中,集成监控管理系统已成为提高农业生产效率和优化管理的关键工具。萤石私有化设备视频平台EasyCVR,作为一个具有高度可扩展性、灵活的视频处理能力和便捷的部署方式的视频监控解决方案,为农业监控系统的建设提供了坚实的技…

PG数据库 jsonb字段 模糊查询

背景: 项目由于多语言的设计,将字段设置成json字段类型,同时存储中文和英文 页面上通过输入框实现模糊的查询 一、表结构:name字段设置jsonb类型 二、表数据 3、Mybatis编写sql select pp.name ->>zh-CN as pmsProductNam…

Chrome 插件怎么安装与下载?超详细

原文链接: https://www.chajianxw.com/tutorial/how-to-install-chrome-plugin.html 前言 国内因为无法访问 Chrome 应用商店的缘故,导致很多优秀的扩展程序无法正常下载与安装。本文将手把手教你如何通过离线安装Chrome 插件,全文图文讲解…

【软服之家-注册安全分析报告-无验证方式导致安全隐患】

前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 1. 暴力破解密码,造成用户信息泄露 2. 短信盗刷的安全问题,影响业务及导致用户投诉 3. 带来经济损失,尤其是后付费客户,风险巨大,造…

深入解析:人工智能与机器学习

💓 博客主页:瑕疵的CSDN主页 📝 Gitee主页:瑕疵的gitee主页 ⏩ 文章专栏:《热点资讯》 深入解析:人工智能与机器学习 深入解析:人工智能与机器学习 深入解析:人工智能与机器学习 人…

React 组件生命周期与 Hooks 简明指南

文章目录 一、类组件的生命周期方法1. 挂载阶段2. 更新阶段3. 卸载阶段 二、函数组件中的 Hooks1. useState2. useEffect3. useContext4. useReducer 结论 好的,我们来详细讲解一下 React 类组件的生命周期方法和函数组件中的钩子(hooks)。 …

MySQL约束管理

介绍 MySQL约束管理是指在MySQL数据库中定义和管理数据约束的过程。数据约束用于维护数据的完整性和一致性,确保数据在表中的存储符合特定的规则。通过约束,可以防止不符合要求的数据被插入或更新,从而保护数据库的质量。 约束管理的主要内…