2025/12/29 19:14:50
网站建设
项目流程
峡江网站建设,文章网站模板,视频娱乐模版网站购买,网站建设需要实现哪些目标文章介绍了RAG系统的6种核心索引策略#xff1a;块索引、子块索引、查询索引、摘要索引、分层索引和混合索引。强调索引与检索是不同概念#xff0c;索引关乎知识表示方式#xff0c;检索关乎模型可见的知识范围。成功RAG系统需根据数据类型和问题选择合适索引策略#xff…文章介绍了RAG系统的6种核心索引策略块索引、子块索引、查询索引、摘要索引、分层索引和混合索引。强调索引与检索是不同概念索引关乎知识表示方式检索关乎模型可见的知识范围。成功RAG系统需根据数据类型和问题选择合适索引策略提高检索精度减少模型幻觉将RAG从检索管道转变为语义推理引擎。精心设计的索引是构建准确、可信RAG系统的关键基础。检索增强生成Retrieval-Augmented Generation, RAG正在改变大型语言模型LLMs利用外部知识的方式。问题在于许多开发者误解了 RAG 的实际作用。他们关注存储在向量数据库中的文档并认为所有的“魔法”始于此、终于此但这完全是错误的。索引和检索根本不是一回事。索引在于你如何选择表示的知识。检索在于模型可以看到哪些部分的知识。一旦你了解到了这个差异整个思路就会很清晰就会明白自己对模型的推理、速度和基础性有多大的控制权。什么是 RAG 索引RAG 索引是检索的基础。它是将原始知识转化为可经由相似性查询搜索的数值数据的过程。这些数值数据被称为嵌入embeddings嵌入捕获的是含义而不仅仅是表面的文本。可以将其视为构建一个可搜索的知识库语义地图。每个知识块、摘要或查询变体都成为地图上的一个点。地图组织得越好当用户提问时你的检索器就能越好地识别出相关的知识。如果你的索引出了问题例如知识块太大、嵌入捕捉到了噪音或者数据的表示没有反映用户的意图那么再好的 LLM 也帮不了你多少。检索的质量始终取决于数据索引的有效性而不是你的机器学习模型有多优秀。为什么它很重要你检索到的内容并不一定是你索引的内容。你的 RAG 系统的力量在于你的索引能否有效地反映含义而非文本。索引明确了你的检索器看待知识的框架。当你将索引策略与你的数据和用户需求相匹配时检索会变得更精确模型将减少幻觉用户将获得准确的补全。一个设计良好的索引能将 RAG 从一个检索管道转变为一个真正的语义推理引擎。真正有效的 RAG 索引策略假设我们有一篇关于 Python 编程的文档文档是一种多功能编程语言广泛应用于数据科学、机器学习和开发。它支持多种编程范式并拥有、和等丰富的库生态系统。现在让我们探讨何时有效地使用每种 RAG 索引策略以及如何为构建高性能检索系统而实现这些策略。1. 块索引Chunk Indexing这是大多数 RAG 管道的起点。你将大型文档拆分成更小的、语义连贯的块并使用某个嵌入模型对每个块进行嵌入。然后这些嵌入被存储在一个向量数据库中。示例代码# 1. Chunk Indexing def chunk_indexing(document, chunk_size100): words document.split() chunks [] current_chunk [] current_len 0 for word in words: current_len len(word) 1# 1 for space current_chunk.append(word) if current_len chunk_size: chunks.append( .join(current_chunk)) current_chunk [] current_len 0 if current_chunk: chunks.append( .join(current_chunk)) chunk_embeddings [embed(chunk) for chunk in chunks] return chunks, chunk_embeddings chunks, chunk_embeddings chunk_indexing(doc_text, chunk_size50) print(Chunks:\n, chunks)核心逻辑是将文档按字数或字符数分割成多个块然后对每个块生成嵌入向量。最佳实践对于短篇文本始终将块保持在200-400 个 Token左右对于长篇技术内容可保持在500-800 个 Token。确保避免在句中或段落中间进行分割使用逻辑性的、语义上的断点以获得更好的分块效果。最好使用20-30% 的重叠窗口以确保在边界处不会丢失上下文。权衡块索引是简单且通用的索引方式。然而更大的块可能会损害检索精度而更小的块可能会分散上下文并用不连贯的片段使 LLM 感到不知所措。2. 子块索引Sub-chunk Indexing子块索引是在块索引基础上进行精炼的一层。在嵌入正常知识块时你会将知识块进一步划分成更小的子块。在进行检索时你将子块与查询进行比较一旦子块匹配你的查询完整的父块就会作为输入传递给 LLM。这种方法有效的原因子块使你能够以一种更精确、更微妙、更准确的方式进行搜索同时保留了你进行推理所需的大上下文。例如你可能有一篇长篇研究文章而该文章中某一部分内容的子块可能就是长段落中某个公式的解释从而提高了精度和可解释性。# 2. Sub-chunk Indexingdef sub_chunk_indexing(chunk, sub_chunk_size25): words chunk.split() sub_chunks [] current_sub_chunk [] current_len 0 for word in words: current_len len(word) 1 current_sub_chunk.append(word) if current_len sub_chunk_size: sub_chunks.append( .join(current_sub_chunk)) current_sub_chunk [] current_len 0 if current_sub_chunk: sub_chunks.append( .join(current_sub_chunk)) return sub_chunks# Sub-chunks for first chunk (as example)sub_chunks sub_chunk_indexing(chunks[0], sub_chunk_size30)sub_embeddings [embed(sub_chunk) for sub_chunk in sub_chunks]print(Sub-chunks:\n, sub_chunks)何时使用对于每个段落中包含多个不同观点的数据集会很有优势例如知识库、教科书、研究文章等会是理想的选择。权衡由于嵌入有所重叠预处理和存储成本略高但它在查询和内容之间的对齐方面有实质性的提升。3. 查询索引Query Indexing在查询索引的情况下原始文本不会被直接嵌入。相反我们会生成针对每个知识块的几个假想问题然后嵌入这些问题文本。这样做部分是为了弥合用户提问方式与文档描述事物方式之间的语义鸿沟。例如如果你的知识块说“LangChain 拥有用于构建 RAG 管道的实用工具”模型会生成类似这样的查询我如何在 LangChain 中构建 RAG 管道LangChain 有哪些用于检索的工具# 3. Query Indexing - generate synthetic queries related to the chunkdef generate_queries(chunk): # Simple synthetic queries for demonstration queries [ What is Python used for?, Which libraries does Python support?, What paradigms does Python support? ] query_embeddings [embed(q) for q in queries] return queries, query_embeddingsqueries, query_embeddings generate_queries(doc_text)print(Synthetic Queries:\n, queries)然后当任何真实用户提出类似问题时检索将直接命中其中一个索引的查询。最佳实践在编写索引查询时建议使用 LLM 为每个知识块生成3-5 个查询。你也可以对所有相似的问题进行去重或聚类以缩小实际索引的规模。何时使用问答系统或大多数用户交互都由自然语言问题驱动的聊天机器人。用户很可能会询问“是什么”、“如何做”或“为什么”等类型查询的搜索体验。权衡虽然合成扩展增加了预处理时间和空间但它为面向用户的系统提供了有意义的检索相关性提升。4. 摘要索引Summary Indexing摘要索引允许你在嵌入之前将资料片段重构成更小的摘要。你将完整的原始内容保留在另一个位置然后在摘要版本上执行检索。这种方法的好处结构化、密集或重复的源材料例如电子表格、政策文件、技术手册通常是直接从原始文本嵌入会捕获噪音的材料。摘要抽象掉了不那么相关的表面细节对于嵌入而言语义上更有意义。例如原始文本说“2020 年至 2025 年的温度读数范围为 22 至 42 摄氏度异常归因于厄尔尼诺现象。” 摘要将是“年度温度趋势2020-2025涉及厄尔尼诺相关的异常现象。” 摘要表示形式将焦点集中在概念上。示例代码# 4. Summary Indexingdef summarize(text): # Simple summary for demonstration (replace with an actual summarizer for real use) ifPythonin text: returnPython: versatile language, used in data science and web development with many libraries. return textsummary summarize(doc_text)summary_embedding embed(summary)print(Summary:, summary)何时使用处理结构化数据表格、CSV、日志文件。技术性或冗长的内容如果使用原始文本嵌入嵌入效果会不佳。权衡如果摘要过于抽象可能会有损失细微差别/事实准确性的风险。对于特定领域尤其是法律、金融等的关键研究应链接到原始文本进行参考。5. 分层索引Hierarchical Indexing分层索引将信息组织成多个不同级别文档、章节、段落、子段落。你分阶段进行检索从广泛的介绍开始逐步缩小到特定的上下文。顶层组件检索相关文档的章节下一层检索在这些检索到的文档章节内的特定上下文的段落或子段落。这意味着什么分层检索可以减少系统中的噪音并且在你需要控制上下文大小时非常有用。当处理大量文档且无法一次性全部拉取时这尤其有用。它还可以提高后续分析的可解释性因为你可以知道是哪个文档的哪个部分促成了最终答案。示例代码# 5. Hierarchical Indexing # Organize document into levels: document - chunks - sub-chunks hierarchical_index { document: doc_text, chunks: chunks, sub_chunks: {chunk: sub_chunk_indexing(chunk) for chunk in chunks} } print(Hierarchical index example:) print(hierarchical_index)最佳实践使用多个嵌入级别或嵌入与关键词搜索的组合。例如最初仅使用 BM25 检索文档然后使用嵌入更精确地检索那些相关的块或组件。何时使用拥有数千份文档的企业级 RAG。从书籍、法律档案或技术 PDF 等长篇来源中检索。权衡由于需要多个检索级别复杂性增加。还需要额外的存储和预处理来进行元数据/摘要。由于多步骤检索查询延迟增加不适合大型非结构化数据。6. 混合索引Hybrid Indexing / Multi-Modal知识不仅仅存在于文本中。在混合索引形式中RAG 通过做两件事来处理多种形式的数据或模态检索器使用针对每种可能模态专门化或调优的不同编码器生成的嵌入。然后它从每个相关的嵌入中获取结果并使用评分策略或**晚期融合late-fusion**方法将它们结合起来生成响应。以下是其用法的示例使用CLIP 或 BLIP处理图像和文本标题。使用CodeBERT 或 StarCoder嵌入来处理代码。示例代码# 6. Hybrid Indexing (example with text image)# Example text and dummy image embedding (replace embed_image with actual model)def embed_image(image_data): # Dummy example: image data represented as length of string (replace with CLIP/BLIP encoder) return [len(image_data) / 1000]text_embedding embed(doc_text)image_embedding embed_image(image_bytes_or_path_here)print(Text embedding size:, len(text_embedding))print(Image embedding size:, len(image_embedding))何时使用混合索引处理包含图像或图表的技术手册或文档。多模态文档或支持文章。产品目录或电子商务。权衡检索逻辑和存储模型更为复杂但在响应中能提供更丰富的上下文理解并在领域内具有更高的灵活性。成功的 RAG 系统取决于针对数据类型和待回答问题的适当索引策略。索引指导着检索器找到什么以及语言模型将以什么为基础进行生成使其成为超越检索的关键基础。你使用的索引类型可能是块、子块、查询、摘要、分层或混合索引并且该索引应遵循数据中存在的结构这将提高相关性并消除噪音。精心设计的索引过程将减少幻觉并提供一个准确、值得信赖的系统。如何学习AI大模型 “最先掌握AI的人将会比较晚掌握AI的人有竞争优势”。这句话放在计算机、互联网、移动互联网的开局时期都是一样的道理。我在一线互联网企业工作十余年里指导过不少同行后辈。帮助很多人得到了学习和成长。我意识到有很多经验和知识值得分享给大家故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。【保证100%免费】CSDN粉丝独家福利这份完整版的 AI 大模型学习资料已经上传CSDN朋友们如果需要可以扫描下方二维码点击下方CSDN官方认证链接免费领取【保证100%免费】读者福利CSDN大礼包《最新AI大模型学习资源包》免费分享 安全链接放心点击对于0基础小白入门如果你是零基础小白想快速入门大模型是可以考虑的。一方面是学习时间相对较短学习内容更全面更集中。二方面是可以根据这些资料规划好学习计划和方向。1.大模型入门学习思维导图要学习一门新的技术作为新手一定要先学习成长路线图方向不对努力白费。对于从来没有接触过AI大模型的同学我们帮你准备了详细的学习成长路线图学习规划。可以说是最科学最系统的学习路线大家跟着这个大的方向学习准没问题。全套教程文末领取哈2.AGI大模型配套视频很多朋友都不喜欢晦涩的文字我也为大家准备了视频教程每个章节都是当前板块的精华浓缩。3.大模型实际应用报告合集这套包含640份报告的合集涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师还是对AI大模型感兴趣的爱好者这套报告合集都将为您提供宝贵的信息和启示。全套教程文末领取哈4.大模型实战项目项目源码光学理论是没用的要学会跟着一起做要动手实操才能将自己的所学运用到实际当中去这时候可以搞点实战项目来学习。全套教程文末领取哈5.大模型经典学习电子书随着人工智能技术的飞速发展AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型如GPT-3、BERT、XLNet等以其强大的语言理解和生成能力正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。全套教程文末领取哈6.大模型面试题答案截至目前大模型已经超过200个在大模型纵横的时代不仅大模型技术越来越卷就连大模型相关的岗位和面试也开始越来越卷了。为了让大家更容易上车大模型算法赛道我总结了大模型常考的面试题。全套教程文末领取哈为什么分享这些资料?只要你是真心想学AI大模型我这份资料就可以无偿分享给你学习我国在这方面的相关人才比较紧缺大模型行业确实也需要更多的有志之士加入进来我也真心希望帮助大家学好这门技术如果日后有什么学习上的问题欢迎找我交流有技术上面的问题我是很愿意去帮助大家的这些资料真的有用吗?这份资料由我和鲁为民博士共同整理鲁为民博士先后获得了北京清华大学学士和美国加州理工学院博士学位在包括IEEE Transactions等学术期刊和诸多国际会议上发表了超过50篇学术论文、取得了多项美国和中国发明专利同时还斩获了吴文俊人工智能科学技术奖。目前我正在和鲁博士共同进行人工智能的研究。资料内容涵盖了从入门到进阶的各类视频教程和实战项目无论你是小白还是有些技术基础的这份资料都绝对能帮助你提升薪资待遇转行大模型岗位。CSDN粉丝独家福利这份完整版的 AI 大模型学习资料已经上传CSDN朋友们如果需要可以扫描下方二维码点击下方CSDN官方认证链接免费领取【保证100%免费】读者福利CSDN大礼包《最新AI大模型学习资源包》免费分享 安全链接放心点击