在本文中,我们将介绍使用私有数据优化检索增强生成(RAG)的四种策略,可以提升生成任务的质量和准确性。 通过使用一些优化策略,可以有效提升检索增强生成系统的性能和输出质量,使其在实际应用中能够更好地满足需求。 RAG简单回顾 RAG主要有两个过程。 我们先总结RAG过程中的可以优化的关键点: 1、分块方法:优化块大小确保有意义和上下文相关的数据段。 2、嵌入模型:选择和微调模型以改进语义表示。 3、向量搜索方法:选择有效的相似度量和搜索参数。 4、提供模型的最后提示:制作有效提示以提高输出质量。 RAG的A/B测试 A/B测试可以比较每个组件具有不同配置的两个版本,确定哪个版本的性能更好。 优化RAG的过程是需要持续的测试的,从失败中学习,以及做出明智的调整。需要采用迭代方法,才能定制出适合自己的AI解决方案,更有效地满足特定需求。
关注腾讯云开发者,一手技术干货提前解锁 本文系统性地梳理了 RAG(Retrieval-Augmented Generation,检索增强生成)系统从基础到高级的 20 种优化方法,涵盖分块策略、检索增强 、查询优化、生成质量控制等多个维度。 适用场景:上线前调参、不同领域/文档类型单独优化。 19 CRAG 系统 动态评估并纠正检索质量 20 RL增强RAG 系统 强化学习优化全流程 优化方法选择指南 分块优化:检索不够精准时,优先考虑语义分块(1)、命题分块(13)或切块大小评估 检索增强:融合检索(15)性价比高、易落地;图RAG(16)适合概念与关系密集的领域。 查询优化:HyDE(18)对短查询、抽象问句效果好;查询转换(6)适合复杂、多子问题查询。
RAG有哪些相关研究? 在RAG领域,已经有不少研究为这篇论文奠定了基础。 RAG系统的优化: Wang et al. (2024) 提出了优化检索组件的策略,比如改进文档索引和检索算法,以减少延迟并保持准确性。 通过这些步骤,论文系统地研究了RAG系统的架构,并提出了具体的改进措施,为开发和优化RAG系统提供了实证基础和理论支持。 论文做了哪些实验? 对比了有无RAG模块的模型(w/o_RAG)与包含RAG模块的模型之间的事实性表现。 定性分析: 提供了在TruthfulQA和MMLU数据集上由模型变体生成的示例。 基于74次实验的结果,论文总结了关键发现,并提出了对比上下文学习RAG和焦点模式RAG在性能上的优越性。
AI工程实践指南:探索LLM/SLM集成,利用MoE和Co-LLM优化代码生成。RAG提供可扩展替代方案,避免静态微调,提升代码质量。 ,同时平衡模型选择、性能优化、安全性和成本效益。 集成 LLM 和 SLM 通过利用两者的优势,将小型语言模型 (SLM) 和大型语言模型 (LLM) 集成到软件工程任务中,可以优化效率。 这种方法通过将较简单的任务分配给较小的模型,将复杂的任务分配给较大的模型来优化效率。 在 AI 软件开发平台中部署 LLM 并使用 RAG 对其进行增强可以提高准确性,消除幻觉并优化资源效率。
本文首发个人博客:llm与RAG的学习与优化 - 黑白の世界欢迎点击,评论前言这是一篇拖延了半年的文章。 使用问题向量进行搜索 向量数据库-->>RAG程序: 返回Top-K相似文档 RAG程序->>LLM模型: 4. 预处理:优化数据质量分块 (Chunking)将文档切分成合适的、独立的语义单元是RAG中最关键的第一步。分块的质量直接影响向量的质量和检索的精度。**为什么需要分块? 这是提升RAG效果最有效的手段之一。结语以上内容大概就是笔者最近在大模型学习,RAG开发与特定领域向量数据库构建业务中的一些总结与优化心得。同时不禁感叹,大模型从22年到如今的发展迅速。 可以看到本文在谈到RAG调优的格式突然有些变化。因为到这里笔者有些懒了,手写了思路与大纲后,直接让AI优化,然后再手改一番。本文还只是单纯的 RAG知识库,或者说向量数据库的相关技术点。
langchain4j 中的 Advanced RAG 涉及到诸多策略,今天和大家聊一聊这里涉及到的一些策略。 查看问题身份证(通过元数据知道前文讨论的是红烧肉) 选择加工流水线(判断需要补充上下文) 输出优化后问题(变成"红烧肉怎么做?") 4.2.4 其他 其他的还有像 AzureAiSearchContentRetriever 主要负责和 Azure AI 进行交互,Neo4jContentRetriever 则主要负责和 Neo4j with LangChain4j?") with LangChain4j?")
序本文主要研究一下langchain4j的RAG概述RAG(Retrieval-Augmented Generation)即检索增强生成,它通过检索来获取相关信息,注入到prompt,然后用增强的prompt 实现LangChain4j 提供了三种RAG(Retrieval-Augmented Generation,检索增强生成)的实现方式:Easy RAG:这是最简单的方式,适合初学者快速上手。 Easy RAGpom.xml<dependency> <groupId>dev.langchain4j</groupId> <artifactId>langchain4j-easy-rag RAG Flavors**LangChain4j offers three RAG flavors:* **Easy RAG:** The simplest, quickest way to get LangChain4j 提供了三种RAG(Retrieval-Augmented Generation,检索增强生成)的实现方式:Easy RAG、Naive RAG、Advanced RAG。
序本文主要研究一下langchain4j的Naive RAG示例public class Naive_RAG_Example { /** * This example demonstrates 技术,Easy RAG使用了EmbeddingStoreIngestor来隐藏了文档解析、分割、嵌入、嵌入存储,Naive RAG亦可使用。 EmbeddingStoreContentRetrieverdev/langchain4j/rag/content/retriever/EmbeddingStoreContentRetriever.javapublic 小结langchain4j提供了EmbeddingStoreContentRetriever来开启Naive RAG的功能,EmbeddingStoreContentRetriever.builder( docNaive RAG
很多做RAG的朋友可能都有过这样的经历:兴冲冲地把系统搭起来满怀信心地让它回答几个问题,结果它要么答非所问,要么一脸无辜地说"抱歉我不知道"。 今天我们就来聊聊RAG 2.0在索引与召回机制上的优化思路,看看怎么才能让RAG真正派上用场。 向量召回的困境与破局之道 向量召回命中率低这个问题,说起来简单,真正解决起来却让人头疼。 未来重排序很可能成为RAG系统的标配组件,就像现在全文索引是必备的一样。 值得注意的是,延迟交互这条路还在快速发展。 结语 RAG 2.0的索引与召回机制优化,本质上是在效果和效率之间找平衡。 多路召回解决了单一检索方式的局限,张量排序在保持效果的同时提升了效率,文档预处理则为整个系统打下了高质量的数据基础。 RAG技术还在快速演进,但无论怎么变,扎实的基础功永远是关键,是吧?
RAG(Retrieval-Augmented Generation)中的检索模块是整个系统的关键环节,直接影响生成结果的质量。为了提升检索的准确性、相关性和效率,业界采用了多种优化策略。 以下是 RAG 检索模块的主要优化方法: 一、向量检索优化 更优的嵌入模型(Embedding Model) 使用领域微调的嵌入模型(如 BGE、E5 等),比通用模型(如 Sentence-BERT) 四、索引与架构优化 分块策略优化 合理的文本分块大小(如 256-512 tokens)。 使用滑动窗口重叠分块,避免信息割裂。 基于语义边界(如段落、标题)进行智能分块。 基于反馈的持续优化 利用用户反馈或生成结果质量信号,迭代优化检索模型或策略。 ,RAG 的检索模块能够更精准地找到与用户问题相关的上下文,为生成模块提供高质量输入,从而显著提升整体系统表现。
序本文主要研究一下langchain4j的Advanced RAG核心流程将UserMessage转换为一个原始的QueryQueryTransformer将原始的Query转换为多个Query每个Query *
* Advanced RAG in LangChain4j is described here: https://github.com/langchain4j/langchain4j DefaultQueryTransformerdev/langchain4j/rag/query/transformer/DefaultQueryTransformer.javapublic class ReRankingContentAggregatordev/langchain4j/rag/content/aggregator/ReRankingContentAggregator.javapublic ContentInjectordev/langchain4j/rag/content/injector/ContentInjector.java@Experimentalpublic interface
继续我们的langchain4j之旅,今天来看看RAG如何实现,“RAG萌宠新手盆友们”建议先看看B站大佬的视频RAG 工作机制详解—哔哩哔哩_bilibili,核心步骤就是下面这3张图: 最简单的RAG error: " + e.getMessage() + "\"}"); } } 略做解释: 为了简单起见, 这里分片我们略过,直接手动用二个句子,当成2个分片 使用langchang4j prompt_eval_count":11} 3、重排/生成 private interface Assistant { String chat(String userMessage); } /** * 基于RAG "" + e.getMessage() + "\"}"); } } 日志输出: 2025-12-03T21:06:00.218+08:00 INFO 16956 --- [langchain4j-study "done_reason":"stop","total_duration":1059949995,"prompt_eval_count":21,"eval_count":22} 从日志上看,先做了1次RAG
序本文主要研究一下langchain4j的核心RAG APIs核心RAG APIslangchain4j提供了一套丰富的API来构建自定义的RAG(检索增强生成)pipelines,从简单的到高级的都有涵盖 (langchain4j-document-loader-amazon-s3)、AzureBlobStorageDocumentLoader(langchain4j-document-loader-azure-storage-blob (langchain4j-document-parser-apache-pdfbox)、ApachePoiDocumentParser(langchain4j-document-parser-apache-poi 提供了一套丰富的API来构建自定义的RAG(检索增强生成)pipelines,包括DocumentLoader、DocumentParser、DocumentTransformer、DocumentSplitter doccore-rag-apis
本篇来看下 RAG 的架构优化策略 利用知识图谱(KG)进行上下文增强 在现有的向量数据库中,典型的上下文增强可能面临挑战:难以捕捉长距离的关联知识,信息稀疏性高(尤其是当LLM上下文窗口有限时)。 但有时回调的上下文可能与查询无关或存在矛盾,这种情况下应当放弃使用这些上下文,尤其是在大模型的上下文窗口有限(当前常见为4k窗口)的情况下。 模型可根据具体任务进行定制化调整,它通过增加检索的文段数量来优化对事实准确性的重视,或是在开放性任务中突出创新能力。此模型能决定何时进行文段的检索,或者依据预设的阈值来启动该过程。 2、首先借助多模态大型模型(如GPT4-V、LLaVA、FUYU-8b)对图像内容进行概要生成。紧接着,对文本、表格和图像的概要进行向量化处理,存入综合向量索引系统。 小结 本篇文章介绍了 RAG 的架构优化策略,主要包括利用知识图谱进行上下文增强以及让大模型对召回结果进行筛选的方法。
1 RAG 简介:扩展到更大的知识库对于无法放入上下文窗口的更大知识库,RAG 是典型的解决方案。 ;使用 BM25 基于精确匹配查找最佳文本块;使用嵌入基于语义相似性查找最佳文本块;使用排名融合技术结合并去重来自(3)和(4)的结果;将前 K 个文本块添加到提示词中生成响应。 但传统 RAG 系统有一个显著的局限:它们往往破坏上下文。传统 RAG 中的上下文问题在传统 RAG 中,文档通常被拆分为较小的块,以便于检索。 我们的实验表明,跨多个领域,添加重新排序步骤进一步优化了检索。具体而言,我们发现,重新排序后的上下文嵌入和上下文 BM25 将前 20 个块检索未命中率降低了 67%(5.7% → 1.9%)。 4 结论大量测试比较上述所有技术(嵌入模型、BM25 的使用、上下文检索的使用、重新排序的使用,以及检索的前 K 个结果总数)的不同组合,跨各种数据集类型。
编码和语义嵌入; 使用 BM25 基于精确匹配查找最佳文本块; 使用嵌入基于语义相似性查找最佳文本块; 使用排名融合技术结合并去重来自(3)和(4)的结果; 将前 K 个文本块添加到提示词中生成响应。 但传统 RAG 系统有一个显著的局限:它们往往破坏上下文。 传统 RAG 中的上下文问题 在传统 RAG 中,文档通常被拆分为较小的块,以便于检索。 实验表明,跨多个领域,添加重新排序步骤进一步优化了检索。 重新排序后的上下文嵌入和上下文 BM25 将前 20 个块检索未命中率降低了 67%(5.7% → 1.9%)。 4 结论 大量测试比较上述所有技术(嵌入模型、BM25 的使用、上下文检索的使用、重新排序的使用,以及检索的前 K 个结果总数)的不同组合,跨各种数据集类型。 负责: 中央/分销预订系统性能优化 活动&券等营销中台建设 交易平台及数据中台等架构和开发设计 车联网核心平台-物联网连接平台、大数据平台架构设计及优化 LLM Agent应用开发 区块链应用开发
为什么要优化? 优化的好处 1.提升网页响应速度 2.有利于搜索引擎搜索 3.对后期维护比较方便 怎么优化? 1.减少请求 2.减少文件的大小 3.页面性能 4.可读性、维护性 1.图片合并 2.css文件合并 (多个css文件合并为一个、少量的行内样式、避免import的方式引入文件) 3.减少图片的大小 (选择合适的图片格式) 4.css值缩写 5.0px 中px省略 0% 0 0.5可以写成.5 6.选择器合并 7.link标签引入样式放到head标签中 8.js脚本建议放在底部,等页面加载完之后再处理 尽量用语义化的标签来编写,有利于seo 15.类型和id名,以内容语义来命名 16.避免hack 17.模块化(一系列相关的结构做成一个模块来处理) 18.必要的时候添加注释,可读性比较好 比如说代码优化 ,大家试着说一下怎么优化?
优化脚本 一般此过程会非常漫长,可以写一个脚本来后台运行,或简单的控制一下IO [hunter@opti-slave ~]$ cat opti.bash #! opti.bash >> /path/to/optimize.log 2>&1 & 通过监控 optimize.log 来判断执行完成状态 也可以通过查看监控,IOPS很能反映问题 ---- 恢复备份 优化完成后 ,立刻恢复备份 start slave; 通过对比前后数据文件大小,可以明显看到优化效果 一般少也能缩减5%的空间,平均在10%左右,我自己经历最明显效果的是减少了32%的空间,对于一个大库来说,能节省不少磁盘空间 ,并且对查询性能也有一定优化效果 ---- 命令汇总 pt-table-checksum --nocheck-replication-filters --nocheck-binlog-format --
一个具有更大上下文窗口的新模型问世,社交媒体上便会充斥着“RAG 已死”的宣言。 Meta 最近的突破再次引发了这场讨论——Llama 4 Scout 惊人的 1000 万(理论上)token 上下文窗口代表着一次真正的飞跃。 底线是:您同时需要长上下文 LLM 和 RAG。 但既然“RAG”这个术语似乎如此具有争议性,那我们不妨这样说: 我们不必非得称之为 RAG。 我们可以就叫它 检索 (retrieval)。 RAG 提供了相当于直接翻到相关页面的能力。处理更多 token 不仅更慢,而且极其低效,并且比使用 RAG 精准定位所需信息要昂贵得多。 RAG、微调和大型上下文窗口在 AI 中也是如此。 结论 我们不需要在 RAG 与长上下文窗口、微调或 MCP 之间做出选择。
1.ORDER BY的优化 某些情况下,MySQL使用索引排序,尽量避免使用 filesort 即使ORDER BY与索引不完全匹配,也可以使用索引,只要索引的未使用部分和额外的 如果是这样,优化器可能不使用索引。如果SELECT*只选择索引列,则使用索引并避免排序。 * FROM t1 WHERE key_part1 = constantORDER BY key_part2; ---- 假设 key_part1不是索引或索引的一部分,在条件中作为常量条件存在,则优化器也会使用索引 为了获得文件排序操作的内存,从MySQL8.0.12开始,优化器会根据需要递增地分配内存缓冲区,直到达到sort_buffer_size系统变量指定的大小,而不是像MySQL8.0.12之前那样预先分配固定数量的