首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

独家 | 进阶RAG-提升RAG效果

在检索过程中,它首先获取小块,然后查找这些块的父id,并将这些较大的文档返回给LLM。 它在初始搜索阶段使用小文本块,随后向语言模型提供更大的相关文本块进行处理。...该过程包括将原始大文档分解为较小、更易于管理的单元(称为子文档)和较大的块(称为父文档)。 2. 它专注于为每一个子文档创建嵌入,这些嵌入比每一个完整的父块嵌入更丰富、更详细。...它帮助框架识别包含与用户查询相关信息的最相关子文档。 3. 一旦建立了与子文档的对齐,它就会检索与该子文档相关联的整个父文档。在所示的图片中,最终获得了父块。 4....其思想很简单:与其按原样立即返回检索到的文档,它可以使用给定查询的上下文压缩它们,以便只返回相关信息。这里的“压缩”既指压缩单个文档的内容,也指过滤掉整个文档。...重新排序检索到的文档 对所有检索到的文档重新排序,并删除所有相关分数低的文档 这种先进的技术保证了搜索结果符合用户的意图,无论他们是否明显。它帮助用户找到更有洞察力和相关的信息。

60420

Chroma 向量数据入门

Chroma是一个文档检索系统,它存储了一组文档以及它们相应的嵌入向量。当接收到嵌入向量后,Chroma会根据其内部的索引结构快速查找最相关的文档。...['id2', 'id1'] 表示查询结果中最相关的两个文档是 id2 和 id1。 'distances': 每个查询文本与其对应结果之间的距离(相似度)。数值越小表示相似度越高。...", "id2", "id3", ...] ) # 每个元数据项是一个字典,其中键值对表示文档的附加信息 使用 query 方法来查找与给定查询向量最相似的文档,并且可以附加一些过滤条件: collection.query...可以提供可选的过滤词典,以便根据与每个文档关联的 进行过滤。...此外,还可以提供可选的过滤词典,以便根据文档的内容进行过滤 从集合中删除数据 删除特定 ID 且元数据中 chapter 为 "20" 的文档 collection.delete( ids=[

14910
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    从零开始优化 RAG 流程的终极指南,解决检索增强生成的核心挑战

    如果你搜索科学论文,并且事先知道你要查找的信息始终位于特定部分,例如实验部分,则可以将文章部分添加为每个块的元数据,并对其进行过滤以仅匹配实验。...在检索过程中,它首先获取小块,然后查找这些块的父 ID,并将这些较大的文档返回给 LLM。 它在初始搜索阶段利用小文本块,随后将更大的相关文本块提供给语言模型进行处理。...步骤: 该过程涉及将原始大型文档分解为更小、更易于管理的单元(称为子文档)和更大的块(称为父文档)。 它专注于为每个子文档创建嵌入,这些嵌入比整个父块嵌入更丰富、更详细。...它帮助框架识别包含与用户查询相关的信息的最相关子文档。 一旦与子文档建立对齐,它就会检索与该子文档关联的整个父文档。如图所示,最终检索到了父块。...检索父文档非常重要,因为它为理解和响应用户的查询提供了更广泛的背景。框架现在可以访问整个父文档,而不再仅仅依赖于子文档的内容。

    16200

    RAG技术全面解析:Langchain4j如何实现智能问答的跨越式进化?

    它根据这些关键词在每个文档中的频率和相关性对结果进行排名向量搜索,也称“语义搜索”。文本文档通过嵌入模型转换为数值向量。...在搜索相关内容以包含在提示词中时,可以根据元数据条目进行过滤。例如,您可以将语义搜索范围限制为属于特定所有者的文档。...当文档的来源被更新(例如文档的特定页面),您可以通过其元数据条目(例如“id”、“source”等)轻松找到相应的文档,并在嵌入存储中更新它,以保持同步。...EmbeddingStore 可以单独存储 Embedding,也可以与相应的 TextSegment 一起存储:它可以仅按 ID 存储 Embedding,嵌入的数据可以存储在其他地方,并通过 ID...) 按 ID 从存储中删除单个 EmbeddingEmbeddingStore.removeAll(Collection ids) 按 ID 从存储中删除多个 EmbeddingEmbeddingStore.removeAll

    1.6K10

    理解elasticsearch的parent-child关系

    注意插入公司数据的type是branch,数据的id用的是city字段, 添加员工数据的时候,要指定的父文档是属于哪个,这样才能把父子数据给关联到同一台机器上。 ?...parent id字段有两个用途: (1)它创建了连接父子文档的关系并且确保了子文档一定和父文档存在一个shard里面 (2)默认情况下es用的是文档的id字段进行hash取模分片的,如果父文档的id字段被指定...,那么路由字段就是id,而在子文档中我们指定parent的值也是父文档的id字段,所以就一定确保了父子文档都在一个shard里面,在父子文档的关系中,index,update,add,delete包括search...上面的查询仅仅查询最子文档个数符合过滤条件的父文档,has_child也可以使用filter查询。...超过3层的映射官网没有给出例子,具体是否是那样用的,有兴趣的朋友可以自行测试,多层的父子关系会消耗更多的内存,以及性能更糟糕所以设计上应该尽量避免出现这种情况,此外如果非得设计,注意parent id字段应该尽量短的

    2.9K60

    【RAG落地利器】向量数据库Chroma入门教程

    Chroma的工作原理 Chroma的工作流程可以分为以下几个步骤: 创建集合(Collection):集合类似于关系数据库中的表,用于存储文档及其嵌入。...Chroma会自动将文本转换为嵌入并存储。 查询与搜索:通过文本或嵌入查询集合,Chroma会返回与查询内容相似的文档。开发者还可以根据元数据对结果进行过滤。...删除文档 你可以通过 delete 方法删除集合中的文档。 collection.delete(ids=["id1"]) Chroma条件查询教程 1....按元数据过滤(where 参数) 你可以使用 where 参数来根据元数据字段进行过滤。元数据是你在添加数据时提供的附加信息。...按文档内容过滤(where_document 参数) 你可以使用 where_document 参数来根据文档内容进行过滤。支持的操作符是 $contains,用于检查文档中是否包含指定的字符串。

    40000

    RAG项目推荐:bRAG-langchain-构建自己的 RAG 应用程序所需了解的一切

    本仓库包含了对检索增强生成 (RAG) 在各种应用中的全面探索。 每个笔记本都提供了从入门级到高级实现的详细实践指南,包括多查询和自定义 RAG 构建。...初始数据加载:基本的文档加载器和数据预处理方法。 嵌入生成:使用各种模型生成嵌入,包括 OpenAI 的嵌入。 向量存储:设置向量存储(ChromaDB/Pinecone)以实现高效的相似性搜索。...元数据过滤器的查询结构:定义结构化搜索模式以处理 YouTube 教程元数据,实现高级过滤(例如,按观看次数、发布日期)。...多表示索引:设置多向量索引结构以处理具有不同嵌入和表示的文档。 摘要的内存存储:使用 InMemoryByteStore 存储文档摘要以及父文档,实现高效检索。...按顺序继续其他笔记本,以构建和实验更高级的 RAG 概念。

    15810

    【LangChain系列3】【检索模块详解】

    最简单的例子是您可能希望将长文档拆分为更小的块,以适应您模型的上下文窗口。LangChain提供了许多内置的文档转换器,使得拆分、合并、过滤和其他文档操作变得容易。...它会按顺序尝试使用这些字符进行分割,直到块的大小足够小。默认的分割字符列表为:"\n\n", "\n", " ", ""chunk_size: 这个参数设置了每个文本块的目标大小。...这个工具特别适用于需要保留文档结构的场景,例如在嵌入和向量存储之前对输入文档进行分块。主要功能识别 Markdown 标题:根据指定的标题级别(如 #、##、###)来分割文本。...这些算法包括:父文档检索器: 允许您为每个父文档创建多个嵌入,允许您查找较小的块但返回较大的上下文.自查询检索器: 用户的问题通常包含对不仅仅是语义的东西的引用,而是表达一些最好用元数据过滤器表示的逻辑....自查询允许您从查询中解析出语义部分和查询中存在的其他元数据过滤器.集合检索器: 有时您可能希望从多个不同的来源或使用多个不同的算法检索文档.集合检索器使您可以轻松实现此目的.附录1、报错:cannot

    12610

    Elasticsearch学习笔记

    过滤 概述 文档的字段是否包含特定值,比查询更快,结果可缓存 原则上全文索引或者需要其他相关性评分的使用查询语句,其他情况都用过滤。...缓存 概述 缓存针对过滤查询 核心是一个字节集保存哪些文档符合过滤条件 缓存的字节集是增量更新的 每个过滤器都是独立缓存的,且可复用 大部分枝叶过滤器(如term)会被缓存,而组合过滤器(如bool)不会被缓存...适合父文档少,子文档多的情况 优势 更新父文档时,不用更新子文档索引 创建删除修改子文档时,不影响父文档和其他文档 劣势 查询速度比嵌套类型慢5-10倍 不适合父文档多的情况 设计父子关系 指定某一文档...type为另一文档type的parent 创建父文档时,和普通文档没区别 创建子文档时,必须通过parent指定父文档id。...作用是创建关联关系并保证分配到同一个分片(使用父文档id做hash计算) 尽量少使用父子关系,仅父文档比较少的时候 4.

    1.9K52

    Python:bs4的使用

    其他方法   tag.has_attr('id') # 返回 tag 是否包含 id 属性   当然,以上代码还可以写成 'id' in tag.attrs,之前说过,tag 的属性是一个字典。...parent 属性   parent 属性返回某个元素(tag、NavigableString)的父节点,文档的顶层节点的父节点是 BeautifulSoup 对象,BeautifulSoup 对象的父节点是...四、搜索 1、过滤器   介绍 find_all() 方法前,先介绍一下过滤器的类型,这些过滤器贯穿整个搜索的API。过滤器可以被用在tag的name中,节点的属性中,字符串中或他们的混合中。...2、find 和 find_all   搜索当前 tag 的所有 tag 子节点,并判断是否符合过滤器的条件 语法:   find(name=None, attrs={}, recursive=True...上面过滤器示例中的参数都是 name 参数。当然,其他参数中也可以使用过滤器。   attrs:按属性名和值查找。传入字典,key 为属性名,value 为属性值。

    2.5K10

    干货 | 知识库全文检索的最佳实践

    2、我们希望通过搜索,能够灵活地只返回整个文档的部分页面(我相信的Lucene / elasticsearch使这成为可能?!?) 3、如果所有文档是XML是否会更加灵活?...是直接存储在数据库中还是存储成文件系统中的文件?关于文档中的嵌入式图像/图表呢? 以上,希望得到回复。 注解:xml只是提问者的当时初步的理解。...将每个页面索引为“page”文档,其中包含: 包含“doc”文档ID的父字段(请参阅下面的“父子关系”) 文本 页码 也许章节标题或编号 您想要搜索的任何元数据 存储必备——父子文档关系: 通常,在ES...你如何做到这一点取决于你想如何展示你的结果 按页面page分组, 按文档doc分组。 通过页面的结果很容易。 此查询返回匹配页面的列表(每个页面全部返回)以及页面中高亮显示的片段列表。...,将上述查询的结果按doc分组并显示出来。

    2.1K10

    ranger插件开发(上)

    dataMaskDef 一般用于数据库类型的服务中,对结果数据进行筛选处理。例如展示部分字段用于脱敏。 rowFilterDef 同样用于数据库类型的服务中,定义对行数据的过滤处理。...资源列表中各个资源的ID,即每个资源都有各自的ID,ID从1开始递增。...level 资源的层级,多个资源按level从小到大进行排列,同一level的资源位于一个下拉框列表中。 parent 资源的父类资源,配合level实现多个资源的层级关系。...subType 配置字段的字类型 对于父类型为bool的来说,子类型需要补充说明true/false分别对应什么 对于父类型为enum的来说,这里填写字类型的名称,然后在enum中定义该类型 mandatory...讲解完如何编写配置文件,那么接下来就是如何编写ranger admin中的对应的实现类,如何加载该服务配置使其可以在界面中看到对应的模块,并添加对应的服务,和策略的增删查改;以及如何编写插件,嵌入到对应服务中

    1.5K50

    Elasticsearch使用:父-子关系文档(上)

    因此,你必须要先把子文档删除,然后再重新索引这个子文档。 通过子文档查询父文档 has_child的查询和过滤可以通过子文档的内容来查询父文档。...每个子文档都只有一个父文档,因此这里不存在将多个评分规约为一个的情况,score_mode的取值仅为score和none。...ID — 也就是 london — 但是 london 文档的路由却依赖 其本身的 父文档 ID — 也就是 uk 。...不管父子关系映射是否使用了内存缓存或基于硬盘的 doc values,当索引变更时,全局序数要重建。 一个分片中父文档越多,那么全局序数的重建就需要更多的时间。...每一代的父文档都要将其字符串类型的_id字段存储在内存中,这会占用大量内存。 当你考虑父子关系是否适合你现有关系模型时,请考虑下面这些建议: 尽量少地使用父子关系,仅在子文档远多于父文档时使用。

    3.8K31

    一文带你全面了解 RAG 组件

    HTMLHeaderTextSplitter/HTMLSectionSplitter:根据标题或部分分割 HTML 文档。 优点:通过按 HTML 标签拆分来保留文档结构。...优点:压缩检索到的文档以仅根据用户查询过滤相关信息,从而减少发送到 LLM 的信息量。 缺点:如果压缩过度,可能会过滤掉相关内容。 LLMChainExtractor:使用 LLM 链进行检索。...ParentDocumentRetriever:根据父文档进行检索。...优点:允许存储带有块的父文档,维护上下文 缺点:加载数据时需要额外的步骤 SelfQueryRetriever:使用自查询进行检索。 优点:允许 LLM 从用户查询中提取查询参数并将其用于检索。...组件特定的调整 RAG 流水线的每个组件都有特定的超参数,可以进行调整以提高性能: 数据加载和分块: 尝试不同的块大小和重叠设置,以找到上下文保留和处理效率之间的最佳平衡 嵌入模型: 根据维度和语义保留选择嵌入模型

    18410

    强大的进程查看器:htop

    您可以根据自己的喜好和需求进行定制。如果您希望禁用颜色显示,可以在启动 htop 时使用 --no-color 参数。htop 进程信息PID:进程 ID,唯一标识每个进程。...以下是一些其他常见的列信息:PPID:父进程 ID。THCNT:进程的线程数。PGRP:进程组 ID。TTY:进程所连接的终端设备。UID:用户 ID。GID:组 ID。...过滤进程列表如果您只对特定的进程或关键字感兴趣,htop 提供了过滤功能,可以帮助您筛选进程列表。按下 F4 键,在命令行中输入要过滤的关键字,然后按下 Enter 键。...然后,htop 将要求您确认是否要终止该进程。按下 Enter 键,该进程将被终止。设置 htop 的选项htop 允许您自定义其行为和外观。按下 F2 键,您将进入 htop 的设置界面。...查看帮助文档如果您对 htop 的某些功能不熟悉或忘记了快捷键,您可以按下 F1 键来查看 htop 的帮助文档。帮助文档提供了关于各种功能和操作的详细说明。以上是一些 htop 的使用技巧和示例。

    45670

    大模型系列——解读RAG

    有两种选择,一个是句子窗口检索,即在检索到的较小块周围按句子展开上下文,另一个是父文档检索,即递归地将文档分割成若干较大的父块,其中包含较小的子块。...在句子窗口检索方案中,文档中的每个句子都是单独嵌入,这为上下文余弦距离搜索提供了很高的准确性。...父文档检索与句子窗口检索非常相似,都是搜索更细粒度的信息,然后在将上下文提供给 LLM 进行推理之前扩展过的上下文窗口。文档被拆分成引用较大父块中的较小子块。...以多文档代理为例,在每个文档上会初始化一个代理(OpenAIAgent) ,能够进行文档摘要和经典的 QA 机制,以及一个顶级总代理,负责将查询路由到文档代理和最终答案合成。...每个文档代理都有两个工具ーー向量存储索引和摘要索引,并根据路由查询决定使用哪个工具。该体系结构由每个相关代理做出大量的路由决策。

    18.6K16

    ES(ElasticSearch)数据建模最佳实践之「一对多对多关系建模」

    kibana-win 版本的安装包,可以按下文一步步操作,效果更好: (1)双击 elasticsearch.bat,启动本地 es 服务: \elasticsearch-6.3.2\bin\elasticsearch.bat...join 类型 Mapping 定义; 父文档和子文档必须在同一个分片,路由设置相同; 一个文档可以存在多个子文档,但只能有一个父文档; 可以为已经存在的 join 类型添加新的关系; 当一个文档已经成为父文档后...,可以为该文档添加子文档; 子文档不能独立存在,先有父文档,才能创建子文档。...sku 所在分片必须与其父母 spu 和祖父母 store 相同 孙子文档 sku 的父文档 id 必须指向其父亲 spu 文档 四、搜索实践 (1)父查子实践 // 父查子 GET store_spu_sku_index...继而在项目实践中,将一对多、一对多对多的关系按实际搜索场景应用并设计出合理的 ES 索引结构,以满足业务需求。

    2.6K50
    领券