前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用LangChain和Qdrant进行无样板代码的问答

使用LangChain和Qdrant进行无样板代码的问答

作者头像
山行AI
发布2023-08-10 13:51:02
1K0
发布2023-08-10 13:51:02
举报
文章被收录于专栏:山行AI

前言

在人工智能兴起的当下,AI正在不断地重塑着每一个行业,而我也在不断地探索中。本文又将是一篇AI应用的干货,类似的文章之前也有过几篇,大家可以结合着来看:

基于LangChain的优秀项目资源库

localGPT——一款100%本地布署且支持LangChain的应用

RAG——使用检索增强生成构建特定行业的大型语言模型

h2oGPT——具备文档和图像问答功能且100%私密且可商用的大模型

FastChat——一个用于训练、部署和评估基于大型语言模型的聊天机器人的开放平台

使用LangChain和Qdrant进行无样板代码的问答

利用大型语言模型构建应用程序并不一定复杂。最近有很多工作致力于简化开发过程,通过几行代码即可利用已经预训练好的模型,并支持复杂的流程。LangChain[1] 提供了对不同库的统一接口,使您可以避免编写样板代码,专注于您想要带来的价值。

使用Qdrant进行问答

最近已经有数百万次的报道,但让我们再说一遍。类似ChatGPT的模型在没有提供上下文的情况下很难生成准确的陈述。它们具有一些常识,但不能保证始终产生有效的答案。因此,最好提供一些我们知道是实际的事实,这样它就可以选择有效的部分并从所有提供的上下文数据中提取它们,以给出全面的答案。矢量数据库(例如Qdrant)在这里非常有帮助,因为它们能够在庞大的知识库上执行语义搜索,这对于预先选择一些可能有效的文档至关重要,以便提供给大型语言模型。这也是LangChain中实现的一个名为VectorDBQA之一。Qdrant已与该库集成,因此可以轻松地用于构建应用程序。

我们需要什么?

令人惊讶的是,设置这些内容需要两个模型。首先,我们需要一个嵌入模型,将一组事实转换为向量,并将其存储到Qdrant中。这与任何其他语义搜索应用程序的过程相同。我们将使用其中一个SentenceTransformers模型,以便可以在本地进行托管。该模型创建的嵌入将被放入Qdrant,并用于根据查询检索最相似的文档。

然而,当我们收到一个查询时,涉及两个步骤。首先,我们要求Qdrant提供最相关的文档,并将它们简单地组合成一个单一的文本。然后,我们构建一个提示给LLM(在我们的例子中是OpenAI),其中包括这些文档作为上下文,当然还有提出的问题。因此,LLM的输入如下所示:

代码语言:javascript
复制
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”。

足够的理论!这听起来像是一个相当复杂的应用,涉及到多个系统。但是借助于与Qdrant的最新集成,使用LangChain可能只需几行代码就可以实现。我们甚至不需要直接使用QdrantClient,因为LangChain已经在后台完成了所有工作。如果您想立即查看源代码,所有处理都可以作为一个Google Colab笔记本[2]提供。

使用LangChain和Qdrant实现问答

配置

千里之行始于足下,在我们的案例中,从配置所有服务开始。我们将使用Qdrant Cloud[3],因此我们需要一个API密钥。对于OpenAI也是一样-需要从他们的网站上获取API密钥。

构建知识库[4]

我们还需要一些事实来生成答案。有很多公共数据集可用,其中之一是Natural Questions[5]。它包含从网站上抓取的整个HTML内容。这意味着我们需要进行一些预处理来提取纯文本内容。因此,我们将得到两个字符串列表-一个用于问题,另一个用于答案。

答案需要使用我们的模型之一进行向量化。sentence-transformers/all-mpnet-base-v2是其中之一的选择,但还有其他选项可用。LangChain将在一个函数调用中处理该过程的这一部分。

在循环中使用Qdrant设置问答功能[6]

VectorDBQA是一个执行上述过程的链条。首先,它从Qdrant加载一些事实,然后将它们提供给OpenAI LLM,后者应该分析它们以找到给定问题的答案。在使用之前,唯一需要做的是将这些部分组合在一起,也可以通过一个函数调用完成。

测试链条[7]

就是这样!我们可以提出一些查询,LangChain将执行所有必要的处理来在提供的上下文中找到答案。

代码语言:javascript
复制
> 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笔记本[8]。

声明

本文翻译整理自:Question Answering with LangChain and Qdrant without boilerplate - Qdrant[9],喜欢的同学请点赞、收藏。

References

[1] LangChain: https://langchain.readthedocs.io/ [2] Google Colab笔记本: https://colab.research.google.com/drive/19RxxkZdnq_YqBH5kBV10Rt0Rax-kminD?usp=sharing [3] Qdrant Cloud: https://qdrant.tech/ [4] 构建知识库: https://qdrant.tech/articles/langchain-integration/#building-the-knowledge-base [5] Natural Questions: https://ai.google.com/research/NaturalQuestions/visualization [6] 在循环中使用Qdrant设置问答功能: https://qdrant.tech/articles/langchain-integration/#setting-up-qa-with-qdrant-in-a-loop [7] 测试链条: https://qdrant.tech/articles/langchain-integration/#testing-out-the-chain [8] Google Colab笔记本: https://colab.research.google.com/drive/19RxxkZdnq_YqBH5kBV10Rt0Rax-kminD?usp=sharing [9] Question Answering with LangChain and Qdrant without boilerplate - Qdrant: https://qdrant.tech/articles/langchain-integration/

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-07-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 山行AI 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 使用LangChain和Qdrant进行无样板代码的问答
    • 使用Qdrant进行问答
      • 我们需要什么?
    • 使用LangChain和Qdrant实现问答
      • 配置
      • 构建知识库[4]
      • 在循环中使用Qdrant设置问答功能[6]
    • 测试链条[7]
      • References
  • 声明
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档