RAG
文章平均质量分 89
wshzd
机器学习,深度学习,NLP,强化学习
展开
-
LLM之RAG理论(十二)| RAG和Graph RAG对比
与传统 RAG 相比,Graph RAG 的主要优势在于它能够检索有关查询中提到的实体的全面详细信息。当我们仔细观察架构时,我们可以看到,首先将文档拆分为可管理的块,并将这些块转换为实体和关系,这些实体和关系构成了知识图谱的基础。在基于LLM问答的系统中实施 RAG 的主要好处是它确保模型可以访问最新、最可靠的事实,并且用户可以访问模型的来源,确保其声明可以被检查为准确性并最终被信任。检索增强生成(RAG)是一个框架,通过支持外部知识源的模型来补充LLM信息的内部表示,从而提高LLM生成响应的质量。原创 2024-07-23 16:50:15 · 757 阅读 · 0 评论 -
LLM之RAG实战(四十二)| 如何在LlamaIndex和LangChain中正确选择RAG开发框架
之后不久,各大企业和高校纷纷推出自己的大模型,然而,除了开发大模型之外,企业对大模型的应用开发需求也开始爆发,这导致了对大模型工具/框架的需求激增,这些工具/框架有助于 Gen AI 模型的开发、集成和管理。目前有两个突出的框架处于领先地位:LlamaIndex 和 LangChain,这两个框架的目标是帮助开发人员创建自己的自定义LLM应用程序。在这种机制的帮助下,RAG 可用于生成高度准确和相关的输出,否则LLMs基础知识是不可能实现的。A3:是的,可以结合这两个平台的强大功能为您的用例开发解决方案。原创 2024-07-20 16:12:33 · 803 阅读 · 0 评论 -
LLM之Prompt(四)| OpenAI、微软发布Prompt技术报告
生成式人工智能 (GenAI) 系统正越来越多地部署在各行各业和研究机构。开发人员和用户通过使用提示或提示工程与这些系统进行交互。虽然提示是一个广泛提及且被研究的概念,但由于该领域的新生,存在相互矛盾的术语和对构成提示的本体论理解不足。本文通过对提示技术的分类和使用案例,构建对提示的结构化理解。作者还提供了 33 个词汇术语的综合词汇表、58 种纯文本提示技术的分类法和 40 种其他模态技术的分类法。作者进一步对自然语言prefix提示进行了整体分析。原创 2024-07-15 11:33:38 · 1303 阅读 · 0 评论 -
LLM之RAG实战(四十一)| 使用LLamaIndex和Gemini构建高级搜索引擎
要使用 LlamaIndex 构建用于混合搜索的自定义检索器,我们首先需要定义架构,尤其是配置合适的节点。在我们的例子中,使用 LlamaIndex 来构建自定义检索器,使用 Gemini 来构建嵌入模型和LLM推理,并使用 PyPDF 来构建数据连接器,因此,需要安装所需的库。一旦数据被解析为节点,LlamaIndex 就会提供一个存储上下文,它提供默认的文档存储,用于存储数据的向量嵌入。为了测试其有效性,我们使用一个包括上下文的提示和一个不包括上下文的提示来评估生成的响应。原创 2024-07-08 14:41:18 · 1457 阅读 · 0 评论 -
LLM漫谈(七)| 使用PyTorch从零构建LLM
因此,我们将使用来自 Huggingface 的数据集,名为“Helsinki-NLP/opus-100”,它有 100 万对英语-马来语训练数据集,足以获得良好的准确性,并且在验证和测试数据集中各有 2000 个数据。:Feedfoward Network使用深度神经网络来学习两个线性层(第一层有d_model个节点,第二层有d_ff节点,根据注意论文分配的值)的所有特征,并将 ReLU 激活函数应用于第一线性层的输出,为嵌入值提供非线性,并应用 dropout 以进一步避免过拟合。原创 2024-06-19 16:25:13 · 1226 阅读 · 0 评论 -
LLM之RAG实战(四十)| 使用LangChain SQL Agent和MySQL搭建多层RAG ChatBot
在第二层,SQL Agent首先获取到用户的问题,然后要求 LLM 根据用户的问题创建 SQL 查询,使用内置函数在MySQL数据库上运行查询。在这里,我们使用的是 ChatPromptTemplate,如果你真的研究它,你会看到它是如何专门编写的,用于创建和运行 SQL 查询。在下一段代码中,将使用上一个代码块中定义的变量创建 QA 链,将消息添加到聊天记录中,然后运行链以获取改进的查询。这是代码的最后一部分,它将首先运行第一层以获取改进的查询,然后我们使用该改进的查询来获得最终响应。原创 2024-06-14 10:30:09 · 2037 阅读 · 2 评论 -
LLM之RAG实战(三十九)| 高级RAG技术全面解析(附代码)
在检索步骤中,用户的查询也被转换为嵌入,此嵌入用于在向量数据库中搜索最相关的文本数据。最后,在生成步骤中,查询会使用先前检索到的相关文档进行增强,大型语言模型会使用此增强的提示来生成对用户问题的答案。下一步,它使用 Faiss 执行向量搜索,Faiss 返回前五个最接近的文档的索引,这些索引用于根据文档的排名创建反向分数文档(即,最接近的文档得分最高)。上面提供的伪代码概述了使用机器学习根据相关性对文档进行重新排序的方法,具体来说,是通过预测用户根据过去的交互找到相关文档的可能性。原创 2024-06-05 14:17:14 · 2068 阅读 · 1 评论 -
LLM之RAG实战(三十八)| RAG分块策略之语义分块
这意味着,虽然块的大小不会完全相同,但它们仍然具有相似的大小,并可以利用固定大小块和重叠的优点。:该方法不像上述两种方法一样,它不会使用一定数量的字符或递归过程,而是基于文档的逻辑部分(如段落或小节)来生成对齐的块。我们可以看到,语义分块和Naive分块的结果几乎相同,只是Naive分块对答案的真实表示更好,与语义分块的0.88分相比,得分为0.95。语义分块包括获取文档中每个句子的嵌入,比较所有句子的相似性,然后将嵌入最相似的句子分组在一起。这里的假设是,我们可以使用单个句子的嵌入来生成更有意义的块。原创 2024-05-01 01:13:08 · 3597 阅读 · 0 评论 -
LLM之RAG理论(十一)| 面向生产的RAG应用程序的12种调整策略指南
请注意,虽然用于语义搜索的所用相似性度量是一个可以更改的参数,不需要进行实验,而应该根据所使用的嵌入模型进行设置(例如,text-embedding-ada-002支持余弦相似性或multi-qa-MiniLM-l6-cos-v1支持余弦相似、点积和欧几里得距离)。这取决于您拥有的数据类型,例如,如果您的输入数据是代码,而不是Markdown文件,则需要使用不同的分块技术。如果元数据不足以提供额外的信息来从逻辑上分离不同类型的上下文,可能需要尝试使用多个索引,例如,可以对不同类型的文档使用不同的索引。原创 2024-04-29 17:48:28 · 921 阅读 · 0 评论 -
LLM漫谈(六)| 复旦MOSS提出数据配比scaling law
虽然数据混合定律使我们能够在未见过的混合数据上预测训练模型的性能,但满足该定律的要求涉及跨不同混合物训练多个模型,并且模型大小和tokens计数与目标模型相同。此外,我们必须对每个目标模型大小和训练数据集重复此过程(一个想法是将使用少量标记训练的小型模型上的优化训练混合物转移到大型模型和大量训练数据的训练上。对于所有模型,将批量大小设置为 1M 令牌,从而转化为 1B 模型的 100k 步和小模型的 30k 步,并应用余弦学习率衰减,并进行 2k 步的预热,在第 100k 步时衰减到最大学习率的 0.1。原创 2024-04-25 14:26:22 · 1478 阅读 · 0 评论 -
LLM之RAG实战(三十七)| 高级RAG从理论到LlamaIndex实现
alpha参数指定矢量搜索和基于关键字的搜索之间的权重,其中alpha=0表示基于关键字的检索,alpha=1表示纯矢量搜索。在概述了高级RAG技术(可分为预检索、检索和后检索技术)之后,本文使用LlamaIndex进行编排,实现了一个简单而高级的RAG管道。由于整个文档太大,无法放入LLM的上下文窗口,因此需要将其划分为较小的文本块,这些文本块在LlamaIndex中称为Nodes。检索阶段旨在识别最相关的上下文。除了矢量搜索之外,还有其他检索技术,例如混合搜索,是指将矢量搜索与基于关键字的搜索相结合。原创 2024-04-01 14:19:31 · 2209 阅读 · 0 评论 -
LLM之RAG实战(三十六)| 使用LangChain实现多模态RAG
但是,这个模型不足以解释图像中的信息,例如,在某些情况下,图像中存在与数字相关的信息,或者数据库中的图像类型相似,嵌入无法从数据库中检索相关图像。对于split_image_text_types函数,使用CLIP嵌入获取相关图像后,还需要将图像转换为base64格式,因为GPT-4-Vision的输入是base64格式。如果使用多模态RAG,这两种方法是合适的。针对上述情况,我们可以使用多模态大模型来解决,比如GPT-4-Vision,它有非常好的图像理解能力,可以理解图像内部发生的事情。原创 2024-03-29 14:17:04 · 2892 阅读 · 0 评论 -
LLM之RAG实战(三十五)| 使用LangChain的3种query扩展来优化RAG
RAG有时无法从矢量数据库中检索到正确的文档。比如我们问如下问题:从1980年到1990年,国际象棋的规则是什么?RAG在矢量数据库中进行相似性搜索,来查询与国际象棋规则问题相关的相关文档。然而,在某些情况下,我们的向量数据库没有存储完整的信息,例如,我们的矢量数据库没有存储不同年份的规则。这样,数据库可以返回与国际象棋规则相关但与特定问题不直接相关的文档。针对上述情况,我们可以采用查询扩展技术,该技术可以对用户的原始查询生成更全面、信息更丰富的搜索。这个新生成的查询将从矢量数据库中获取更多相关文档。原创 2024-03-28 23:48:33 · 1720 阅读 · 0 评论 -
LLM之RAG实战(三十四)| 使用LangChain的三个函数来优化RAG
在某些情况下,我们的向量数据库中的每个块中的令牌数量都很高,并且每个块有时会包含一些不相关的信息。然而,基本RAG有时候并不总是有很好的效果的,有可能从向量数据库中检索出与用户提示不相关的文档,导致LLM无法总结出正确的答案。也许,我们的块很短,矢量数据库存储了很多块。Langchain提供了对应的函数来解决上述问题,该函数可以帮助重新排序相关文档,这样可以确保相关文档位于文档列表的开头和末尾。当LLM对这么多文档提出问题时,在某些情况下,LLM无法理解位于检索文档中间的文档的上下文。原创 2024-03-28 11:25:08 · 910 阅读 · 0 评论 -
LLM之RAG实战(三十三)| 探索RAG在Table的应用
(m)首先,应用类别(a)到(d)中的一种方法,将文档中的所有表格解析为图像形式,然后直接将所有表格图像和用户的查询发送到多模态LLM(如GPT-4V等)并返回答案。这些框架可以对整个文档进行全面的解析,并从解析的结果中提取与表相关的内容。(n)使用(m)提取的图像格式的表格,然后使用OCR模型识别表格中的所有文本,然后直接将表格中的全部文本和用户的查询发送到LLM并直接返回答案。这种方法的优点是,它可以有效地解析表,同时综合考虑表摘要和表之间的关系,而且还不需要多模型LLM的需求,从而节省了成本。原创 2024-03-20 13:53:09 · 3389 阅读 · 0 评论 -
LLM之RAG实战(三十二)| 使用RAGAs和LlamaIndex评估RAG
第二个和第三个问题的上下文精度为0,表明检索到的上下文中的相关上下文没有排在最前面。此外,忠实度得分并不低,这表明答案主要是从上下文中得出或总结的,可以得出结论,答案不是由于LLM的幻觉而产生的。在RAGAs中,如果您想使用另一个LLM(如Gemini)来使用LlamaIndex进行评估,即使在调试了RAGAs的源代码后,我也没有在版本0.0.22中找到任何有用的方法。此外,我们发现,尽管我们的上下文相关性得分较低,gpt-3.5-turb-16k(RAGA的默认模型)仍然能够从中推断出答案。原创 2024-03-19 14:47:20 · 2500 阅读 · 1 评论 -
LLM之RAG实战(三十一)| 探索RAG重排序
当检索器从索引集合中检索多个上下文时,这些上下文与用户的查询的相关性可能不同,一些上下文可能非常相关(在图1中用红框突出显示),而另一些上下文可能只有轻微的相关甚至不相关(在图1中用绿框和蓝框高亮显示)。重新排序的任务是评估这些上下文的相关性,并优先考虑最有可能提供准确和相关答案的上下文,让LLM在生成答案时优先考虑这些排名靠前的上下文,从而提高响应的准确性和质量。提示LLM重新排序的方法的成本是较低的,以下是使用RankGPT[4]的演示,该演示已集成到LlamaIndex[5]中。原创 2024-03-17 12:09:23 · 3164 阅读 · 0 评论 -
LLM之RAG理论(十)| RAT:一种协同CoT和RAG的 AI 提示策略,助力解决长任务推理和生成
特别是,所提出的方法——检索增强的思想(RAT):利用检索到的与任务查询相关的信息逐一修正每个思考步骤,在生成初始零样本CoT之后,将RAT应用于GPT-3.5、GPT-4和CodeLLaMA-7b大大提高了它们在各种长期范围内的性能生成任务;其次,设计一种渐进的方法,而不是用完整的CoT进行检索和修改并立即产生最终响应,其中LLM在CoT(一系列子任务)之后逐步生成响应,并且只有当前思维步骤将根据任务提示检索到的信息、当前和过去的CoT进行修改。可以简单地用作最后模型的响应,例如具体任务规划。原创 2024-03-16 15:30:58 · 1804 阅读 · 0 评论 -
LLM之RAG实战(三十)| 探索RAG语义分块策略
proposition被定义为文本中的原子表达式,每个命题都封装了一个不同的事实,并以简洁、自包含的自然语言格式呈现。然后,将多个连续句子的这些向量表示输入到Bi-LSTM(图4(b))或另一个BERT(图4),以预测每个句子是否是文本分割边界。最常用的分块方法是基于规则的,采用固定的块大小或相邻块的重叠等技术。然而,这种方法依赖于LLM,这是相对昂贵的。然而,在实际应用中,由于严格的预定义规则(块大小或重叠部分的大小),基于规则的分块方法很容易导致检索上下文不完整或包含噪声的块大小过大等问题。原创 2024-03-15 16:29:52 · 2055 阅读 · 1 评论 -
LLM之RAG实战(二十九)| 探索RAG PDF解析
换句话说,它将文档的每一行都视为一个由换行符“\n”分隔的序列,这会妨碍段落或表格的准确识别。解析PDF文档的挑战在于准确提取整个页面的布局,并将包括表格、标题、段落和图像在内的内容翻译成文档的文本表示。例如,如果用户想知道图9中2.1节的主要内容,通过准确提取2.1节的标题,并将其与相关内容一起作为上下文发送给LLM,最终答案的准确性将显著提高。否则,它将被视为右列的一部分。对于RAG来说,从文档中提取信息是一种不可避免的场景,确保从源文件中提取出有效的内容对于提高最终输出的质量至关重要。原创 2024-03-13 17:48:56 · 2711 阅读 · 1 评论 -
LLM之RAG实战(二十八)| 探索RAG query重写
2.将生成的假设文档输入编码器,将其映射到密集向量f(dk),编码器具有过滤功能,过滤掉假设文档中的噪声。在密集检索中,新查询表示为q+,是原始查询(q)和伪文档(d')的简单级联,由[SEP]分隔:q+=concat(q,[SEP],d')。我们可以看到,通过将原始查询“后退”到更抽象的问题,并使用抽象查询和原始查询进行检索,LLM提高了其遵循正确推理路径找到解决方案的能力。此外,还有一些方法,如查询路由、将查询分解为多个子问题等,它们不属于查询重写,但它们是预检索方法,这些方法将来将有机会引入。原创 2024-03-08 15:53:16 · 2652 阅读 · 0 评论 -
LLM之RAG实战(二十七)| 如何评估RAG系统
总之,“人在回路反馈”不仅仅是收集人类的见解,而是创建一个动态的、适应性强的人工智能,可以微调其行为,更好地为用户服务。这种迭代过程确保了我们的RAG+LLM应用程序保持在最前沿,不仅提供了答案,而且提供了上下文感知的、微妙的响应,反映了对用户需求的真正理解。通过自动化流程,您可以确保您的评估不仅是彻底的,而且是高效的迭代,从而实现快速的优化和细化。例如,如果您的团队正在开发一个内部LLM,该LLM是针对您的特定领域和数据进行训练的,那么该过程通常需要开发人员、Prompt工程师和数据科学家的合作。原创 2024-02-21 00:57:37 · 2272 阅读 · 0 评论 -
LLM之RAG实战(二十六)| 使用llamaindex-cli无需一行代码即可实现RAG
您可以自定义llamaindex-cli以使用任何LLM模型,甚至是像Mixtral 8x7b到Ollama这样的本地模型,并且您可以构建更高级的查询和检索技术。更多详细资料,请查看文档[1]。现在,需要将工具指向一些可以摄取到本地矢量数据库中的本地文件。你甚至可以在你的终端内打开聊天界面!只需运行llamaindex-cli-rag-chat,并开始询问有关您获取的文件的问题。原创 2024-02-10 16:40:02 · 691 阅读 · 0 评论 -
LLM之RAG实战(二十五)| 使用LlamaIndex和BM25重排序实践
通过将BM25等最先进的排名算法与先进的重新排序技术和GPT-4或Mistral等尖端语言模型相集成,advanced RAG为处理复杂的查询任务提供了一个强大而灵活的解决方案。无论是在提高搜索引擎的准确性、提高聊天机器人中响应的相关性,还是在推进知识系统的前沿领域,高级RAG证明了人工智能驱动的语言理解和信息处理的不断发展和成熟。使用本地LLM和本地嵌入模型(Mistral)修改代码,在上面的代码中,只需注释现有的OpenAI GPT-4 LLM并使用下面的代码。之类的标准来调整排序。原创 2024-02-10 14:56:15 · 2241 阅读 · 0 评论 -
LLM之RAG实战(二十四)| LlamaIndex高级检索(三):句子窗口检索
上面的图片,相关的句子是红色的,然后中间的相关句子以及句子上面和下面窗口句子一起传递给LLM以执行其响应(RAG的生成部分)。我们可以控制相关句子周围的句子窗口的大小。当句子窗口很小时,LLM将生成的响应将具有较低的groundedness,因为上下文没有向LLM提供足够的信息——因此,它开始使用从训练数据中获得的现有知识,我们称之为幻觉。相反,如果窗口大小太大,则由于LLM被提供了大量信息作为其最终响应的基础,因此,它最终会偏离所提供的信息,因为它太大,无法用其中的所有这些信息组成响应。原创 2024-02-05 21:50:12 · 1434 阅读 · 0 评论 -
LLM之RAG实战(二十三)| LlamaIndex高级检索(二):父文档检索
在查询期间,我们对较小的块执行搜索,并将他们的父块作为上下文传递给LLM。首先检索与回答查询最相关的较小数据段,然后使用它们相关的父标识符访问并返回将作为上下文传递给LLM(大型语言模型)的较大父数据块。文件夹中,这样做的目的是为了保留我们从上一篇文章中构建的基本RAG管道的度量,方便进行性能比较,如果您不想这样做,则不必这样做。在上一篇文章中,我们介绍了基本RAG的构建,也探讨了RAG管道中从小到大检索技术的两种主要技术:父文档检索和句子窗口检索。您可以使用下面的代码来评估管道的性能。原创 2024-02-05 18:43:32 · 1389 阅读 · 0 评论 -
LLM之RAG实战(二十二)| LlamaIndex高级检索(一)构建完整基本RAG框架(包括RAG评估)
解决这一问题的一种方法是让较小的块与父块(本例中为原始的100字块)相关,这样LLM将有更多的上下文来作为答案的基础,而不是试图生成自己的幻觉信息。换言之,10个单词的每个较小组块将与100个单词的较大组块相关,并且当给定的较小组块(10个单词组块)被识别为与回答用户问题相关时,父组块(100个单词组组块)将被检索并被发送到LLM。在传统的RAG应用程序中,我们使用相同的数据块来执行搜索检索,并将相同的块传递给LLM,以使用它来合成或生成答案。可以注意到的一件事是,文档在一个块中,让我们将其拆分为多个块。原创 2024-02-05 16:40:25 · 2432 阅读 · 0 评论 -
LLM之RAG理论(九)| 如何在LLM应用程序中提高RAG结果:从基础到高级
Small2big、递归或上下文感知检索是一种最初检索较小的数据块,由于更具体和更详细,这些数据块更有可能与查询匹配,然后继续检索父文档或围绕这些较小数据块的较大文本块,以包括更多上下文的技术。如果您的聊天机器人或代理可以处理多个下游任务和不同格式的用户查询,您可以考虑使用查询路由,在该路由中,您可以将查询动态路由到不同的RAG进程。这是我自己的一个例子。例如,如果您的文本数据包含许多语义非常相似的块,但仅在某些关键字上有所不同,或者如果您的文字数据包含太多通用文字,则最好使用精确的关键字匹配进行搜索。原创 2024-02-03 19:50:58 · 1021 阅读 · 0 评论 -
LLM之RAG理论(八)| 提高RAG性能的9种技术
想象一下,搜索数百万电子商务产品的矢量数据库,查询“Adidas ref XYZ sneakers white”,最热门的结果包括白色阿迪达斯运动鞋,但没有与确切的XYZ参考相匹配。研究表明,检索到的上下文中的噪声会对RAG性能产生不利影响,更准确地说,是LLM生成的答案。然而,有时,用户以几个单词或短句的形式制定的输入查询与索引文档之间会出现错位,索引文档通常以长句甚至段落的形式编写。当用户与RAG交互时,用户的查询格式不一定是很好的,也不能完全表达与向量库中的文档有效匹配的意图。原创 2024-01-25 17:47:31 · 1778 阅读 · 0 评论 -
LLM之RAG实战(二十一)| 使用LlamaIndex的Text2SQL和RAG的功能分析产品评论
通过将结构化SQL查询与自然语言处理的抽象无缝结合,我们展示了一种将模糊的用户查询转换为精确、信息丰富的答案的简化方法。有了这种方法,企业现在可以有效地筛选堆积如山的评论,提取用户情感的本质,并做出明智的决定。无论是衡量产品的整体情绪、了解特定功能反馈,还是跟踪评论随时间的演变,LlamaIndex中的Text2SQL+RAG方法都是数据分析新时代的先驱。我们设计了一种方法,通过给。当我们将用户的问题分解为两部分时,第一步是将“自然语言数据库查询”转换为可以针对我们的数据库运行的实际SQL查询。原创 2024-01-25 10:28:54 · 1656 阅读 · 0 评论 -
LLM之RAG理论(七)| 高提升RAG检索的四种方法
LoRA是大模型微调的技术之一,它来自论文《LoRA: Low-Rank Adaptation of Large Language Models》[9],基本原理是冻结大模型参数,在原始模型中添加少量的可训练参数AB矩阵来适应特定领域知识,由于微调的参数量较少,比较适合低资源的场景和用户。有时候直接对原问题生成答案效果不佳,这时我们可以通过要求LLM首先将用户的查询分解为子问题,然后,文档检索器可以检索每个较小的问题,这样可以提供更丰富的上下文。对于每个检索到的文档集,都会生成相应子问题的答案。原创 2024-01-24 19:08:32 · 1786 阅读 · 0 评论 -
LLM之RAG实战(二十)| RAG分块策略的五个level
在RAG系统中,包括检索和生成两大组件,而检索的关键是对数据的分块策略,本文将根据Greg Kamradt的视频(https://www.youtube.com/watch?递归分块使用一组分隔符,以分层和迭代的方式将文本划分为更小的块。如果最初分割文本的尝试没有产生所需大小的块,则该方法会使用不同的分隔符递归地调用结果块,直到达到所需的块大小。这种方法考虑了内容的流动和结构,但可能不是缺乏明确结构的文件。类,该类允许使用块之间的上下文关系将文档拆分为块,使用嵌入相似性自适应地选择句子之间的断点。原创 2024-01-24 15:37:12 · 2116 阅读 · 0 评论 -
LLM之RAG理论(六)| 高级RAG指南和技巧
在基本的RAG场景中,大致有如下步骤:首先将文本划分为多个块,使用Transformer Encoder模型将这些块嵌入到向量中,将这些向量存储到向量数据库并建立索引,查询会检索向量数据库中相关的上下文,这些上下文和查询一起生成最终的LLM提示,并引导LLM合成响应。基本RAG需要从外部知识数据库中获取文档,然后,将这些文档与用户的查询一起被传输到LLM,用于生成响应。最基本、最简单的RAG系统有时候会检索不到相关的上下文,因此需要一些更高级的方法来增强RAG系统,比如:查询转换、重排序等。原创 2024-01-22 18:25:34 · 1208 阅读 · 0 评论 -
LLM之RAG实战(十九)| 利用LangChain、OpenAI、ChromaDB和Streamlit构建RAG
通过Streamlit的初始化和布局设计,用户可以上传文档和管理数据。我们的RAG聊天应用程序利用了LangChain的RetrievalQA和ChromaDB,通过从ChromaDB的嵌入式数据中提取的相关、准确的信息有效地响应用户查询,体现了先进的Generative AI功能。本文,我们探讨了使用OpenAI、ChromaDB和Streamlit构建LLM应用程序的复杂性,介绍了设置环境、处理文档、创建和存储嵌入以及构建用户友好的聊天界面,展示了RAG和ChromaDB的强大组合。原创 2024-01-21 16:24:59 · 1321 阅读 · 0 评论 -
LLM之RAG实战(十八)| 使用Query转换来改进RAG效果
但是,多步骤的方法也是有用的。在测试时,我们只需向模型提供提示和问题,它就会自动生成必要的后续问题,以连接事实,组成推理步骤,并决定何时停止。子问题分解最适用于可以分解为更简单的子问题的问题,例如比较尼古拉斯·凯奇和莱昂纳多·迪卡普里奥的教育。这一次,生成子问题非常有用,因为我们需要比较两条不同的信息——两个不同的人的教育背景,每个子问题都可以使用检索到的上下文独立回答。对于该查询,检索器只选择有关莱昂纳多·迪卡普里奥教育的相关文本块,而尼古拉斯·凯奇的块内容是不相关的,因此无法进行准确的比较。原创 2024-01-21 13:16:33 · 1395 阅读 · 0 评论 -
LLM之RAG实战(十七)| 高级RAG:通过使用LlamaIndex重新排序来提高检索效率
现在,假设前几篇文章是关于“南极企鹅”的,但你真正想要的是关于“动物园栖息地的企鹅”的信息,那么就需要对这几篇文章进行重新排序了,比如使用用户行为、特定关键字或更复杂的算法来进行该操作。衡量检索到的结果中至少包含一个与基本事实相关的项目的查询的比例或百分比。基本RAG的检索是静态的,会检索到固定数字(k)个相关文档,而如果查询需要更多的上下文(例如摘要)或更少的上下文,该怎么办?然而,尽管有这些优点,基于嵌入的检索有时准确性不高,并返回与查询相关的无关上下文,这会大大降低RAG系统的整体质量。原创 2024-01-20 18:20:13 · 1485 阅读 · 0 评论 -
LLM之LangChain(四)| 介绍LangChain 0.1在可观察性、可组合性、流媒体、工具、RAG和代理方面的改进
LangChain提供了许多输出解析器,用于将LLM输出转换为更合适的格式,其中许多解析器支持JSON、XML和CSV等结构化格式的流式部分结果。最近几个月,该团队在LangChain表达式语言(LCEL)方面投入了大量资金,以实现更好的编排,因为我们都需要一种简单而声明的方式来组合链。对于大规模文本任务,LangChain提供了索引API,允许用户在忽略未更改的部分的同时重新插入内容,从而为大容量工作负载节省了时间和成本。或者先对其进行硬编码以调用特定的工具,使用户能够构建更复杂、更高效的语言模型。原创 2024-01-18 15:33:30 · 1693 阅读 · 0 评论 -
LLM之RAG实战(十六)| 使用Llama-2、PgVector和LlamaIndex构建LLM Rag Pipeline
它是为处理高维矢量数据而定制的,就像Llama-2等语言模型生成的数据一样。在这个片段中,我们从llama-2包中导入LlamaModel,并使用特定的模型变体(例如“llama2-large”)对其进行初始化,该模型将用于文本生成和矢量化。Hugging Face的transformer库是使用Llama-2等模型的基石,它为自然语言处理任务提供了对预先训练的模型和实用程序的轻松访问。RAG Pipeline的核心是一个函数,它接受用户查询,从数据库中检索相关上下文,并基于查询和检索到的上下文生成响应。原创 2024-01-16 23:31:30 · 1922 阅读 · 4 评论 -
LLM之RAG实战(十五)| RAG的自动源引文验证技术
方法指向我们的合同文件夹和特定的合同,然后这个方法将找出文档类型,通过解析文档特定的格式(例如PDF或Word文档)来提取内容,对文本进行分组,然后可以应用一个可选的过滤器,然后作为一个“上下文”进行批处理和打包,为推理做好准备,这样我们就不必再考虑它,也不必进行所有的数据操作——所有这些都是在这个强大的方法调用的幕后处理的。——这将审查LLM响应,识别响应中的任何数字,然后在源材料中查找匹配的数字值,如果提供,则会提供一个包含已确认事实的词典,显示事实、状态,以及提供确认的源和页码文本片段。原创 2024-01-15 11:09:55 · 1540 阅读 · 0 评论 -
LLM之RAG理论(五)| 使用知识图谱增强RAG
例如,依赖简单的语义相似性搜索进行上下文检索可能并不总是有效的,尤其是当查询缺乏足够的上下文时,或者当相关信息分散在庞大的文本语料库中时。无论是通过利用LLM的知识还是构建广泛的KG文本语料库,这一过程都显著增强了KG到文本的生成,特别是在训练数据有限的情况下。知识图谱表示了任意两个实体之间的关系,在这个结构中,节点表示着诸如人、地点或事件之类的实体,而边表示这些实体之间的连接。例如,Wikidata汇编了维基百科文章中的大量知识,产生了大量多样的KGs,其中包含数百万个实体和多种语言的关系。原创 2024-01-14 15:50:25 · 3584 阅读 · 0 评论