大模型RAG从入门到精通(五)RAG中的长上下文管理策略

传统的 大型语言模型 (LLM) 存在上下文长度限制,这限制了单次用户与模型交互中处理的信息量,这是其主要局限性之一。解决这一限制一直是 LLM 开发社区的主要工作方向之一,提高了人们对增加上下文长度在生成更连贯、更准确响应方面优势的认识。例如,2020 年发布的 GPT-3 上下文长度为 2048 个 token,而其更年轻但功能更强大的兄弟 GPT-4 Turbo(诞生于 2023 年)允许在单个提示中处理高达 128K 个 token。毋庸置疑,这相当于能够在一次交互中处理整本书,例如,对其进行总结。

另一方面,检索增强生成 (RAG)会整合来自检索文档(通常是向量数据库)的外部知识,以增强 LLM 输出的上下文和相关性。然而,在 RAG 系统中管理上下文长度仍然是一个挑战,因为在某些需要大量上下文信息的场景中,需要对检索到的信息进行有效的选择和汇总,以使其保持在 LLM 的输入限制以下,同时又不丢失必要的知识。

RAG 中的长上下文管理策略

RAG 系统有多种策略,可以在将初始用户查询传递给 LLM 之前,尽可能多地整合检索到的相关知识,同时又不超出模型的输入限制。以下概述了其中四种策略,从最简单到最复杂。

1. 文档分块

文档分块通常是最简单的策略,它专注于将向量数据库中的文档拆分成更小的块。虽然乍一看可能不太明显,但该策略有助于通过多种方式克服 RAG 系统内 LLM 的上下文长度限制,例如,在保持块内上下文完整性的同时,降低检索冗余信息的风险。

2.选择性检索

选择性检索是指对大量相关文档应用过滤过程,仅检索最相关的部分,从而缩小传递给 LLM 的输入序列的大小。通过智能地过滤检索到的文档中需要保留的部分,其目标是避免包含不相关或无关的信息。

3. 有针对性的检索

虽然与选择性检索类似,但定向检索的本质是带着非常具体的意图或最终响应来检索数据。这是通过针对特定类型的查询或数据源优化检索器机制来实现的,例如,构建专门用于医学文本、新闻文章、最新科学突破等的检索器。简而言之,它构成了一种进化且更专业的选择性检索形式,并在循环中加入了特定领域的标准。

4. 上下文摘要

上下文摘要是 RAG 系统中一种更复杂的上下文长度管理方法,我们在构建最终上下文的过程中应用文本摘要技术。一种可行的方法是使用一个额外的语言模型(通常规模较小,且经过摘要任务训练),用于对检索到的大量文档进行摘要。摘要任务可以是提取式的,也可以是抽象式的。提取式识别并提取相关的文本段落,抽象式从头生成摘要,对原始文本块进行重新表述和精简。此外,一些 RAG 解决方案使用启发式方法来评估文本片段(例如文本块)的相关性,并丢弃相关性较低的文本块。

战略概括
文档分块将文档分成更小、更连贯的块,以保留上下文,同时减少冗余并保持在 LLM 限制内。
选择性检索过滤大量相关文档以仅检索最相关的部分,从而最大限度地减少无关信息。
目标检索使用专门的检索器优化针对特定查询意图的检索,添加特定领域的标准来优化结果。
上下文摘要使用提取或抽象摘要技术来浓缩大量检索到的内容,确保将必要的信息传递给 LLM。

长上下文语言模型

那么长上下文LLM怎么样?这样就够了,不需要RAG了?

这是一个需要解决的重要问题。长上下文LLM(LC-LLM)是“超大型”LLM,能够接受非常长的输入标记序列。尽管研究证据表明LC-LLM的性能通常优于RAG系统,但后者仍然具有独特的优势,尤其是在需要动态实时信息检索和成本效益的场景中。在这些应用中,值得考虑使用封装在采用上述策略的RAG系统中的小型LLM,而不是LC-LLM。它们都不是万能的解决方案,它们都能在各自适用的特定环境中具有优势。

小结

本文介绍并阐述了在 RAG 系统中管理上下文长度的四种策略,以及在此类系统中的 LLM 在单用户交互中可接受的输入长度可能存在限制的情况下处理长上下文的策略。虽然使用所谓的长上下文 LLM 近年来已成为克服此问题的趋势,但在某些情况下,坚持使用 RAG 系统可能仍然是值得的,尤其是在需要实时更新上下文的动态信息检索场景中。


如何系统学习掌握AI大模型?

AI大模型作为人工智能领域的重要技术突破,正成为推动各行各业创新和转型的关键力量。抓住AI大模型的风口,掌握AI大模型的知识和技能将变得越来越重要。

学习AI大模型是一个系统的过程,需要从基础开始,逐步深入到更高级的技术。

这里给大家精心整理了一份全面的AI大模型学习资源,包括:AI大模型全套学习路线图(从入门到实战)、精品AI大模型学习书籍手册、视频教程、实战学习、面试题等,资料免费分享

1. 成长路线图&学习规划

要学习一门新的技术,作为新手一定要先学习成长路线图方向不对,努力白费

这里,我们为新手和想要进一步提升的专业人士准备了一份详细的学习成长路线图和规划。可以说是最科学最系统的学习成长路线。

在这里插入图片描述

2. 大模型经典PDF书籍

书籍和学习文档资料是学习大模型过程中必不可少的,我们精选了一系列深入探讨大模型技术的书籍和学习文档,它们由领域内的顶尖专家撰写,内容全面、深入、详尽,为你学习大模型提供坚实的理论基础(书籍含电子版PDF)

在这里插入图片描述

3. 大模型视频教程

对于很多自学或者没有基础的同学来说,书籍这些纯文字类的学习教材会觉得比较晦涩难以理解,因此,我们提供了丰富的大模型视频教程,以动态、形象的方式展示技术概念,帮助你更快、更轻松地掌握核心知识

在这里插入图片描述

4. 2024行业报告

行业分析主要包括对不同行业的现状、趋势、问题、机会等进行系统地调研和评估,以了解哪些行业更适合引入大模型的技术和应用,以及在哪些方面可以发挥大模型的优势。

在这里插入图片描述

5. 大模型项目实战

学以致用 ,当你的理论知识积累到一定程度,就需要通过项目实战,在实际操作中检验和巩固你所学到的知识,同时为你找工作和职业发展打下坚实的基础。

在这里插入图片描述

6. 大模型面试题

面试不仅是技术的较量,更需要充分的准备。

在你已经掌握了大模型技术之后,就需要开始准备面试,我们将提供精心整理的大模型面试题库,涵盖当前面试中可能遇到的各种技术问题,让你在面试中游刃有余。

在这里插入图片描述

全套的AI大模型学习资源已经整理打包,有需要的小伙伴可以微信扫描下方优快云官方认证二维码,免费领取【保证100%免费

<think>好的,我需要帮助用户在AutoDL平台上使用RAG调整DeepSeek模型。首先,我需要理解用户的问题。RAG是检索增强生成,结合了信息检索和语言模型,用于生成更准确的输出。用户想在AutoDL平台上调整DeepSeek模型,可能是指微调或应用RAG到该模型上。 首先,我应该回顾RAG的基本原理。RAG通常包括一个检索器和一个生成器。检索器从外部知识库中获取相关文档,生成器则基于检索到的内容和输入生成响应。调整DeepSeek模型可能涉及将它与检索系统结合,或者对现有RAG框架进行微调。 接下来,考虑AutoDL平台的特点。AutoDL可能提供预装的环境和框架,用户需要配置环境和依赖。用户可能需要安装必要的库,比如Hugging Face的Transformers、FAISS用于向量检索,或者LangChain等工具。 然后,步骤可能包括: 1. 准备环境:安装Python、PyTorch、相关库。 2. 准备数据:收集或整理需要的外部知识库,处理成适合检索的格式,如分块、向量化。 3. 配置检索系统:使用FAISS或相似库建立索引。 4. 加载DeepSeek模型:通过Hugging Face的接口加载预训练模型。 5. 集成RAG:将检索器和生成器结合,可能需要修改模型的输入,使其能够处理检索到的上下文。 6. 微调模型:如果需要进行端到端的微调,需准备训练数据,定义损失函数,调整参数。 7. 部署应用:在AutoDL上部署调整后的模型,可能涉及API服务或Web应用。 还需要考虑AutoDL的具体操作,比如如何创建实例、上传数据、安装依赖、运行训练脚本等。可能用户需要指导如何编写代码,调用DeepSeek模型,整合检索模块。例如,使用Hugging Face的Pipeline,或者自定义模型类。 另外,引用相关的资料。根据用户提供的引用,DB-GPT支持多种模型,包括DeepSeek,可能可以利用DB-GPT的框架来简化流程。引用[^3]提到DB-GPT是AI原生数据应用开发框架,支持自动化微调,这可能对用户有帮助。用户可能需要利用DB-GPT的RAG功能,或者参考其文档来实现。 可能的挑战包括环境配置问题、数据处理的复杂性、模型与检索系统的有效整合。需要给出具体的代码示例,比如如何加载模型,建立检索器,以及如何将两者结合。同时,要注意AutoDL平台的资源限制,如GPU内存,可能需要调整批次大小或模型量化。 最后,生成相关问题,帮助用户深入理解,比如如何优化检索效率、处理数据预处理、评估RAG性能等。</think>以下是在AutoDL平台上使用RAG调整DeepSeek模型的分步指南: --- ### **步骤1:准备AutoDL环境** 1. **创建实例** - 在AutoDL控制台选择GPU实例(建议显存≥24GB),预装PyTorch 2.0+、CUDA 11.7+环境。 - 推荐镜像:`PyTorch 2.0.0 + Python 3.9(ubuntu22.04)` 2. **安装依赖库** ```bash pip install transformers faiss-cpu langchain datasets sentence-transformers # 若需GPU加速检索,安装faiss-gpu替代faiss-cpu ``` --- ### **步骤2:构建RAG流程** #### **2.1 准备知识库** - 将外部文档(如PDF/TXT)分块并向量化: ```python from langchain.text_splitter import RecursiveCharacterTextSplitter from sentence_transformers import SentenceTransformer text_splitter = RecursiveCharacterTextSplitter(chunk_size=512, chunk_overlap=50) documents = text_splitter.split_text(your_text_data) encoder = SentenceTransformer("paraphrase-multilingual-MiniLM-L12-v2") embeddings = encoder.encode(documents) ``` #### **2.2 建立检索索引** - 使用FAISS存储向量: ```python import faiss index = faiss.IndexFlatIP(embeddings.shape[1]) index.add(embeddings) ``` --- ### **步骤3:集成DeepSeek模型** #### **3.1 加载预训练模型** ```python from transformers import AutoTokenizer, AutoModelForCausalLM model_name = "deepseek-ai/deepseek-llm-7b-base" tokenizer = AutoTokenizer.from_pretrained(model_name) model = AutoModelForCausalLM.from_pretrained(model_name, torch_dtype="auto") ``` #### **3.2 实现RAG生成逻辑** ```python def rag_generate(query, top_k=3): # 检索相关文本 query_embedding = encoder.encode([query]) scores, indices = index.search(query_embedding, top_k) contexts = [documents[i] for i in indices[0]] # 组合检索内容与问题 input_text = f"问题:{query}\n参考内容:{' '.join(contexts)}\n回答:" # 生成回答 inputs = tokenizer(input_text, return_tensors="pt").to(model.device) outputs = model.generate(**inputs, max_new_tokens=200) return tokenizer.decode(outputs[0], skip_special_tokens=True) ``` --- ### **步骤4:微调优化(可选)** 若需端到端微调RAG系统: 1. 准备QA格式数据集,格式为`{"question": ..., "context": ..., "answer": ...}` 2. 定义联合训练目标(检索损失 + 生成损失)[^2] 3. 使用DB-GPT框架自动化微调流程(引用[^1][^3]): ```bash # 克隆DB-GPT仓库 git clone https://github.com/eosphoros-ai/DB-GPT # 配置deepseek.yaml定义模型路径与数据 python pilot/scripts/rag_finetune.py --config deepseek.yaml ``` --- ### **步骤5:部署API服务** 使用FastAPI暴露接口: ```python from fastapi import FastAPI app = FastAPI() @app.post("/ask") def ask(query: str): return {"answer": rag_generate(query)} ``` 启动服务: ```bash uvicorn app:app --host 0.0.0.0 --port 8000 ``` --- ### **关键注意事项** 1. **显存管理** - 若显存不足,启用模型量化: ```python model = AutoModelForCausalLM.from_pretrained(..., device_map="auto", load_in_4bit=True) ``` 2. **检索优化** - 使用HNSW算法加速FAISS检索: ```python index = faiss.IndexHNSWFlat(embeddings.shape[1], 32) ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值