关于人工智能:LangChain-查询使用指北

44次阅读

共计 3842 个字符,预计需要花费 10 分钟才能阅读完成。

一只鹦鹉加上一根链条,组成了时下最风行的 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 导入 PromptTemplateLLMChain,并从langchain.llms 导入OpenAI。本示例中应用 OpenAI 的文本模型 text-davinci-003
  • 随后,创立一个查问 GPT 的模板,下述模板通知 GPT 每次只答复一个问题:
  • 创立一个字符串(string),括号内输出变量,相似于 f-strings
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:
"""
  • 应用 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.llms import OpenAI
davinci = OpenAI(model_name="text-davinci-003")
from milvus import default_server
default_server.start()

当初能够开始学习如何查问文档了。这次从 LangChain 导入了很多内容,须要 OpenAI Embeddings、文本字符拆分器、Milvus 向量数据库、加载器和问答检索链。

  • 首先,设置一个加载器并加载 urls 链接中的内容。本例中,将加载 Zilliz Cloud 介绍的文档,即加载链接 'https://zilliz.com/doc/about_zilliz_cloud'
  • 其次,将文档拆分并将其存储为 LangChain 中的一组文档。
  • 接着,设置 Milvus 向量数据库。在本例中,咱们为方才通过 UnstructuredURLLoaderCharacterTextSplitter 获取的文档数据创立了一个 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”进入咱们的微信群进行交换。

(本文作者 Yujian Tang 系 Zilliz 开发者布道师;陈室余系 Zilliz 软件工程师)


  • 如果在应用 Milvus 或 Zilliz 产品有任何问题,可增加小助手微信“zilliz-tech”退出交换群。
  • 欢送关注微信公众号“Zilliz”,理解最新资讯。

本文由 mdnice 多平台公布

正文完
 0