- 博客(101)
- 收藏
- 关注
原创 递归文档树检索实施高级RAG优化理解-RAPTOR 递归文档树的实现与RAG索引优化总结
本文介绍了RAPTOR递归文档树在LangChain中的实现方法。由于RAPTOR检索策略使用较少且复杂度较高,主要需了解其运行流程。实现过程包括:安装必要Python包(如umap-learn、scikit-learn)、定义随机数种子和模型、进行全局/局部降维(使用UMAP算法)、通过高斯混合模型确定最优聚类数、执行聚类操作(先全局降维再局部聚类)。代码展示了完整的实现细节,包括数据处理、降维和聚类等关键步骤。
2025-06-12 09:05:28
457
原创 递归文档树检索实施高级RAG优化理解-RAPTOR 递归文档树策略
RAPTOR是一种新型的树状检索增强生成技术,针对长文本处理优化了传统RAG方法。它通过递归聚类和摘要构建分层文档树,包含分块、向量化、降维、聚类和摘要等步骤。RAPTOR提供两种检索策略:树遍历和更高效的折叠树(类似向量数据库搜索)。相比传统方法,它具有低成本、高性能的优势,尤其适合小参数模型,但数据更新较复杂。论文建议重新构建或增量更新等策略来处理新数据。该技术在多文档、长上下文场景下实现了准确性与成本的平衡。
2025-06-12 09:00:05
505
原创 父文档检索器实现拆分和存储平衡
本文介绍了RAG应用中解决文档拆分与检索冲突的策略。通过拆分子文档块并检索父文档块的方法,既保证了嵌入准确性,又保留了上下文信息。文章详细讲解了使用LangChain的ParentDocumentRetriever实现该功能的步骤,包括创建文本分割器、向量数据库和文档数据库等。同时提供了两种检索方案:直接检索原始文档和检索中间大小的父文档块。代码示例展示了如何通过调整分割器参数来满足不同场景需求,帮助开发者在文档上下文关联性强的场景中实现更精准的检索效果。
2025-06-11 09:49:00
264
原创 MultiVector 实现多向量检索文档
本文介绍了多向量索引技术,通过为文档块生成多种表征(如摘要、假设性问题)来提升检索效果。核心方法是使用摘要文档检索原始文档,通过唯一标识在向量数据库和文档数据库之间建立关联。文章提供了基于LangChain的代码示例,展示了如何利用MultiVectorRetriever类实现这一流程,包括文档加载、摘要生成、存储检索等步骤。该技术能显著提高相关文档的检索概率,适用于需要精准匹配的大规模文本检索场景。
2025-06-11 09:39:43
682
原创 自查询检索器实现动态元数据过滤
本文探讨了在RAG应用开发中如何通过自查询技术优化检索过程。针对用户提问隐含的筛选条件(如"2023年AI新闻"),提出使用SelfQueryRetriever将自然语言转换为元数据过滤器的方案。该方法通过定义元数据字段描述,利用LLM自动构建过滤条件,能有效压缩检索范围并提升准确性。文中以Pinecone数据库为例展示了具体实现流程,包括文档上传、元数据定义和查询构建等步骤,并指出该方法特别适用于具有规范元数据的专业领域数据。
2025-06-10 09:23:54
830
原创 使用语义路由选择不同的 Prompt 模板
在 RAG 应用开发中,针对不同场景的问题使用 特定化的prompt模板 效果一般都会比通用模板会好一些,例如在 教培场景,制作一个可以教学 物理+数学 的授课机器人,如果使用通用的 prompt模板,会导致 prompt 编写变得非常复杂;反过来如果 prompt 写的简单,有可能没法起到很好的回复效果。如果能针对用户的提问,例如用户提问的内容是数学相关的则使用数学的模板,提问的内容是物理相关的则使用物理的模板,针对性选择不同的模板,LLM 生成的内容会比使用通用模板会更好,例如下方有两个 promp
2025-06-10 09:18:16
429
原创 检索器的逻辑路由实现
摘要:在RAG应用中实现多向量数据库路由时,通过函数回调机制能有效解决LLM输出格式不稳定的问题。本文提出使用虚假函数强制LLM输出结构化参数,根据用户问题自动选择匹配的数据库(如python_docs/js_docs/golang_docs)。通过LangChain框架实现路由逻辑链,示例代码展示了如何基于编程语言类型自动路由Python相关问题到对应数据库,并输出"chain for python_docs"的准确结果。该方法提高了检索系统的灵活性和响应准确性。(149字) 关键点:
2025-06-09 10:16:23
358
原创 使用检索器逻辑路由缩减检索范围
虽然我们人类可以从这么一大长串内容中看出,是需要寻找 python_docs 的数据源,但是对于程序来说,要的其实只是 python_docs 这个字符串,并不是要这么一大长串带有语义场景的文本,大语言模型越热情,返回的数据越难处理。
2025-06-09 10:08:59
802
原创 (附图示)查询转换阶段优化策略总结
在 RAG 的 查询转换 阶段,目前市面上主流的优化策略其实我们都已经讲解完了,涵盖了:多查询重写、RAG 多查询结果融合、问题分解策略、回答回退策略、HyDE 混合策略、集成检索器策略等,不同的优化策略有不同的优缺点:
2025-06-08 11:59:50
345
原创 (附代码)集成多种检索器算法实现混合检索-集成检索器的优势与使用
LangChain中的EnsembleRetriever实现了混合检索功能,通过结合BM25关键词检索和FAISS语义相似度检索的优势。该检索器使用RRF算法对多个检索结果进行集成排序,配置简单灵活,支持动态调整参数权重。示例代码展示了如何创建文档集、初始化两种检索器并组合使用,最终输出包含语义和关键词匹配的混合结果。这种混合检索方式在Dify、Coze等AI平台中广泛应用,能有效提升检索质量。
2025-06-08 11:53:54
442
原创 混合策略实现 doc-doc 对称检索局限性与失败案例
本文探讨了HyDE方法在信息检索中的局限性。研究发现,在两种场景下HyDE容易产生错误:1)当查询缺乏足够上下文时(如查询"Bel"时会产生完全不同的解释);2)处理开放式查询时可能引入偏见(如关于艺术与工程的比较)。虽然HyDE作为无监督方法能提升RAG效果,但由于其依赖问题与答案的相似性而非单纯嵌入,当LLM无法准确理解问题时可能导致错误率上升。建议根据具体场景谨慎选择是否使用HyDE方法。
2025-06-07 15:14:39
450
原创 (附实例代码及图示)混合策略实现 doc-doc 对称检索
摘要 HyDE混合策略是针对查询与文档不对称检索问题提出的解决方案。该方法利用LLM将用户查询转换为假设性文档,再通过doc-doc相似性检索获取更相关的结果。论文《Precise Zero-Shot Dense Retrieval without Relevance Labels》指出,假设性文档虽可能存在事实错误,但与真实文档具有更高语义相似性。LangChain实现中需自定义HyDERetriever类,通过生成假设文档、嵌入转换和向量检索三个步骤完成检索流程。实验表明该方法能有效过滤无关信息,提升查
2025-06-07 15:06:14
602
原创 (附实现代码)Step-Back 回答回退策略扩大检索范围
摘要 本文介绍两种提升大语言模型性能的方法:少量示例提示模板和Step-Back回答回退策略。 少量示例提示模板通过提供少量示例指导模型生成,LangChain封装了FewShotPromptTemplate模板简化使用过程。文中展示了Python实现示例,包含构建示例模板、创建提示链并调用过程。 Step-Back回答回退策略让模型为复杂问题生成更抽象的前置问题,以此提升检索和推理效果。文章解析了其原理优势,并提供了LangChain自定义检索器的实现代码,包含向量数据库集成和回退问题生成逻辑。 两种方法
2025-06-06 13:15:22
608
原创 (附示例代码及图示)问题分解策略提升复杂问题检索正确率
本文探讨了复杂问题在RAG应用中的检索难点,提出两种问题分解策略(迭代式和并行式)来提高检索效果。针对涉及多步骤的复杂查询,如"如何维修某部件",传统向量检索往往无法找到关联文档。文章详细介绍了迭代式回答的实现方法:先分解问题为子问题链,依次检索并生成答案,将前序答案作为后续问题的上下文。通过Python代码展示了使用LangChain构建分解链、检索器和迭代问答链的具体流程,并提供了三个子问题的问答示例。这种方法有效解决了复杂问题检索关联度低和上下文长度受限的痛点。
2025-06-06 13:08:15
856
原创 [附代码示例]RAG 多查询结果融合策略
摘要:本文介绍了多查询结果融合策略中的RRF(Reciprocal Rank Fusion)算法及其实现。RRF通过倒排序排名对多查询结果重新排序,合并输出Top K结果,解决了传统多查询策略中不考虑文档权重和数量的问题。文章详细解析了RRF公式原理(k=60为经验值),并提供了Python实现代码。最后展示了如何通过继承LangChain的MultiQueryRetriever类,重写检索方法实现RAG融合检索器,结合Weaviate向量数据库进行应用示例。 (150字)
2025-06-05 08:59:56
431
原创 (附示例代码)MultiQueryRetriever核心及注意事项
摘要:MultiQueryRetriever是LangChain中的一种检索器,通过生成多个相关子问题优化检索效果。其核心流程为:1)用预设prompt让大语言模型生成3个关联子问题(原始prompt针对OpenAI优化,中文场景需翻译调整);2)并行检索子问题;3)合并去重结果。使用时需注意:不同模型可能生成不规范格式,建议测试prompt效果或保留原始问题(inclued_original=True)。该方法实现简单(底层仅遍历去重),适合用轻量本地模型(temperature=0减少幻觉),但会略微增
2025-06-05 08:51:28
321
原创 (附代码及图示)Multi-Query 多查询策略详解
多查询策略是一种通过生成子问题优化检索的技术,核心思想是将主问题拆分为多个相关子问题,从而获取更全面的检索结果。该策略在LangChain中通过MultiQueryRetriever实现,支持自定义提示模板和语言模型。实践表明,该方法能有效提升RAG系统的检索效果,案例中使用Weaviate向量数据库结合多查询策略,成功获取了关于LLMOps应用配置的多角度文档。开发者可通过LangSmith平台监控完整的执行流程。
2025-06-04 08:36:38
318
原创 RAG 开发 6 个阶段优化策略总览
RAG开发优化策略概述 RAG(检索增强生成)开发包含6个阶段,每个阶段都有针对性的优化策略。常见的优化方法包括问题转换、多路召回、混合检索等数十种方案,这些策略在不同阶段效果各异且相互影响。值得注意的是,RAG优化与框架选择(如LangChain)无关,关键在于掌握优化思路。文章提供了一张优化策略与开发阶段的对应图,并推荐了相关API和资源链接,包括大模型中转API、使用教程和模型优惠查询。
2025-06-04 08:31:13
289
原创 RAG 开发 6 个阶段优化策略分析
本文探讨了LLM应用中RAG开发的优化策略,指出所有优化的核心目标是提升生成内容的准确性。文章提出三个关键步骤:传递更精准内容、优先重要内容、过滤无关信息。虽然研究者提出了多种优化方案,但尚无统一解法,需根据场景灵活组合。文中强调优化策略越多,成本和性能负担越大,建议聚焦于查询转换、文本分割、向量数据库等关键组件。最后划分了RAG开发的6个阶段(查询转换、路由、索引等),为针对性优化提供框架。同时推荐了相关API资源和模型优惠查询渠道。
2025-06-03 09:14:53
655
原创 内置的检索器组件与自定义检索器技巧
本文介绍了LangChain中检索器的两种使用方式。内置检索器包含多种第三方工具(如维基百科搜索、ES搜索等),但部分可能不符合Runnable规范,需查阅文档使用。对于特殊需求,可以自定义检索器,只需继承BaseRetriever类并实现_get_relevant_documents方法,示例展示了如何构建一个基于内容匹配的简单检索器。随着技术发展,网络检索功能正逐渐被工具回调等新方案替代。文末推荐了相关API资源和使用教程。
2025-06-03 09:08:45
337
原创 检索器组件深入学习与使用技巧 VectorStoreRetriever 检索器
本文介绍了LangChain中的VectorStoreRetriever检索器及其使用方法。该检索器是BaseRetriever的子类,支持相似性搜索、带阈值搜索和MMR搜索三种模式,可通过configurable_fields()动态配置搜索参数。文章展示了如何通过with_config()或invoke()传递运行时配置,以及在RAG应用中灵活调整检索策略的技巧。同时提及了Runnable组件的其他配置选项如错误重试、监听等,并指出Weaviate向量数据库的特殊限制。内容涵盖检索器核心原理、代码实现和
2025-06-02 12:53:26
465
原创 检索器组件深入学习与使用技巧 BaseRetriever 检索器基类
摘要:LangChain框架中的BaseRetriever组件是检索器的基类,支持通过query检索相关文档。它继承了Runnable特性,提供通用方法如get_relevance_documents(0.3.0版本将弃用)。向量数据库可通过as_retriever()快速转换为检索器,示例展示了WeaviateVectorStore构建检索器并进行相似性搜索的过程,包括参数配置和查询执行。
2025-06-02 12:46:39
497
原创 MMR 最大边际相关性详解
摘要:最大边际相关性(MMR)兼顾查询相关性和结果多样性,通过加权计算相关度与文档间相似度来优化检索。LangChain实现中,MMR先获取fetch_k条候选数据,再从中筛选最不相似的k条结果。参数包括查询语句、结果数量k(默认4)、中间数据量fetch_k(默认20)及多样性系数(0-1)。适用于需要多样性的RAG场景,当数据量大时fetch_k需适当增加(k的2-6倍)。相比传统相似性搜索,MMR更适合创意需求,而相似性搜索建议配合阈值过滤提升精确性。实际应用中需调试得分阈值以避免过严或过松的检索结果
2025-06-01 14:41:16
430
原创 VectorStore 组件深入学习与检索方法
摘要 本文介绍了LangChain框架中的向量数据库操作功能,重点解析了相似性搜索和检索器的使用方法。文章首先指出向量数据库的多样性特点,并说明LangChain通过VectorStore基类统一封装了6种通用操作方法。在技术细节方面,详细讲解了带得分阈值的相似性搜索功能,通过代码示例展示如何设置score_threshold参数来过滤低相关度文档。此外,文章还深入探讨了as_retriever()方法的应用,包括配置不同搜索类型(search_type)和参数(search_kwargs)的方法,并通过W
2025-06-01 14:33:54
1009
原创 (附场景代码)非分割类型的文档转换器使用技巧
摘要: 本文介绍了LangChain中的文档转换器组件,主要包含问答转换器和翻译转换器两类。问答转换器(DoctranQATransformer)可将叙述文本转换为问答格式,优化RAG应用的知识库检索效果。翻译转换器(DoctranTextTranslator)支持跨语言文档翻译,适用于多语言场景。两者均通过OpenAI接口实现,安装简单(pip install doctran),调用transform_documents即可快速转换。示例代码展示了从文本生成问答对及中英翻译的实际应用,为LLM开发中的数据
2025-05-31 11:33:48
662
原创 (附代码)自定义 LangChain 文档分割器,深入探索 LangChain 文档分割策略与应用
摘要: LangChain支持自定义文档分割器,用户可继承TextSplitter基类并实现split_text()方法,按需分割文本(如按分隔符+关键词提取)。文档分块的4种主要策略包括:1)固定大小分块(简单高效);2)基于结构的分块(适用于HTML/Markdown);3)基于语义的分块(保留语义独立性);4)递归分块(分层迭代分割)。策略可组合使用,若分块效果不佳,建议考虑微调而非RAG。分块策略选择取决于数据特性与应用场景,目前尚无统一最优方案。(149字)
2025-05-31 11:23:26
743
原创 (附代码)Langchain中语义文档分割器的使用与介绍
摘要: LangChain实验性功能SemanticChunker提供了基于语义相似性的文档分割方法,相比传统字符分割更能保持语义连贯性。该工具使用文本嵌入模型计算句子间相似度,支持通过百分位、标准差等四种阈值检测方法,并允许设置缓冲区大小、分块数量等参数。安装需使用langchain_experimental包,目前仍处实验阶段。示例代码展示了如何将中文科幻文本分割为10个语义块,同时介绍了NLTK、Spacy等替代方案。(149字)
2025-05-30 11:00:48
699
原创 (附代码)Langchain中其他文档分割器的使用与介绍
摘要:LangChain提供了多种针对特定文档格式的文本分割器,包括HTML/Markdown标题分割器(HTMLHeaderTextSplitter、HTMLSectionSplitter、MarkdownHeaderTextSplitter)和递归JSON分割器(RecursiveJsonSplitter)。这些分割器能根据文档结构(如标题层级)或JSON嵌套关系智能分割内容,同时保留元数据信息。HTML分割器按元素级别处理,JSON分割器采用深度优先遍历方式,确保数据块大小合理。示例代码展示了如何使用
2025-05-30 10:59:46
799
原创 (附实现代码及图示)langchain框架中文场景下的递归分割
本文介绍了如何优化中文文档分割的方法。针对RecursiveCharacterTextSplitter默认只支持英文分隔符的问题,提出了基于中文标点符号(如句号、感叹号、问号等)的改进方案,并详细说明了不同分隔符的优先级顺序。通过修改separators参数,可以更好地处理中英文混合文档的语义分割。文中还提供了完整的Python代码示例,展示如何使用优化后的文本分割器处理Markdown文档,包括设置合适的分块大小、重叠区域等参数。最后介绍了该技术在聊天机器人项目中的应用架构。
2025-05-29 10:05:25
492
原创 (附代码示例)langchain中的衍生代码分割器使用及讲解
本文介绍了递归字符文本分割器的功能与应用,重点阐述了其支持多种编程语言的特性。通过langchain_text_splitters.Language枚举可获取20种编程语言的分隔符列表,Python示例展示了如何根据类、函数等结构拆分代码。文中演示了具体使用方法:先加载文件,再通过from_language()方法构建分割器,最终输出保持语义连续性的文本块。该工具适用于需要结构化处理代码的场景,能有效保证大段代码的上下文连贯性。文末提供了相关API资源链接。
2025-05-29 10:04:26
350
原创 (附代码)Langchain中递归字符文本分割器的使用与运行流程
文本分割是RAG系统中的重要环节,普通分割器使用单一分隔符可能导致文档块过大或过小。LangChain提供的RecursiveCharacterTextSplitter采用多级分隔符策略,通过预分割、递归分割和块合并三个步骤,将文本块控制在指定大小范围内。该方法优先使用换行符等自然分隔符,再逐步采用更细粒度分隔符,确保块大小接近目标值,解决了传统分割方法存在的问题,是当前LLM应用开发中的最佳实践方案。
2025-05-28 10:01:34
297
原创 (附核心代码)文档分割器-字符分割器基础使用技巧
本文介绍了字符分割器(CharacterTextSplitter)的基本使用方法,该工具用于将文档按指定规则分割。主要参数包括分隔符(默认"\n\n")、块大小(默认4000字符)、块重叠(默认200字符)等。演示代码展示了如何设置500字符块大小和50字符重叠分割Markdown文档。值得注意的是,当原始文本段超过指定块大小时,系统会保留完整文本段并发出警告。文中还提供相关API文档和教程链接供进一步参考。
2025-05-28 09:50:51
224
原创 文档转换器的使用附代码和图示
本文介绍了LangChain中的文档转换组件。原始文档通常存在过大、格式不符或信息冗余等问题,直接处理会影响相似性搜索和RAG的准确性。LangChain通过BaseDocumentTransformer基类提供文档转换功能,包括文档切割、属性提取、翻译等操作。文档分割器作为高频使用功能已独立成包(langchain-text-splitters)。组件分为文档分割器(高频)和文档处理转换器(低频)两类,通过transform_documents()方法实现文档转换。文章还展示了组件类图架构和使用前需安装的
2025-05-27 10:04:45
292
原创 (附实现代码及图示)Blob与BlobParser代替文档加载器
本文介绍了LangChain中的Blob文档处理方案,包含三个核心组件:Blob数据对象、BlobLoader数据加载器和BlobParser数据解析器。Blob方案采用类似WebAPI规范的设计,支持从文件或内存加载二进制数据,并通过解析器转换为文档格式。文章详细说明了Blob类的属性和方法,演示了如何自定义解析器和使用文件系统加载器,并介绍了整合加载器与解析器的通用GenericLoader类。虽然当前LangChain对Blob方案的集成有限,但随着发展该方案可能逐步替代现有的DocumentLoad
2025-05-27 09:55:25
916
原创 (附示例代码)自定义 LangChain 文档加载器使用技巧
本文介绍了在LangChain中实现自定义文档加载器的方法。针对企业内部特殊格式数据,通用加载器提取效果不佳时,可通过继承BaseLoader基类并实现lazy_load()方法来自定义加载器。文中提供了将文本文件每行作为Document的示例代码,并分析了文档加载器的核心逻辑(数据读取+解析)。建议将解析与加载逻辑分离以提高可维护性,并指出LangChain正在设计基于Blob的新方案来统一数据读取流程。对于特殊格式数据处理,自定义加载器能显著提升向量数据库的检索效率和准确性。
2025-05-26 09:42:14
258
原创 (2025附使用体验教程)全球最强编程模型来了!Anthropic发布Claude 4,七小时稳定运行重塑软件开发
Anthropic震撼发布Claude 4系列AI模型,其中Opus 4被誉为"全球最佳编程模型"。该系列在基准测试中表现优异,Opus 4在SWE-bench测试中准确度达72.5%,并具备连续工作7小时的超强持久力。新增功能包括工具使用、长期记忆和思维可视化,大幅提升AI的智能水平。同时推出的Claude Code与主流开发工具集成,标志着AI从助手升级为协作伙伴。随着Anthropic、OpenAI和谷歌的竞争加剧,AI领域正迎来技术突破的高潮。这一系列创新或将重塑软件开发行业格局
2025-05-26 01:22:16
1309
原创 零基础也能看懂!5分钟搞懂什么是LLMOps
假设你要组装一台电脑:- 没有经验的人:需要自己买零件、学焊接、调试系统...- 用组装平台:选择配置→自动匹配零件→一键组装→直接使用LLMOps就像这个"智能电脑组装平台",只不过它组装的是AI应用!## 二、到底什么是LLMOps?### 1. 官方定义LLMOps(大型语言模型运维)是一套专门用于开发、部署和维护AI应用的系统工具。就像给AI工程师准备的"智能工具箱"。
2025-05-25 10:48:13
473
原创 给AI装记忆的奇妙方法(附实现流程图)
摘要: AI对话系统本身不具备记忆功能,需通过技术手段实现"伪记忆"。核心方法是:1)构建对话模板预留历史记录位;2)创建外部存储器保存聊天记录;3)每次对话时自动注入历史上下文。可采用内存、数据库等不同存储方案,并通过限制对话轮数、分离重要信息等方式优化记忆效果。实现流程包括提取历史、组装提示、获取回复、保存对话四个环节,类似蛋糕裱花的分层处理过程。进阶技巧涉及记忆保鲜和存储方案选择,需根据实际场景平衡性能与持久性。 (字数:149)
2025-05-25 10:46:17
548
原创 几种环境下的Postgres数据库安装
开源:PostgreSQL 是基于开源许可证发布的,任何人都可以免费使用、修改和分发它。关系型数据库:PostgreSQL 是一种关系型数据库,支持 SQL 查询语句,具有强大的数据处理能力。可扩展性:PostgreSQL 支持多种插件扩展,可以满足各种不同规模和需求的应用场景。支持复杂数据类型:除了传统的数据类型外,PostgreSQL 还支持数组、JSON、XML 等复杂数据类型。事务支持:PostgreSQL 提供完整的 ACID 事务支持,确保数据的一致性和可靠性。
2025-05-24 11:54:00
942
原创 给AI装“记忆U盘“:LangChain记忆持久化入门指南
AI记忆持久化技术解析:通过"记忆U盘"机制实现对话连续性,采用Redis/数据库等存储完整历史、动态摘要和上下文关联。核心三组件(记忆模块、聊天存储、外部数据库)构成持久化架构,支持Redis(推荐)、SQLite等多种存储方案,三步即可实现:1)初始化带持久化的记忆组件,2)记录关键对话信息,3)随时读取历史记录。该技术有效解决AI"健忘症"问题,使对话具备连贯记忆能力。(149字)
2025-05-24 11:52:47
1041
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人