RAG-LLM Survey

大模型虽然厉害,但是存在着幻觉、知识陈旧等问题。检索增强生成(Retrieval-Augmented Generation, RAG)可以通过挂载外部知识库,来提升生成内容的准确性和可信度。了解一个研究方向的最快的方法,就是阅读相关的综述。今天要阅读的论文是同济大学发表的综述 Retrieval-Augmented Generation for Large Language Models: A Survey

论文的主要贡献如下:

  • 回顾了RAG的发展,阐述了初级RAG、高级 RAG和模块化RAG 等方法。
  • 讨论了RAG的三个核心方法:检索 (Retrieval)、生成 (Generation)、增强 (Augmentation),探讨了三者如何协同作用,组成高效的RAG系统。
  • 总结了当前 RAG 的评估方法,包括26个任务和将近50个数据集。

AI 总结

  • 引言
    • 背景与挑战:大语言模型(LLMs)在特定任务中存在局限性,如产生幻觉、知识过时等,Retrieval - Augmented Generation(RAG)通过从外部数据库引入知识来增强LLMs,以解决这些问题。
    • 研究现状:RAG技术发展迅速,但缺乏系统的综合分析,本文旨在填补这一空白,对RAG的范式、核心技术、下游任务、评估方法以及未来挑战和发展方向进行全面综述。
  • RAG概述
    • 典型应用:以ChatGPT回答关于近期新闻的问题为例,说明RAG通过从外部数据库获取相关知识并结合原问题生成回答的过程。
    • 研究范式:分为Naive RAG、Advanced RAG和Modular RAG三个阶段,Naive RAG包括索引、检索和生成三个传统步骤,但存在检索和生成方面的挑战;Advanced RAG通过预检索和后检索策略改进检索质量;Modular RAG具有更高的适应性和灵活性,引入了新的模块和模式。
    • 与微调对比:RAG与微调(FT)和提示工程在外部知识需求和模型适应需求方面存在差异,RAG在动态环境中表现出色,而FT在模型行为和风格的定制化方面更具优势,两者并非相互排斥,可以互补。
  • 检索(Retrieval)
    • 检索源:包括文本、半结构化数据(如PDF)、结构化数据(如知识图谱KG)以及LLMs生成的内容。检索粒度从细到粗包括Token、Phrase、Sentence、Proposition、Chunks、Document等,在知识图谱上包括Entity、Triplet和sub - Graph等。
    • 索引优化:包括Chunking Strategy(分块策略)、Metadata Attachments(元数据附加)和Structural Index(结构索引)等方法。
    • 查询优化:包括Query Expansion(查询扩展)、Query Transformation(查询转换)和Query Routing(查询路由)等。
    • 嵌入:使用稀疏编码器(BM25)和密集检索器(基于BERT架构的预训练语言模型)等计算问题和文档块嵌入之间的相似度(如余弦相似度),还包括混合/混合检索和微调嵌入模型等方法。
    • 适配器:通过外部适配器来优化LLM的多任务能力,如UPRISE训练的轻量级提示检索器、AAR引入的通用适配器、PRCA添加的可插拔奖励驱动的上下文适配器以及BGM训练的桥接模型等。
  • 生成(Generation)
    • 上下文优化:包括Reranking(重新排序)和Context Selection/Compression(上下文选择/压缩)等方法,以减少冗余信息对LLM最终生成的干扰。
    • LLM微调:根据场景和数据特征对LLMs进行有针对性的微调,可以提供额外知识、调整模型输入输出,并通过强化学习使LLM输出与人类或检索器偏好对齐,还可以与检索器的微调协同进行。
  • RAG中的增强过程
    • 迭代检索:基于初始查询和生成的文本反复搜索知识库,为LLMs提供更全面的知识库,但可能受到语义不连续性和无关信息积累的影响。
    • 递归检索:用于信息检索和NLP中以提高搜索结果的深度和相关性,通过反馈循环逐渐收敛到最相关的信息,常用于处理复杂搜索场景和多跳检索。
    • 自适应检索:由Flare和Self - RAG等方法体现,使LLMs能够主动确定最佳的检索时刻和内容,提高信息获取的效率和相关性,例如WebGPT通过强化学习训练GPT - 3自主使用搜索引擎。
  • 任务与评估
    • 下游任务:核心任务是问答(QA),包括传统单跳/多跳QA、多选题、特定领域QA以及长格式场景等,还包括信息提取(IE)、对话生成、代码搜索等。
    • 评估目标:包括检索质量和生成质量的评估,使用搜索引擎、推荐系统和信息检索系统的标准指标来衡量RAG检索模块的性能,对生成内容的评估包括无标签和有标签内容。
    • 评估方面:强调三个主要质量分数(上下文相关性、答案忠实性、答案相关性)和四个基本能力(噪声鲁棒性、负面拒绝、信息整合、反事实鲁棒性)。
    • 评估基准和工具:包括RGB、RECALL、CRUD等基准测试和RAGAS、ARES、TruLens等自动化工具,用于评估RAG模型的性能和能力。
  • 讨论与未来展望
    • RAG与长上下文:当LLMs能够处理超过200,000个令牌的上下文时,RAG仍具有不可替代的作用,一方面提供大量上下文会影响推理速度,而RAG的分块检索和按需输入可提高效率,另一方面RAG能帮助验证答案且过程可观察,未来将在超长上下文背景下发展新的RAG方法。
    • RAG鲁棒性:检索过程中的噪声或矛盾信息会影响RAG输出质量,需要发展专门策略来整合检索与语言生成模型,提高RAG的抗干扰能力。
    • 混合方法:结合RAG与微调是一个重要趋势,包括确定最佳的整合方式以及引入具有特定功能的小语言模型,如CRAG训练的轻量级检索评估器。
    • 扩展定律:关于RAG模型的扩展定律仍不确定,需要进一步研究,目前RAG模型的参数数量仍落后于LLMs。
    • 生产就绪RAG:RAG在实际应用中需要提高检索效率、文档召回率和数据安全性,RAG生态系统在不断发展,不同的技术方向包括定制化、简化和专业化。
    • 多模态RAG:RAG已扩展到多模态领域,包括图像(如RA - CM3、BLIP - 2、“Visualize Before You Write”方法)、音频和视频(如GSS方法、UEOP、KNN - based attention fusion、Vid2Seq)、代码(如RBPS、CoK方法)等。
  • 结论
    • RAG通过整合语言模型的参数化知识和外部知识库的非参数化数据,显著增强了LLMs的能力,展示了其在多种任务上的应用和技术演进。
    • 尽管RAG技术取得了进展,但在鲁棒性和处理扩展上下文方面仍存在研究机会,其应用范围正在向多模态领域扩展,吸引了学术界和工业界的关注。
    • RAG生态系统不断发展,需要完善评估方法以适应其发展,确保准确评估其对AI研究和发展社区的贡献。

AI总结还挺好,感觉比我自己总结的都好。

RAG 概述

RAG主要流程包括三个步骤:

  1. 索引 (Indexing)。文档被切分为块,转换为向量形式,并存储在一个向量数据库中。
  2. 检索 (Retrieval)。根据语义相似度,检索出与问题最相关的前k个块。
  3. 生成 (Generation)。将原始问题与检索到的块一同输入大型语言模型(LLM),以生成最终答案。
    在这里插入图片描述

论文介绍了初级、高级、模块化三种RAG方法。
在这里插入图片描述

初级 RAG (Naive RAG)

初级 RAG 是最简单的RAG系统,包括索引 (Indexing)、检索 (Retrieval) 和生成 (Generation) 三个过程。

  • 索引。 构建索引时会对多种格式(如PDF、HTML、Word和Markdown)的原始数据进行清洗和提取,这些数据随后被转换成统一的纯文本格式。为了适应语言模型在处理文本时的上下文限制,文本被分割成更小、更易处理的片段(chunks)。这些片段接下来通过嵌入模型转换为向量表示形式,并存储在向量数据库中。
  • 检索。 当接收到用户查询时,RAG系统使用在索引阶段相同的编码模型将查询转化为向量表示。接着,它计算查询向量与索引语料库中各块向量之间的相似度分数。系统优先选取并检索出与查询向量最为相似的前K个块。这些块随后作为扩展上下文融入到生成提示中,以便提供更多相关的信息以生成回答。
  • 生成。 用户提出的问题和检索到的文档片段组合成提示,大型语言模型将根据这个提示来制定响应。
    初级 RAG 有明显的缺点。
  • 检索问题。检索的召回度和精准度可能不够。
  • 生成问题。当检索的内容不足以回答问题时,模型会生成幻觉或者有害回答。
  • 增强问题。模型整合检索的信息,生成的回答可能会存在逻辑问题、不连贯或者重复内容。

高级 RAG (Advanced RAG)

高级 RAG 主要通过对检索做前后处理来提高模型生成效果。
检索前处理有:

  • 索引结构优化,包括增强数据粒度、优化索引结构、添加元数据、对齐优化以及混合检索等。
  • 查询优化,包括查询重写、查询变化、查询扩展。
    检索后处理有:
  • 重排 (Reranking),将检索到的信息重新排序,把最相关的内容调整到提示信息的前端。LlamaIndex、LangChain 、HayStack 都已采用
  • 上下文压缩,将直接检索的文档信息进行压缩,把关键信息送入大模型。

模块化 RAG (Modular RAG)

模块化 RAG 不再拘泥于传统的流水行形式,整个系统更加灵活,可以根据需要采用不同的模块和模式。
新的模块可分为:

  • 搜索 (Search). 搜索不同类型的数据,包括搜索引擎、数据库、知识图谱等。
  • 融合 (Fusion). 融合不同渠道搜索的信息。
  • 记忆 (Memory). 记忆模块利用LLM的内存来引导信息检索,从而创建一个无界限的记忆池。
  • 路由 (Routing). 针对不同的查询,选择最优的解决路径。
  • 预测 (Predict). 减少生成的冗余。
  • 任务适配器 (Task Adapter).
    新的模式:
  • Retrieval-Read
  • Rewrite-Retrieve-Read
  • Generate-Read
  • Demonstrate-Search-Predict
  • Iterative Retrieve-Read-Retrieve-Read
  • FLARE
  • Self-RAG

检索

检索数据源

数据结构:

  • 非结构化数据。文本,常用于开放领域的问答任务,常见的数据有Wikipedia Dump, DPR,以及各类百科知识。
  • 半结构化数据。通常是包含文本和表格的数据,比如PDF。处理处理这类数据目前面临两个问题,首先文本分割过程中可能会把表格分开。其次,将表格融入数据中会使得语义相似性搜索变得复杂。解决办法一种是用 Text-2-SQL 查询表格数据,一种是将表格转换为文本,但是两种方法效果都不理想。
  • 结构化数据。类似知识图谱类的数据,可以提供非常精确的信息。
  • 大模型生成的内容。使用大模型生成的知识。

检索的粒度: 文本的粒度有 Token (词元)、Phrase (短语)、Sentence (句子)、Proposition (命题)、Chunks (块/片段)、Document (文档)。

索引优化

在索引阶段,文档将被处理、分段,并转换为Embeddings,然后存储在向量数据库中。索引构建的质量决定了在检索阶段能否获取到正确的上下文。

1) 分块策略 (Chunking Strategy). 最常见的方法是将文档按照固定的token数量(例如,100、256、512)分割成块。大块能容纳更多上下文,但也伴随更多噪声;小块上下文信息有限,但噪声少。分块会导致句子割裂,有许多研究尝试用递归和滑窗的方式来解决这个问题,典型的方法如 Small2big.
2)元数据附件 (Metadata Attachments). 在文本块 chunk 中增加页面、文件名、作者和时间戳等信息,检索的时候利用元数据信息来限制检索信息。除去文档本身的信息,也可以利用大模型人为增加元数据。例如,添加段落总结,利用大模型生成与chunk相关的问题,在检索的时候便可以通过比对问题的相似度来定位文本块。这种方法成为 Reverse HyDE.
3)结构索引 (Structural Index). 分层结构索引和知识图谱索引。分层结构索引将文件以父子结构进行排列,有助于提高检索速度,适当减少幻觉。

查询优化

用户查询的原始查询词可能比较简单,直接使用,得到的检索结果可能不太好,因此如何优化检索词也是非常重要的工作。
1)查询扩展 (Query Expansion)

  • Multi-Query. 利用提示词让大模型把单一的检索扩展为多个。
  • Sub-Query. 使用 least-to-most 提示方法,将原始问题分解为多个子问题。
  • Chain-of-Verification (CoVe). 使用大模型验证扩展查询的结果,以减少幻觉。
    2)查询转换 (Query Transformation). 基于转换后的查询而不是用户的原始查询来检索块。原始查询并不总是最适合语言模型检索的,因此,我们可以提示语言模型重写查询,或者使用提示工程让语言模型根据原始查询生成一个新的查询用于后续检索。
    3)查询路由 (Query Routing). 基于不同的查询,路由到不同的RAG管线。首先可以从查询中提取关键词或者实体,然后利用关键词和元数据分类,使用不同的RAG管线。

嵌入 Embedding

常用的编码器有稀疏型 BM25, 稠密型BERT, 以及专门为Embedding设计的 AngIE, Voyage, BGE.
1)混合检索。 稀疏和密集嵌入方法捕获不同的相关性特征,并且可以通过利用互补的相关性信息相互受益。
2)微调 Embedding 模型。 在某些专业领域需要对Embedding模型进行微调,以增强模型对专业知识的编码效果。除此之外,还可能需要将对齐检索模型和大语言模型。

适配器 Adapter

微调模型不一定有条件,可以通过引入外部适配器 Adapter 来在特定任务上与大模型进行对齐。

  • UPRISE.训练一个轻量的提示词检索模型,自动从提示词库中检索合适的提示。
  • Augmentation-Adapted Retriver.
  • PRCA
  • BGM

生成

上下文优化

大模型跟人一样,过长的上下文也会使大模型忘记中间的内容,只记得开始和结尾。对检索到的文本块进行重排序、重选择或者压缩,都可以提高生成效果。
1)重排序 Reranking. 重排序的核心是将检索到的文档块按照与问题的相关性重新排序,突出最相关的内容。方法有两种:

  • 基于规则化的方法,指标有多样性、相关性、MMR(Mean Reciprocal Rank,表示第一个相关文档在检索结果列表中出现的位置的倒数的平均值)。
  • 基于模型的方法,Encoder-Decoder 模型BERT,专门的排序模型 Cohere rerank 或 bge - raranker - large,大模型GPT等。
    2)上下文选择和压缩. 过多的上下文会引入噪声,在 RAG 过程中,需要对上下文进行选择和压缩,去除那些不必要的噪声。可用的方法有:
  • (Long) LLMLingua用小参数量语言模型检测并删除不重要的token
  • PRCA 训练一个信息提取模型
  • RECOMP 通过使用对比学习训练一个信息压缩器来采用类似的方法
  • 用大模型过滤不太相关的文档,减少文档数量

微调LLM

特定场景可以微调模型,向模型主语专业领域的知识。微调可以更好的控制输入和输出,尤其是在检索结构化数据。通过强化学习,可以使大模型与人类检索偏好对齐。

RAG中的增强过程

普通的RAG是检索一次便开始生成答案,但对于一些复杂问题,一次检索生成可能无法生成令人满意的答案。多次检索的方法有迭代检索、递归检索、自适应检索。

在这里插入图片描述

迭代检索 Iterative Retrieval

在迭代检索中,系统首先根据初始查询在知识库中进行搜索,获取一些相关的信息。然后,根据这些信息生成相应的文本。接下来,系统会再次根据初始查询以及之前生成的文本,在知识库中进行更深入的搜索,以获取更多相关的知识。这个过程会不断重复,每次搜索都会基于之前的结果进行优化和改进,从而提供更全面、更准确的知识。

递归检索 Recursive Retrieval

递归检索通过一个反馈循环,逐渐收敛到最相关的信息,从而增强搜索体验。递归检索通过不断地根据之前搜索的结果来调整和优化搜索查询,使得搜索能够更加精准地找到最相关的信息。

自适应检索 Adaptive Retrieval

自适应检索方法,利用大型语言模型,确定检索的最佳时刻和内容,从而完善了检索增强生成(RAG)框架,提高了所获取信息的效率和相关性。研究方法有:

  • AutoGPT
  • ToolFormer
  • Graph-ToolFomer
  • WebGPT
  • Self-RAG

任务与评估

下游任务

RAG的核心任务仍然是问答(QA),包括传统的单跳/多跳问答、多项选择、特定领域的问答以及适合RAG的长文本场景。除了问答,RAG还不断扩展到多个下游任务,如信息提取(IE)、对话生成、代码搜索等。
在这里插入图片描述

评估

RAG评估指标的重点是如何衡量其在不同任务的效果。问题任务评估指标有 EM (完全匹配)和F1分数,回答质量指标有 BLEU 和 ROUGE。评估工具有RALLE. 主要的评估目标有:

  • 检索质量 (Retrieval Quality). 常用指标包括 Hit Rate, MRR, NDCG.
  • 生成质量 (Generation Quality). 无标注内容:真实性、相关性、无害性。有标注内容:准确性。

评估方面

RAG 模型的评估实践强调三个主要的质量分数和四个基本能力,这些共同为 RAG 模型的两个主要目标(检索和生成)的评估提供信息。

  • 质量分数 (Quality Scores)
    • 上下文相关性 (Context Relevance) 评估的是检索到的上下文的精确性和特异性,其目的是确保检索内容的相关性,并降低噪声内容。
    • 答案忠实度 (Answer Faithfulness) 确保生成的答案与检索到的上下文保持一致.
    • 答案相关性 (Answer Relevance) 要求生成的内容与问题直接相关。
  • 基本能力 (Required Abilities)
    • 噪声鲁棒性 (Noise Robustness) 评估模型处理与问题相关但缺乏实质信息的噪声文档的能力。
    • 负面拒绝能力 (Negative Rejection) 当检索到的文档中的知识不足以回答问题时,该指标评估模型是否能够不回答问答题的能力。
    • 信息整合能力 (Information Integration) 评估的是模型从多个文档中综合信息以解决复杂问题的熟练程度.
    • 反事实鲁棒性 (Counterfactual Robustness) 测试的是模型识别并忽略文档中已知不准确信息的能力,即使在被告知可能存在潜在错误信息的情况下。
      在这里插入图片描述

评估基准和工具

在这里插入图片描述
ea469e294581e92.png#pic_center)

总结与展望

RAG系统总结如下论文中的图。
在这里插入图片描述

参考文献

[Retrieval-Augmented Generation for Large Language Models: A Survey](https://arxiv.org/abs/2312.10997

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

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

相关文章

Python数据可视化------动态柱状图

一、基础柱状图 # 基础柱状图 # 导包 from pyecharts.charts import Bar from pyecharts.options import *# 构建柱状图 bar Bar() # 添加数据(列表) x_list ["张三", "李四", "王五", "赵六"] y_list [50,…

你的生产车间有个好“布局”吗?

对于生产车间而言,科学合理的布局设计便是这“成功的一半”。在现代制造环境中,高效的物流动线、合理的设备配置、以及人性化的工作环境,是提升生产效率、保障产品质量的关键。 一个好布局的生产车间需具备以下几个关键特征,以确保…

【ADRC笔记】LESO-Wb

公式推导(bilibili) 一阶ESO 二阶ESO 二阶自抗扰控制器基本原理 选取状态变量 观测器收敛性推导 wo 观测器带宽

数据结构(下)复习

一丶数据结构概述 1.数据结构是一门研究非数值计算的程序设计问题中计算机的数据元素以及它们之间的关系和运算等的学科。 2.基本数据结构,从逻辑上可分为线性结构和非线性结构,大体上可分成表结构、树结构、图结构 和散结构4大类 表结构用于表示结点的…

科普文:百度交易中台之订单系统架构浅析

百度交易中台作为集团移动生态战略的基础设施,面向收银交易与清分结算场景,为赋能业务提供高效交易生态搭建。目前支持百度体系内多个产品线,主要包含:小程序,地图打车,百家号,招财猫&#xff0…

算法题目整合

文章目录 121. 小红的区间翻转142. 两个字符串的最小 ASCII 删除总和143. 最长同值路径139.完美数140. 可爱串141. 好二叉树 121. 小红的区间翻转 小红拿到了两个长度为 n 的数组 a 和 b,她仅可以执行一次以下翻转操作:选择a数组中的一个区间[i, j]&…

企业微信PC版应用跳转到默认浏览器,避坑指南,欢迎补充(Vue项目版)。。。

引子 关于企业微信PC版应用跳转到默认浏览器,我之前写过一篇文章:企业微信PC版应用跳转到默认浏览器,避坑指南,欢迎补充。。。 以前的文章里用的前后端一体的Jsp项目,这次我使用的是前后端分离的Vue项目,…

C语言 通讯录管理 完整代码

这份代码,是我从网上找的。目前是能运行。我正在读。有些不懂的地方,等下再记录下来。 有些地方的命名,还需要重新写一下。 比如: PersonInfo* info &address_book->all_address[address_book->size]; 应该改为: Perso…

使用SpringCloud搭建分布式配置中心

在现代的分布式系统中,配置管理是一个非常重要的组成部分。传统的做法是将配置文件放在每个服务的本地进行配置,这样的做法在规模较小的系统中还能够接受,但是当系统规模逐渐扩大时,配置管理将变得非常困难,容易出错。…

QT--文件操作和文件读写

文件操作和文件读写 QFile 类用于对文件进行操作,它继承自 QIODevice,可以进行读写操作。主要用于打开、关闭、读取、写入和管理文件。 1. 首先要指定文件路径 QFile fn(“文件路径”);也可以通过文件对话框来选择文件getOpenFileName 函数原型 QStr…

【大数据面试题】37 Doris 是怎么保证性能的?

一步一个脚印,一天一道大数据面试题 博主希望能够得到大家的点赞收藏支持!非常感谢 点赞,收藏是情分,不点是本分。祝你身体健康,事事顺心! Doris 是当下大热的 MPP 数据库,下面来聊聊它如何保证…

AGI 之 【Hugging Face】 的【零样本和少样本学习】之一 [构建标记任务] / [ 基线模型 ] 的简单整理

AGI 之 【Hugging Face】 的【零样本和少样本学习】之一 [构建标记任务] / [ 基线模型 ] 的简单整理 目录 AGI 之 【Hugging Face】 的【零样本和少样本学习】之一 [构建标记任务] / [ 基线模型 ] 的简单整理 一、简单介绍 二、零样本学习 (Zero-shot Learning) 和少样本学习…

【博主推荐】HTML5实现简洁的实用的个人网站、个人主页七个页面源码

文章目录 1.设计来源1.1 个人主页界面1.2 关于我界面1.3 我的技能界面1.4 我的经验界面1.5 我的教育界面1.6 我的项目界面1.7 联系我界面 2.效果和源码2.1 动态效果2.2 源代码 源码下载万套模板,程序开发,在线开发,在线沟通 作者:…

ipsec协议簇(详解)

IPSEC协议簇 IPSEC协议簇 --- 基于网络层的,应用密码学的安全通信协议组 IPV6中,IPSEC是要求强制使用的,但是,IPV4中作为可选项使用 IPSEC可以提供的安全服务 机密性 --- 数据加密 完整性 --- 防篡改可用性 数据源鉴别 -- 身份…

长效代理IP如何选用及代理服务分析

在这个数据为王、信息瞬息万变的时代,长效代理IP成为了众多开发者、数据科学家乃至普通网民手中的一把利器。它不仅能帮助我们解决地域管理,还能在保护隐私的同时,确保数据传输的稳定与安全。但面对市面上琳琅满目的代理服务,如何…

IVI(In-Vehicle Infotainment,智能座舱的信息娱乐系统)

IVI能够实现包括三维导航、实时路况、辅助驾驶等在线娱乐功能。 IVI人机交互形式(三板斧):声音、图像、文字 IVI人机交互媒介I(四件套):中控屏幕(显示、触控)、仪表显示、语言、方…

目标检测 | YOLO v1、YOLO v2、YOLO v3与YOLO v3 SPP理论讲解

☀️教程:霹雳吧啦Wz ☀️链接:https://www.bilibili.com/video/BV1yi4y1g7ro?p1&vd_sourcec7e390079ff3e10b79e23fb333bea49d 一、YOLO v1 针对于two-stage目标检测算法普遍存在的运算速度慢的缺点,YOLO创造性的提出了one-stage目标检测…

2024-07-20 Unity插件 Odin Serializer2 —— 序列化教程

文章目录 1 由根对象决定序列化2 实现 Odin 序列化器2.1 继承已有序列化类2.2 自定义序列化类 3 避免 Unity 无限深度警告4 指定序列化秘钥4.1 External String Reference Resolver4.2 External GUID Reference Resolver4.3 External Index Reference Resolver 4 功能与限制4.1…

为什么我不建议用Excel做进销存系统?

进销存管理系统是一个企业中非常关键的部分,它涉及商品的采购、销售和库存管理等复杂流程。虽然EXCEL作为一个办公软件,它的通用性和灵活性使其能够处理这类数据,但实际上,使用它来构建专业的进销存管理系统存在一些明显的局限性。…

haproxy服务介绍

haproxy 搭建使用开启HAProxy的界面UI配置负载均衡配置web代理 HAProxy(High Availability Proxy)是一个高性能的TCP/HTTP负载均衡器和代理服务器,广泛用于提升Web应用的可用性和性能。[官网说明](https://docs.haproxy.org/2.8/intro.html#3…