嘿,大家好!作为一名技术宅,我在2024年与AI的大型语言模型(LLM)技术有了不少“亲密接触”,感觉就像是和一位日益聪明的老友并肩前行。
这一年,LLM真的让我大开眼界。从Gemini 1.5 Pro到Claude 3系列,这些名字已经不再只是冰冷的代码,它们更像是我的工作伙伴,每一次升级都带来满满的惊喜。它们不仅文字处理游刃有余,连图像、音频、视频这些“跨界”任务也玩得风生水起,让我这个老技术人员都自愧不如。LLM就像是无所不在的助手,为我们的生活带来了实实在在的便利。有时候,我甚至觉得它们比我自己还更懂我。
当然,和LLM的“相处”也不是一帆风顺的。随着它们越来越聪明,推理效率和成本问题也逐渐浮出水面。这就像是我们人类的大脑,虽然聪明,但也需要足够的休息和营养。于是,我开始研究新的算法和训练策略,希望能让LLM们“吃得少、跑得快”。
今天还是按照要求做一个技术向总结,希望下述内容对大家有所帮助!
大型语言模型展示了强大的能力,但也面临着幻觉、过时知识和不透明推理等挑战。检索增强生成(RAG)通过整合外部数据库的知识,提高了生成内容的准确性和可信度。RAG 将大型语言模型的内在知识与外部数据库融合,为知识密集型任务带来了前景。
大语言模型挑战 | RAG 技术解决方案 |
---|---|
虚构信息 | 通过整合外部数据库的知识,提升生成的准确性和可信度 |
过时知识 | 允许持续知识更新和集成领域特定信息 |
非透明推理 | RAG 将 LLMs 固有的知识与外部数据库庞大、动态的知识库有机结合,提高透明度和可追溯性 |
在大语言模型的优化方法中,RAG 经常与 Fine-tuning(FT)和提示工程相比较。 我们用象限图从外部知识需求和模型适配需求两个维度来说明三种方法的差异。
有人提出过这个疑问,为什么要用 RAG 来做增强,而不选择比较容易想到的微调来做,这里提及了 RAG 的优势以及和微调的差异,在这里列出两者的对比,主要是为了让大家在进行问题定位和解决方案思考时能参考,权衡好什么时候该用哪些部分。
| RAG | 微调 (Fine-tuning) |
---|---|---|
知识更新 | 直接更新检索知识库,确保信息持续更新,无需频繁重新训练,非常适合动态变化的数据环境。 | 存储静态数据,需要重新训练用于知识和数据的更新。 |
外部知识 | 擅长利用外部资源,特别适合处理文档或其他结构化 / 非结构化数据库。 | 可用于将预训练中外部学习到的知识与大语言模型保持一致,但对于频繁变化的数据源可能不太实用。 |
数据处理 | 对数据的处理和操作要求极低。 | 依赖于构建高质量的数据集,有限的数据集可能无法显著提高性能。 |
模型定制 | 侧重于信息检索和融合外部知识,但可能无法充分定制模型行为或写作风格。 | 允许根据特定风格或术语调整 LLM 行为、写作风格或特定领域知识。 |
可解释性 | 答案能够追溯到具体的数据来源,提供更高的可解释性和可追踪性。 | 就像一个黑盒子,并不总是清楚模型为什么会做出某种反应,可解释性相对较低。 |
计算资源 | 需要计算资源来支持检索策略和数据库相关技术。外部数据源的整合和更新需保持维护。 | 有必要准备和整理高质量的训练数据集,确定微调目标,并提供相应的计算资源。 |
延迟要求 | 因涉及数据检索,可能带来较高的延迟。 | 经过微调的大语言模型 (LLM) 可以不通过检索直接回应,降低延迟。 |
降低幻觉 | 由于每个回答都基于检索到的实际证据,因此本质上更不容易产生错误或虚构的回答。 | 根据特定领域的数据训练模型,有助于减少幻觉,但面对未训练过的输入时仍可能出现幻觉。 |
伦理和隐私问题 | 从外部数据库存储和检索文本可能引起伦理和隐私方面的担忧。 | 训练数据中的敏感内容可能会引起伦理和隐私方面的问题。 |
RAG 研究范式在不断发展和演进,我们将其分为三个阶段:初级 RAG、高级 RAG 和模块化 RAG。虽然早期的 RAG 在成本效益上表现良好,并且性能优于传统的大语言模型 (LLM),但它仍面临着诸多挑战。高级 RAG 和模块化 RAG 的设计是为了解决原始 RAG (Naive RAG) 的特定不足。下面是三种开发范式解释和相应用组件部分示意图
根据检索器如何增强生成器,我们将 RAG 基础范式分为 4 个不同类别:
RAG 流程中不可或缺的核心技术,主要是 “检索”、“生成” 和“增强”三个部分,通过整理一个脑图,简述下这些技术间如何错综复杂地协作以形成一个有凝聚力且有效的 RAG 框架。
RAG 增强是整体体系的重点,从多个角度我整理了下增强 RAG 性能的方法。 从整个 RAG 流程角度,我们根据现有方法的增强目标将其分为 5 个不同的组:输入、检索器、生成器、结果和整个管道。单从 RAG 检索一个点来看,检索增强可以包含迭代、递归 & 自适应三个方法。
除了最常见的一次检索之外,RAG 还包括三种类型的检索增强过程。
根据现有方法的增强目标将其分为 5 个不同的部分:输入、检索器、生成器、结果和整个管道。针对这些部分有针对性的相应增强方式和方法。
RAG 在 NLP 领域的快速发展和广泛采用,将 RAG 模型的评估推向了大语言模型界研究的前沿。 将 RAG 技术引进到大模型应用场景,我们需要了解和优化 RAG 模型在不同应用场景下的性能。下面简要讲讲 RAG 的主要下游任务、数据集以及如何评估 RAG 系统。
RAG 的核心任务仍然是问答(QA),包括传统的单跳 / 多跳 QA、多选、特定领域的 QA 以及适合 RAG 的长格式场景。 除了 QA 之外,RAG 正在不断扩展到多个下游任务,例如信息提取(IE)、对话生成、代码搜索等。 RAG 的主要下游任务及其相应的数据集总结在表:
任务 | 子任务 | 数据集 |
---|---|---|
问答 | Single-hop | Natural Question(NQ)/TrivaQA(TQA)/SQuAD/Web Questions(WebQ)/PopQA/MS MARCO |
| Multi-hop | HotpotQA/2WikiMultiHopQA/MuSiQue |
| Long-form QA | ELI5/NarrativeQA(MQA)/ASQA/QMSum(QM) |
| Domain QA | Qasper/COVID-QA/CMB/MMCU_Medical |
| Multi-Choice QA | QuALITY/ARC/CommonsenseQA |
| Graph QA | GraphQA |
对话 | Dialog Gentration | Wizard of Wikipedia(WoW) |
| Personal Dialog | KBP/DuleMon |
| Task-oriented Dialog | CamRest |
| Recommmendation | Amazon(Toys, Sport, Beauty) |
信息抽取 | Event Argument Extraction | WikeEvent/RAMS |
| Relation Extraction | T-REx, ZsRE |
推理 | Commonsense Reasoning | HellaSwag |
| CoT Reasoning | CoT Reasoning |
| Complex Reasoning | CSQA |
其它 | Language Understanding | MMLU |
| Language Modeling | WikiText-103/StrategyQA |
| Fact Checking/Verification | FEVER/PubHealth |
| Text Gentration | Biography |
| Text Summarization | WikiASP/XSum |
| Text Classification | VioLens/TREC |
| Sentiment | SST-2 |
| Code Search | CodeSearchNet |
| Robustness Evaluation | NoMIRACL |
| Math | GSM8K |
| Machine Translation | JRC-Acquis |
RAG 模型的当代评估实践强调三个主要质量分数和四个基本能力,它们共同指导 RAG 模型的两个主要目标的评估:检索和生成。其中* 质量分数:上下文相关性,答案忠实性,答案相关性* 基本能力:噪声鲁棒性,否定拒绝,信息集成,反事实稳健性适用于 RAG 评估方面的指标摘要,分别对应质量分数和基本能力对应的度量标准,如下表所示:
| 上下文相关性 | 答案忠诚性 | 回答相关性 | 噪音鲁棒性 | 否定拒绝 | 信息整合 | 反事实稳健性 |
---|---|---|---|---|---|---|---|
Accuracy | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
EM | | | | | ✓ | | |
Recall | ✓ | | | | | | |
Precision | ✓ | | | ✓ | | | |
R-Rate | | | | | | | ✓ |
Cosine Similarity | | | ✓ | | | | |
Hit Rate | ✓ | | | | | | |
MRR | ✓ | | | | | | |
NDCG | ✓ | | | | | | |
BLEU | ✓ | ✓ | ✓ | | | | |
ROUGE/ROUGE-L | ✓ | ✓ | ✓ | | | | |
业界提出了一系列基准测试和工具来促进 RAG 的评估。这些工具提供的定量指标不仅可以衡量 RAG 模型的性能,还可以增强对模型在各个评估方面的能力的理解。 RGB、RECALL 和 CRUD 等著名基准,专注于评估 RAG 模型的基本能力。 同时,最先进的自动化工具如 RAGAS、ARES 和 TruLens 雇用大语言模型来判定质量分数。 这些工具和基准共同构成了用于系统评估 RAG 模型的强大框架,如表所示:
评估框架 | 评估目标 | 评估方面 | 定量指标 |
---|---|---|---|
RGB† | 检索质量 生成质量 | 噪声鲁棒性否定性拒绝 信息集成 反事实鲁棒性 | AccuracyEM AccuracyAccuracy |
RECALL† | 生成质量 | 反事实鲁棒性 | R-Rate (再出现率) |
RAGAS‡ | 检索质量 生成质量 | 上下文相关性 答案忠诚性答案相关性 | *余弦相似度 |
ARES‡ | 检索质量生成质量 | 上下文相关性 答案忠诚性答案相关性 | Accuracy AccuracyAccuracy |
TruLens‡ | 检索质量生成质量 | 上下文相关性 答案忠诚性 答案相关性 | * |
CRUD† | 检索质量生成质量 | 创意生成 知识密集型 QA 纠错 总结 | BLEUROUGE-L BertScore RAGQuestEval |
† 代表基准,‡ 代表工具。* 表示自定义量化指标,偏离传统指标。鼓励读者根据需要查阅相关文献,了解与这些指标相关的具体量化公式。
下面是基于前面 RAG 各部分的一个生态全景图,包含了 RAG 的下游任务、RAG 范式,RAG 评估、RAG 的核心技术,RAG 的展望等。
GraphRAG、Naive RAG框架总结主流框架推荐(共23个):LightRAG、nano-GraphRAG、Fast-GraphRAG、Dify、RAGflow等
设想你正致力于构建一个智能问答系统,该系统旨在从庞大的知识库中迅速而精确地提取关键信息,并据此生成自然流畅的回答。然而,随着数据规模的不断扩大,系统面临着严峻的挑战:检索效率逐渐下滑,生成内容的质量亦趋于下降。这正是当前众多检索增强型生成(RAG)系统亟需解决的核心问题——如何在数据冗余、检索效率低下以及生成内容不相关之间找到一个最佳的平衡点。
RAG 的发展瓶颈:
传统 RAG 系统通过检索模型提取最相关的文档,再交给生成模型处理。但这种流水线式的设计存在两个主要问题:
论文
:LightRAG: Simple and Fast Retrieval-Augmented Generation https://arxiv.org/abs/2410.05779v1Github 地址
:https://github.com/HKUDS/LightRAGLightRAG在信息之间保持关系,能产生更优质的答案,同时其计算效率也更高。与之前的RAG模型相比,LightRAG引入了多项创新功能:
图增强文本索引
:通过将图结构纳入文本索引,LightRAG能够建立相关实体之间的复杂关系,从而提升系统的上下文理解能力。双层检索系统
:LightRAG采用双层检索机制,能够同时处理低层(具体细节)和高层(抽象概念)的查询。例如,它不仅可以回答“谁写了《傲慢与偏见》?”这样具体的问题,也能应对“人工智能如何影响现代教育?”这样抽象的问题。增量更新算法
:该模型使用增量更新算法,以便在不重建整个数据索引的情况下,快速整合最新信息。这种方法能够选择性地索引新或修改过的内容,尤其适用于动态环境,比如新闻或实时分析,数据变化频繁的场景。LightRAG的轻量化特性使其能够快速处理大规模知识库并生成文本,减少了计算成本,适合更多开发者和小型企业使用。
LightRAG的架构主要分为两个部分:基于图的文本索引和双层检索。其工作流程可以总结如下:
图形文本索引
:将原始文本文件分割成小块,便于高效检索。知识图谱构建
:利用大语言模型(LLM)进行实体和关系的提取,并生成文本的键值对(K, V)。信息检索
:通过生成的键值对进行检索,包括: 详细层面
:关注于文档的具体小部分,允许精确的信息检索。抽象层面
:关注整体意义,帮助理解不同部分之间的广泛连接。通过这两种检索方式,LightRAG能够在小文档部分中找到相关信息,并理解不同文档之间的更大、相互关联的概念。
关键词提取,LightRAG 中有 Prompts 示例:
示例 1:
查询:"国际贸易如何影响全球经济稳定?"
################
输出:
Output:
{{
"high_level_keywords": ["国际贸易", "全球经济稳定", "经济影响"],
"low_level_keywords": ["贸易协定", "关税", "货币汇率", "进口", "出口"]
}}
LightRAG的评估成效显著,其在检索精确度、模型可调性、响应速度以及接纳新信息的能力等多个维度上,均展现出了超越其他同类RAG模型,如NaiveRAG、RQ-RAG、HyDE以及微软研发的GraphRAG的优势。通过具体的案例研究分析,我们发现,尽管GraphRAG凭借其基于图的知识应用,在文档检索与文本生成方面表现不俗,但其运行所需资源更为庞大,进而导致了更高的成本投入。
第三方基于 Streamlit 实现了一版开源的 LightRAG GUI,代码地址:https://github.com/aiproductguy/lightrag-gui/blob/demo2/notebooks/streamlit-app-lightrag.py
智胜未来:国内大模型+Agent应用案例精选,以及主流Agent框架开源项目推荐
AI Agent框架(LLM Agent):LLM驱动的智能体如何引领行业变革,应用探索与未来展望
未来已来:LLMops如何重塑AI-native新范式的运维格局[行业范式]、以及主流LLMops推荐
从众中取优:开源Agent市场深度调研,近20款主流开源Agent框架的技术亮点与适用场景深度剖析[Multi-Agent 框架详解]
AI Agent技术的最新进展与改变世界的典型项目巡礼【含AI Agent框架项目介绍】
AI Agent【项目实战】:MetaGPT遇上元编程,重塑复杂多智能体协作的边界
超越单兵作战:多智能体 Multi-Agent System (MAS)—多智能体框架实战
RAG+AI工作流+Agent:LLM框架该如何选择,全面对比MaxKB、Dify、FastGPT、RagFlow、Anything-LLM,以及更多推荐
- `大模型接入灵活性`:提供了多种大模型接入方式,支持多种API接口,使得开发者可以根据需求灵活选择和切换模型,这对于需要高性能模型的应用场景尤为重要。
- `强大的Chat功能`:Chat功能不仅支持多轮对话,还能通过智能推荐和上下文理解提升用户体验,适用于需要复杂交互的场景。
- `丰富的知识库支持`:内置了知识库管理系统,支持多种数据格式的导入和导出,便于用户管理和利用知识资源。
- `高效的Workflow设计`:Workflow设计简洁直观,支持拖拽式操作,使得非技术人员也能快速上手,大大降低了使用门槛。
- `Prompt IDE`:提供的Prompt IDE工具,让开发者可以更直观地调试和优化提示词,提升了开发效率。
- `学习曲线`:虽然界面设计较为友好,但对于初学者来说,仍需要一定时间来熟悉其工作流程和功能。
- `社区支持`:相较于一些成熟的开发平台,社区活跃度和资源丰富度还有待提升,这可能会影响到开发者在遇到问题时的解决速度。
- `定制化程度`:虽然Dify提供了丰富的功能,但在某些高度定制化的需求上,可能还需要进一步的开发和调整。
- `Agent智能体`:Agent智能体功能强大,能够自动执行复杂任务,减少了人工干预的需求,适用于需要自动化处理大量任务的场景。
- `LLMOps支持`:提供了LLMOps支持,使得开发者可以更方便地进行模型训练、优化和部署,这对于AI模型的持续迭代和优化至关重要。
- `后端即服务`:提供了后端即服务的功能,简化了后端开发流程,使得开发者可以更专注于前端和业务逻辑的开发。
- `强大的RAG引擎`:RAG引擎能够高效地处理和检索大量数据,适用于需要快速响应和高吞吐量的应用场景。
- `功能复杂性`:FastGPT的功能较为复杂,对于初学者来说,可能需要较长时间来掌握其使用方法和技巧。
- `部署难度`:相较于一些轻量级的开发平台,FastGPT的部署过程可能更为复杂,需要一定的技术背景和经验。
- `用户界面`:虽然FastGPT的功能强大,但其用户界面可能不如一些竞争对手直观和友好,这可能会影响到用户的使用体验。
选择合适的平台首先要明确自己的需求。Dify和FastGPT各有特点,适用于不同的应用场景。
- 项目规模:如果是小型项目或初创团队,MaxKB/Dify的快速部署和简单易用性可能更适合。如果是大型企业级项目,FastGPT/RagFlow的强大功能和定制化能力更为合适。
- 技术栈:考虑团队现有的技术栈和成员的技术背景。在技术实现上有所不同,选择与团队技术栈匹配的平台可以减少学习成本和开发难度。
- 功能需求:明确项目所需的核心功能,如大模型接入、Chat功能、知识库等。Dify和FastGPT在这些功能上各有优势,根据具体需求进行选择。
社区支持和资源丰富度对于平台的选择也至关重要。
- 社区活跃度:活跃的社区意味着更多的资源和更快的解决问题速度。社区活跃度较高,适合需要快速解决问题的开发者。
- 技术支持:对于企业级用户,专业的技术支持至关重要。提供了专业的技术支持,适合对技术支持有较高要求的用户。
部署和使用的便捷性直接影响开发效率和成本。
- 部署难度:MaxKB/Dify的部署过程简单,适合需要快速部署的开发者。FastGPT/RagFlow的部署相对复杂,但提供了更多的配置选项。
- 使用便捷性:MaxKB/Dify的用户界面友好,操作简单。FastGPT/RagFlow的用户界面相对复杂,但提供了更多的功能和定制化选项。
LLM大模型部署实战指南:Ollama简化流程,OpenLLM灵活部署,LocalAI本地优化
- 训练参数量极小(约 0.1%)。
- 在大部分任务上效果会差于 LoRA、Adapter 等方法。
- 前缀 Token 会占用序列长度,有一定的额外计算开销。
- Prefix Tuning 的线性插值是比较复杂的。
- 对一些简单的 NLU 任务还不错,但对硬序列标记任务(即序列标注)表现欠佳。
- 引入一个 prompt encoder(由一个双向的 LSTM + 两层 MLP 组成)来建模 virtual token 的相互依赖会收敛更快,效果更好。
- 解决了 Prompt Tuning 无法在小模型上有效提升的问题。
- 移除了对模型效果改进较小的重参数化的编码器(如:Prefix Tuning 中的 MLP、P-Tuning 中的 LSTM)。
- 对于一些复杂的硬序列标记任务(即序列标注)取得了不错的效果。
- 通过在 Transformer 层中嵌入 Adapter 结构,在推理时会额外增加推理时长。
一种融合多任务信息的 Adapter 的变体,在 Adapter 的基础上进行优化,通过将学习过程分为两阶段来提升下游任务表现。
- 通过从较低的 Transformer 层删除可变数量的 Adaper 来提升推理速度。 当对多个任务执行推理时,动态地减少了运行时的计算开销,并在很大程度上保持了任务性能。
- 将 BA 加到 W 上可以消除推理延迟。
- 可以通过可插拔的形式切换到不同的任务。
- 设计的比较好,简单且效果好。
对 LoRA 的一种改进,它根据重要性评分动态分配参数预算给权重矩阵,将关键的增量矩阵分配高秩以捕捉更精细和任务特定的信息,而将较不重要的矩阵的秩降低,以防止过拟合并节省计算预算。
- 使用 QLoRA 微调模型,可以显著降低对于显存的要求。同时,模型训练的速度会慢于 LoRA。
- 整体上来说,最终的模型 MAM Adapter 效果会优于单个高效微调方法。
- 相对于 LoRA,BitFit,Prefix-tuning,训练的参数量更大;同时,推理更耗时;并且,输入会占用额外的序列长度。
- 多种 PELT 方法的混合涉及 PLM 的不同部分对模型有效性和鲁棒性都有好处。