LangChain 查询使用指「北」
一只鹦鹉加上一根链条,组成了时下最流行的 AI 话题热门榜选手——LangChain。
LangChain 是一种 AI 代理工具,可以为以 ChatGPT 为代表的额大语言模型(LLM)增添更多功能。此外,LangChain 还具备 token 和上下文管理功能。本文主要通过查询 GPT 和查询文档两个示例[1]介绍如何使用 LangChain。
安装 LangChain
LangChain 是用于构建 LLM 应用的框架,使用 LangChain 可以快速构建 CVP 框架。LangChain 为 LLM 提供了两大核心功能:
数据感知能力:将外部数据源纳入 LLM 应用的能力。
代理能力:使用其他工具的能力。
与许多 LLM 工具一样,默认情况下,LangChain 使用的 LLM 是 OpenAI 的 GPT。因此,想要使用 LangChain,需要先从 OpenAI 获取 API 密钥[2]。LangChain 支持 Python 和 JavaScript。本教程展示的是 Python 示例代码,大家可以通过运行 pip install langchain
来安装 LangChain。
安装结束后就可以用 LangChain 查询文档、向量,当然也可以把 LangChain 当作 LlamaIndex 一样,让它与 GPT 的交互更丝滑。
查询 GPT
大多数人都是因为 ChatGPT 才对 GPT 有所了解。ChatGPT 是 OpenAI 的旗舰产品,是一个允许用户与 GPT 进行交互的界面。不过,如果想以编程的方式与 GPT 进行交互,那么就需要一个像 LangChain 这样的查询接口。
LangChain 为 GPT 提供了一系列的查询接口,从【通过一个 prompt 提问】的简单接口,到【通过多个问题让 GPT 进行上下文学习】的复杂接口,一应俱全。
接下来先介绍通过一个 prompt 模板将提问链接在一起的方法。
首先,安装 Python 库。大家可以用
pip install langchain openai python-dotenv tiktoken
安装。笔者本人会使用python-dotenv
,因为个人习惯在一个.env
文件中管理环境变量,不过大家可以根据自己的偏好选择如何加载 OpenAI API 密钥。准备好 OpenAI API 密钥后,必须加载 LangChain 工具。我们需要从
langchain
导入PromptTemplate
和LLMChain
,并从langchain.llms
导入OpenAI
。本示例中使用 OpenAI 的文本模型text-davinci-003
。随后,创建一个查询 GPT 的模板,下述模板告诉 GPT 每次只回答一个问题:
创建一个字符串(string),括号内输入变量,类似于
f-strings
。
使用
PromptTemplate
从字符串创建模版,且指定输入变量。准备好提示模板后,可以创建 LLM 链条(chain),传入 prompt 和选择的 LLM。
然后就可以提问了!输入问题后,就可以通过 run
来运行 LLM chain 导入问题并获得答案。
下图为得到的答案:
查询文档
GPT 和 LLM 的痛点之一就是它们受限于训练时所使用的数据。这些训练数据是模型能够获取到的知识,这意味着随着时间的推移,在旧数据上训练的 LLM 不仅可能无法处理上下文,其答案准确性也有待提高。将 LangChain 和向量数据库结合可以解决这个问题,例如开源的向量数据库 Milvus。
本示例将通过查询文档的例子,演示如何通过 LangChain 将最新的知识添加到 LLM 应用,并进行语义检索。在本示例中,我们使用 Zilliz Cloud 的文档[3],大家可以通过 Colab[4] 获取源码。请先运行 pip install langchain openai milvus pymilvus python-dotenv tiktoken 安装需要使用到的库。
与前面的示例一样,首先加载 OpenAI API 密钥和 LLM。然后用 Milvus Lite 启动向量数据库,这样可以直接在 notebook 中运行 Milvus。
现在可以开始学习如何查询文档了。这次从 LangChain 导入了很多内容,需要 OpenAI Embeddings、文本字符拆分器、Milvus 向量数据库、加载器和问答检索链。
首先,设置一个加载器并加载
urls
链接中的内容。本例中,将加载 Zilliz Cloud 介绍的文档,即加载链接'https://zilliz.com/doc/about_zilliz_cloud'
。其次,将文档拆分并将其存储为 LangChain 中的一组文档。
接着,设置 Milvus 向量数据库。在本例中,我们为刚才通过
UnstructuredURLLoader
和CharacterTextSplitter
获取的文档数据创建了一个 Milvus 集合(collection)。同时,还使用了 OpenAI Embeddings 将文本转化为 embedding 向量。准备好向量数据库后,可以使用
RetrievalQA
通过向量数据库查询文档。使用 stuff 类型的链,并选择 OpenAI 作为 LLM,Milvus 向量数据库作为检索器。
接下来,大家就可以查询啦!通过 run
运行查询语句。当然,最后别忘了关闭向量数据库。
以上就是 LangChain 的安装和使用方法,如果大家在使用过程中还有疑问,可搜索小助手微信 “zilliz-tech” 进入我们的微信群进行交流。
(本文作者 Yujian Tang 系 Zilliz 开发者布道师;陈室余系 Zilliz 软件工程师)
如果在使用 Milvus 或 Zilliz 产品有任何问题,可添加小助手微信 “zilliz-tech” 加入交流群。
欢迎关注微信公众号“Zilliz”,了解最新资讯。
评论