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。
import os
from dotenv import load_dotenvimport openai
load_dotenv()openai.api_key = os.getenv("OPENAI_API_KEY")
from langchain import PromptTemplate, LLMChain
from langchain.llms import OpenAI
davinci = OpenAI(model_name="text-davinci-003")
multi_template = """Answer the following questions one at a time.
Questions:
{questions}
Answers:
"""
- 使用 PromptTemplate 从字符串创建模版,且指定输入变量。
- 准备好提示模板后,可以创建 LLM 链条(chain),传入 prompt 和选择的 LLM。
然后就可以提问了!输入问题后,就可以通过 run
来运行 LLM chain 导入问题并获得答案。
llm_chain = LLMChain(
prompt=long_prompt,
llm=davinci
)
qs_str = (
"Which NFL team won the Super Bowl in the 2010 season?\\\\n" +
"If I am 6 ft 4 inches, how tall am I in centimeters?\\\\n" +
"Who was the 12th person on the moon?" +
"How many eyes does a blade of grass have?"
)print(llm_chain.run(qs_str))
下图为得到的答案:
查询文档
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。
import os
from dotenv import load_dotenv
import openai
load_dotenv()
openai.api_key = os.getenv("OPENAI_API_KEY")
from langchain import PromptTemplate, LLMChain
from langchain.llms import OpenAI
davinci = OpenAI(model_name="text-davinci-003")
multi_template = """Answer the following questions one at a time.
Questions:
{questions}
Answers:
"""
现在可以开始学习如何查询文档了。这次从 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 运行查询语句。当然,最后别忘了关闭向量数据库。
from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.text_splitter import CharacterTextSplitter
from langchain.vectorstores import Milvus
from langchain.document_loaders import UnstructuredURLLoader
from langchain.chains import RetrievalQA
loader = UnstructuredURLLoader(urls=['https://zilliz.com/doc/about_zilliz_cloud'])
documents = loader.load()
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
docs = text_splitter.split_documents(documents)
embeddings = OpenAIEmbeddings()
vector_db = Milvus.from_documents(
docs,
embeddings,
connection_args={"host": "127.0.0.1", "port": default_server.listen_port},
)
qa = RetrievalQA.from_chain_type(llm=OpenAI(), chain_type="stuff", retriever=vector_db.as_retriever())
query = "What is Zilliz Cloud?"
qa.run(query)
default_server.stop()
以上就是 LangChain 的安装和使用方法,如果大家在使用过程中还有疑问,可搜索小助手微信 “zilliz-tech” 进入我们的微信群进行交流。
🌟【相关链接】🌟
[1]示例源码:https://colab.research.google.com/drive/1KiPHx1wxfYylc3fqMP1hVsUB4yYtzQGn?usp=sharing
[2] 获取 API 密钥:https://platform.openai.com/docs/api-reference
[3] Zilliz Cloud 的文档:https://zilliz.com/doc/about_zilliz_cloud
[4] Colab:https://colab.research.google.com/drive/1jk_w25fSCkoxPwI-CAx8wNdjpBO6gw57?usp=sharing
技术干货
使用 Milvus Lite、Llama3 和 LlamaIndex 搭建 RAG 应用
大语言模型(LLM)已经展示出与人类交互并生成文本响应的卓越能力。这些模型可以执行各种自然语言任务,如翻译、概括、代码生成和信息检索等。
2024-11-20技术干货
如何在大语言模型 Serving 阶段高效管理内存:分页注意力机制
在 Serving 阶段实现有效的内存管理至关重要。一个可行的解决方案是通过 PagedAttention 算法。本文将重点探讨这种解决方案。
2024-11-15技术干货
什么是BERT(Bidirectional Encoder Representations from Transformers)?
BERT,即Bidirectional Encoder Representations from Transformers,自2018年由谷歌发布以来,极大地改变了自然语言处理(NLP)的格局。
2024-11-19