• 文章
  • Using LangChain for Question Answering with Qdrant
返回实用示例

使用LangChain进行Qdrant的问答

Kacper Łukawski

·

2023年1月31日

Using LangChain for Question Answering with Qdrant

简化问题回答:与LangChain和Qdrant的集成简化

使用大型语言模型构建应用程序不必复杂。最近发生了很多事情,以简化开发,因此您可以利用已经预训练的模型,并支持复杂的管道,只需几行代码。 LangChain 提供对不同库的统一接口,因此您可以避免编写样板代码,并专注于您想要带来的价值。

为什么在使用LangChain进行问答时选择Qdrant?

最近已经报告了数百万次,但我们再说一遍。如果没有提供上下文,类似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在后台完成。如果你想立即查看源代码,所有的处理都可以在谷歌Colab笔记本中找到。

如何使用LangChain和Qdrant实现问答

步骤 1:配置

千里之行,始于足下,在我们的案例中,始于所有服务的配置。我们将使用 Qdrant Cloud,因此我们需要一个API密钥。OpenAI也是如此 - API密钥必须从他们的网站获得。

步骤 2:构建知识库

我们还需要一些事实,以便生成答案。有很多公共数据集可用,自然问题就是其中之一。它包含了从其抓取的网站的全部HTML内容。这意味着我们需要进行一些预处理,以提取纯文本内容。因此,我们将会有两个字符串列表 - 一个用于问题,另一个用于答案。

答案必须与我们模型的第一个进行矢量化。sentence-transformers/all-mpnet-base-v2是一个可能的选择,但还有其他一些选项可用。LangChain将在单个函数调用中处理该过程的部分。

步骤 3:在循环中使用 Qdrant 设置 QA

VectorDBQA 是一个执行上述过程的链条。因此,它首先从 Qdrant 中加载一些事实,然后将它们输入到 OpenAI 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返回的顶级结果中。

如果你想自己运行这个链,最简单的方式是打开谷歌 Colab 笔记本

这个页面有用吗?

感谢您的反馈!🙏

我们很遗憾听到这个消息。 😔 你可以 编辑 这个页面在 GitHub上,或者 create 一个 GitHub 问题。