以下为您推荐一些 RAG 实战教程:
其中,她是陈美嘉,这里是人设中的设定。吵架的经过是知识库中的内容。在我提问了之后,大模型去知识库里找到了相关内容,然后回复了我。这就是一个简单的正确回复的demo示例。然而,我们会发现,有时候她的回答会十分不准确。图二明显回答的牛头不对马嘴。图三是知识库截图,其中是有“一菲为美嘉找了一份助教工作”的内容的。但是回答这个问题时,AI并没有根据正确的知识库内容回答。这,就是基于知识库问答中的一个非常常见的错误场景。在其他情况下,甚至有可能出现报价错误、胡编乱造等等。这在严肃场景中,是不能接受的出错。现在应该能够直观的理解,为什么需要让大模型根据知识库回答的更加准确、更符合我们的要求。在AI领域中,优化AI更准确回答问题的过程,有一个更加专业的术语,叫做RAG。接下来,咱们进入正题,一步一步探索,如何优化回答。二、基础概念如果我们要优化幻觉问题和提高准确性,就务必要了解清楚从“问题输入”--“得到回复”,这个过程中,究竟发生了什么。然后针对每一个环节,逐个调优,以达到效果最佳化。因此,我们先深入其中了解问答全貌。
为了更好地展示结构化数据来RAG的方法的实际效果,我们以餐饮生活助手为例,给出用户提问和回复的示例,以及餐饮生活助手RAG的代码实战。餐饮生活助手是一个基于结构化数据RAG的方法的应用,它的目的是根据用户的需求,从一个大规模的餐饮数据集中检索出最合适的餐厅,并提供相关的信息和服务。餐饮数据集是一个结构化的数据集,它包含了各种各样的餐厅的信息,例如名称、类型、地址、电话、价格、评分、评论等。餐饮生活助手的核心是一个LLM,它能够根据用户的问题,提取出核心的信息和条件,并形成标准的查询语句,然后用这个查询语句去检索餐饮数据集,得到相关的数据记录,再根据这些数据记录,生成最合适的答案,输出给用户。为了实现餐饮生活助手RAG的Langchain代码实战,我们需要完成以下几个步骤:定义餐饮数据源。我们需要将餐饮数据集转化为Langchain可以识别和操作的数据源,例如数据库、文件、API等,注册到Langchain中,并提供统一的接口和方法,让LLM的代理可以方便地访问和查询数据源。例如,我们可以将餐饮数据封装为一个API后,并结构化描述该接口的调用方式,并通过以下的代码,将其注册到Langchain中:定义LLM的代理。我们需要定义一个LLM的代理,它可以根据用户的问题,提取出核心的信息和条件,并形成标准的查询语句,然后用这个查询语句去检索餐饮数据源,得到相关的数据记录,再根据这些数据记录,生成最合适的答案,输出给用户。这可以通过Langchain的代理(Agent)来实现。代理管理器可以让开发者通过简单的编程,定义不同的LLM的代理,以及它们的功能和逻辑,并提供统一的接口和方法,让用户可以方便地与LLM的代理进行交互。
1.问题解析阶段:2.接收并预处理问题,通过嵌入模型(如Word2Vec、GloVe、BERT)将问题文本转化为向量。这一步确保问题向量能有效用于后续检索。3.知识库检索阶段:4.知识库中的文档同样向量化后,比较问题向量与文档向量,选择最相关的信息片段。抽取相关信息传递给下一步骤5.信息整合阶段:6.接收检索到的信息,与上下文构建形成融合、全面的信息文本。整合信息准备进入生成阶段。7.大模型生成回答:整合后的信息被转化为向量并输入到LLM(大语言模型)。模型逐词构建回答,最终输出给用户。四、RAG实例看理论有点懵是吗?为了更理解,我们来一起看看实例。这是调试预览中的对话示例。在回复中,可以看到这里有写11条引用,3条上下文,我们具体来看下,有什么处理。一、知识库检索部分1、把输入的问题,通过Embedding做了向量化2、使用qwen语言模型把问题做了优化、添加了接近的检索词3、知识库向量检索,抽取条件包含相似度0.854、通过检索一共抽取出了11个内容块(chunk)二、大模型对话部分(因为我刷新后丢失了记录,改成说了一句:你好,所以下边的问题,变成了你好)