简化问答系统:简化 LangChain 与 Qdrant 的集成
构建基于大型语言模型的应用不必复杂。近期涌现出大量工作来简化开发流程,让你可以利用预训练模型,仅用几行代码即可支持复杂的流水线。LangChain 提供了不同库的统一接口,让你无需编写样板代码,专注于实现你想要带来的价值。
为什么将 Qdrant 用于 LangChain 问答系统?
近期已被提及数百万次,但我们还是再说一遍。ChatGPT 类模型在没有提供上下文的情况下,难以生成事实准确的陈述。它们具备一些通用知识,但无法保证始终产生有效的答案。因此,最好提供一些我们已知为事实的信息,这样模型就可以从中选择有效的部分,并从所有提供的上下文数据中提取它们,以给出全面的答案。向量数据库,如 Qdrant,在这里非常有帮助,因为它们在大规模知识库上执行语义搜索的能力至关重要,可以预先选择一些可能有效的文档,以便提供给 LLM。这也是 LangChain 中实现的链之一,称为 VectorDBQA
。Qdrant 已集成到该库中,因此可以轻松构建它。
双模型方法
令人惊讶的是,设置这一切需要两个模型。首先,我们需要一个嵌入模型,它将事实集合转换为向量,并将这些向量存储到 Qdrant 中。这与任何其他语义搜索应用程序的过程相同。我们将使用 SentenceTransformers
模型之一,这样可以在本地托管。该模型创建的嵌入将放入 Qdrant,并用于根据查询检索最相似的文档。
然而,当我们收到查询时,会涉及两个步骤。首先,我们请求 Qdrant 提供最相关的文档,然后简单地将它们全部合并成一个文本。然后,我们构建一个发送给 LLM(在我们的例子中是 OpenAI)的提示,其中包含这些文档作为上下文,当然也包括提出的问题。因此,LLM 的输入看起来像这样
Use the following pieces of context to answer the question at the end. If you don't know the answer, just say that you don't know, don't try to make up an answer.
It's as certain as 2 + 2 = 4
...
Question: How much is 2 + 2?
Helpful Answer:
可能会组合多个上下文文档,完全由 LLM 选择正确的内容片段。但我们的期望是,模型应仅回应 4
。
为什么需要两个不同的模型?
两者解决的任务不同。第一个模型执行特征提取,将文本转换为向量,而第二个模型则帮助文本生成或摘要。免责声明:这不是用 LangChain 解决此任务的唯一方法。在库的术语中,这种链称为 stuff
。
理论讲够了!这听起来像是一个相当复杂的应用程序,因为它涉及多个系统。但有了 LangChain,只需几行代码即可实现,这得益于最近与 Qdrant 的集成。我们甚至不需要直接使用 QdrantClient
,因为一切都已由 LangChain 在后台完成。如果你想立即查看源代码,所有处理过程都可以在 Google Colab notebook 中找到。
如何使用 LangChain 和 Qdrant 实现问答系统
步骤 1:配置
千里之行,始于一步。在我们的案例中,始于所有服务的配置。我们将使用 Qdrant Cloud,因此需要一个 API 密钥。OpenAI 也是一样 - 必须从他们的网站获取 API 密钥。
步骤 2:构建知识库
我们还需要一些将生成答案的事实。有大量公开数据集可用,Natural Questions 就是其中之一。它包含抓取自网站的完整 HTML 内容。这意味着我们需要一些预处理来提取纯文本内容。结果我们将得到两个字符串列表 - 一个用于问题,另一个用于答案。
必须使用我们的第一个模型对答案进行向量化。sentence-transformers/all-mpnet-base-v2
是一种可能性,但还有其他选项可用。LangChain 将在单个函数调用中处理这部分过程。
步骤 3:在循环中设置基于 Qdrant 的问答系统
VectorDBQA
是一种链,它执行上述过程。因此,它首先从 Qdrant 加载一些事实,然后将其馈送到 OpenAI LLM 中,LLM 应该分析这些事实以找到给定问题的答案。在使用它之前,要做的最后一件事是将所有内容组合起来,こちらも单一个函数调用即可完成。
步骤 4:测试链
就是这样!我们可以输入一些查询,LangChain 将执行所有必要的处理以在提供的上下文中找到答案。
> what kind of music is scott joplin most famous for
Scott Joplin is most famous for composing ragtime music.
> who died from the band faith no more
Chuck Mosley
> when does maggie come on grey's anatomy
Maggie first appears in season 10, episode 1, which aired on September 26, 2013.
> can't take my eyes off you lyrics meaning
I don't know.
> who lasted the longest on alone season 2
David McIntyre lasted the longest on Alone season 2, with a total of 66 days.
这种设置的好处在于,知识库可以轻松扩展新的事实,这些事实稍后将包含在发送给 LLM 的提示中。当然,前提是它们与给定问题的相似性在 Qdrant 返回的顶部结果中。
如果你想自己运行这条链,最简单的方法是打开 Google Colab notebook。