介绍
LangChain 和 LangFlow 等工具的引入使使用大型语言模型构建应用程序变得更加容易。尽管构建应用程序和选择不同的大型语言模型变得更加容易,但对于开发人员来说,数据上传部分(数据来自各种来源)在开发 LLM 驱动的应用程序时仍然很耗时,因为开发人员需要将来自这些不同来源的数据转换为纯文本,然后再将它们注入到矢量存储中。这就是 Embedchain 的用武之地,它使上传任何数据类型的数据并立即开始查询 LLM 变得简单。在本文中,我们将探讨如何开始使用 Embedchain。
学习目标
● 了解 Embedchain 在简化大型语言模型 (LLM) 数据管理和查询过程方面的重要性
● 了解如何有效地将非结构化数据集成并上传到 Embedchain 中,使开发人员能够无缝地处理各种数据源
● 了解 Embedchain 支持的不同大型语言模型和向量存储
● 了解如何将各种数据源(如网页和视频)添加到矢量存储中,从而了解数据引入
什么是 Embedchain?
Embedchain 是一个 Python/Javascript 库,开发人员可以使用它无缝连接多个数据源和大型语言模型。Embedchain 允许我们上传、索引和检索非结构化数据。非结构化数据可以是任何类型,例如文本、网站/YouTube 视频的 URL、图像等。
Emdechain 使得使用单个命令上传这些非结构化数据变得简单,从而为它们创建向量嵌入,并使用连接的 LLM 立即开始查询数据。在幕后,Embedchain 负责从源加载数据,对其进行分块,然后为其创建向量嵌入,最后将它们存储在向量存储中。
使用 Embedchain 创建第一个应用程序
在本节中,我们将安装 Embedchain 包并使用它创建一个应用程序。第一步是使用 pip 命令安装软件包,如下所示:
● 第一条语句将安装 Embedchain Python 包
● 下一行将安装 huggingface-hub,如果我们想使用 hugging-face 提供的任何模型,则需要这个 Python 包
现在,我们将创建一个环境变量来存储 Hugging Face Inference API Token,如下所示。我们可以通过登录 Hugging Face 网站然后生成 Token 来获取推理 API Token。
import os
os.environ["HUGGINGFACE_ACCESS_TOKEN"] = "Hugging Face Inferenece API Token"
Embedchain 库将使用上面提供的 token 来推断拥抱脸部模型。接下来,我们必须创建一个 YAML 文件,定义我们要从 huggingface 使用的模型。YAML 文件可以被视为一个简单的键值存储,我们在其中定义 LLM 应用程序的配置。这些配置可以包括我们将要使用的 LLM 模型或我们将要使用的嵌入模型。下面是一个示例 YAML 文件
config = """
llm:
provider: huggingface
config:
model: 'google/flan-t5-xxl'
temperature: 0.7
max_tokens: 1000
top_p: 0.8
embedder:
provider: huggingface
config:
model: 'sentence-transformers/all-mpnet-base-v2'
"""
with open('huggingface_model.yaml', 'w') as file:
file.write(config)
● 我们正在从 Python 本身创建一个 YAML 文件,并将其存储在名为 huggingface_model.yaml 的文件中。
● 在这个 YAML 文件中,我们定义了模型参数,甚至定义了正在使用的嵌入模型。
● 在上面,我们将提供程序指定为 huggingface 和 flan-t5 模型,具有不同的配置/参数,包括模型的温度、max_tokens(即输出长度),甚至top_p值。
● 对于嵌入模型,我们使用了 huggingface 中流行的嵌入模型,称为 all-mpnet-base-v2,它将负责为我们的模型创建嵌入向量。
YAML 配置
接下来,我们将使用上述 YAML 配置文件创建一个应用。
from Embedchain import Pipeline as App
app = App.from_config(yaml_path="huggingface_model.yaml")
● 在这里,我们将 Pipeline 对象作为 App 从 Embedchain 导入。Pipeline 对象负责创建 LLM 应用程序,这些应用程序采用我们上面定义的不同配置。
● 该应用程序将使用 YAML 文件中指定的模型创建一个 LLM。对于这个 App,我们可以从不同的数据源馈入数据,而对于同一个 App,我们可以调用 query 方法对提供的数据进行 LLM 查询。
● 现在,让我们添加一些数据。
app.add("https://en.wikipedia.org/wiki/Alphabet_Inc.")
● app.add() 方法将接收数据并将其添加到向量存储中。
● Embedchain 负责从网页收集数据,将其创建为块,然后为数据创建嵌入。
● 然后,数据将存储在矢量数据库中。Embedchain 中使用的默认数据库是 chromadb。
● 在此示例中,我们将 Google 的父级 Alphabet 的 Wikipedia 页面添加到应用程序中。
让我们根据上传的数据查询我们的 App:
在上图中,使用 query() 方法,我们向我们的应用程序(即 flan-t5 模型)询问了两个与添加到应用程序的数据相关的问题。该模型能够正确回答这些问题。这样,我们可以通过将多个数据源传递给 add() 方法将它们添加到模型中,并在内部处理它们并为它们创建嵌入,最后将添加到向量存储中。然后我们可以使用 query() 方法查询数据。
使用不同的模型和向量存储配置应用程序
在前面的示例中,我们了解了如何准备一个应用程序,该应用程序将网站添加为数据,并将 Hugging Face 模型添加为应用程序的基础大型语言模型。在本节中,我们将了解如何使用其他模型和其他向量数据库来了解 Embedchain 的灵活性。在此示例中,我们将使用 Zilliz Cloud 作为矢量数据库,因此我们需要下载相应的 Python 客户端,如下所示:
!pip install --upgrade Embedchain[milvus]
!pip install pytube
● 上面将下载 Pymilvus Python 包,我们可以使用它与 Zilliz Cloud 进行交互。
● pytube 库将允许我们将 YouTube 视频转换为文本,以便它们可以存储在矢量商店中。
● 接下来,我们可以使用 Zilliz Cloud 创建一个免费帐户。创建免费帐户后,转到 Zilliz Cloud Dashboard 并创建一个集群。
创建集群后,我们可以获取连接到集群的凭据,如下所示:
OpenAI API 密钥
复制公共终结点和令牌,并将其存储在其他位置,因为连接到 Zilliz Cloud Vector Store 需要这些内容。现在对于大型语言模型,这次我们将使用 OpenAI GPT 模型。因此,我们还需要 OpenAI API 密钥才能向前迈进。获取所有密钥后,创建环境变量,如下所示:
os.environ["OPENAI_API_KEY"]="Your OpenAI API Key"
os.environ["ZILLIZ_CLOUD_TOKEN"]= "Your Zilliz Cloud Token"
os.environ["ZILLIZ_CLOUD_URI"]= "Your Zilliz Cloud Public Endpoint"
以上会将所有必需的凭据作为环境变量存储到 Zilliz Cloud 和 OpenAI。现在是时候定义我们的应用程序了,可以按如下方式完成:
from Embedchain.vectordb.zilliz import ZillizVectorDB
app = App(db=ZillizVectorDB())
app.add("https://www.youtube.com/watch?v=ZnEgvGPMRXA")
● 这里首先我们导入 Embedchain 提供的 ZillizVectorDB 类。
● 然后,在创建新应用程序时,我们会将 ZillizVectorDB() 传递给 App() 函数中的 db 变量。
● 由于我们没有指定任何 LLM,因此默认的 LLM 被选为 OpenAI GPT 3.5。
● 现在,我们的应用程序被定义为 OpenAI 作为 LLM,Zilliz 被定义为 Vector Store。
● 接下来,我们将使用 add() 方法将 YouTube 视频添加到我们的应用程序中。
● 添加 YouTube 视频就像将 URL 传递给 add() 函数一样简单,所有视频到文本的转换都被 Embedchain 抽象出来,从而变得简单。
Zilliz 云
现在,视频首先被转换为文本,接下来它将被创建成块,并由 OpenAI 嵌入模型转换为矢量嵌入。然后,这些嵌入将存储在 Zilliz Cloud 中。如果我们转到 Zilliz Cloud 并检查我们的集群内部,我们可以找到一个名为“Embedchain_store”的新收集,其中存储了我们添加到应用程序的所有数据:
正如我们所看到的,以“Embedchain_store”的名称创建了一个新集合,该集合包含我们在上一步中添加的数据。现在,我们将查询我们的应用程序。
添加到应用程序的视频是关于新的 Windows 11 更新的。在上图中,我们向应用程序询问了视频中提到的问题。该应用程序正确地回答了这个问题。在这两个示例中,我们了解了如何通过 Embedchain 使用不同的大型语言模型和不同的数据库,并且还上传了不同类型的数据,即网页和 YouTube 视频。
Embedchain 支持的 LLM 和向量存储
Embedchain 自发布以来,通过引入对各种大型语言模型和向量数据库的支持,一直在增长。支持的大型语言模型如下所示:
● Hugging Face Models
● OpenAI
● Azure OpenAI
● Anthropic
● Llama2
● Cohere
● JinaChat
● Vertex AI
● GPT4All
除了支持广泛的大型语言模型外, Embedchain 还支持许多向量数据库,如下表所示:
● ChromaDB
● ElasticSearch
● OpenSearch
● Zilliz
● Pinecone
● Weaviate
● Qdrant
● LanceDB
除此之外,未来的 Embedchain 将增加对更多大型语言模型和向量数据库的支持。
结论
在使用大型语言模型构建应用程序时,主要挑战将是处理数据时,即处理来自不同数据源的数据。在转换为嵌入之前,最终需要将所有数据源转换为单个类型。每个数据源都有自己的处理方式,比如存在用于处理视频的单独库,用于处理网站的其他库,等等。因此,我们研究了 Embedchain Python Package 应对这一挑战的解决方案,它为我们完成了所有繁重的工作,从而使我们能够集成来自任何数据源的数据,而无需担心潜在的转换。
关键要点
本文的一些关键要点包括:
● Embedchain 支持大量大型语言模型,因此允许我们使用其中任何一个。
● 此外,Embedchain 还与许多流行的 Vector 商店集成。
● 一个简单的 add() 方法可用于在向量存储中存储任何类型的数据。
● Embedchain 使 LLM 和 Vector DB 之间的切换变得更加容易,并提供了添加和查询数据的简单方法。
常见问题解答
问题1. 什么是 Embedchain?
答:Embedchain 是一个 Python 工具,允许用户添加任何类型的数据并将其存储在 Vector Store 中,从而允许我们使用任何大型语言模型进行查询。
问题2. 我们如何在 Embedchain 中使用不同的 Vector Store?
答:我们选择的向量数据库可以通过 config.yaml 文件提供给我们正在开发的应用程序,也可以通过将数据库传递给 App() 类中的“db”参数直接提供给 App() 类。
问题3. 数据是否会在本地持久化?
答:是的,在使用像 chromadb 这样的本地向量数据库的情况下,当我们执行 add() 方法时,数据将被转换为向量嵌入,然后存储在像 chromadb 这样的向量数据库中,该数据库将保存在本地文件夹“db”下。
问题4. 是否有必要创建一个 config.yaml 来使用不同的数据库/ LLM?
答:不,不是。我们可以通过直接将配置传递给 App() 变量来配置我们的应用程序,或者改用 config.yaml 从 YAML 文件生成 App。Config.yaml 文件对于复制结果/当我们想与其他人共享应用程序的配置时很有用,但这不是强制性的。
问题5. Embedchain 支持哪些数据源?
答:Embedchain 支持来自不同数据源的数据,包括 CSV、JSON、Notion、mdx 文件、docx、网页、YouTube 视频、pdf 等等。Embedchain 抽象了它处理所有这些数据源的方式,从而使我们更容易添加任何数据。
引用
要了解有关 Embedchain 及其架构的更多信息,请参阅其官方文档页面和 Github 存储库。
非常感谢大家的阅读,小Mo在这里祝你在末来的 Python 学习职业生涯中一切顺利!
后续小Mo会不定期更新书籍、视频等学习资源,以上这些书籍资料也可通过关注微信公众号免费获取哦!
欢迎关注我们的微信公众号:MomodelAl
同时,欢迎使用「Mo AI编程」微信小程序
以及登录官网,了解更多信息:Mo 人工智能教育实训平台
Mo,发现意外,创造可能
注:部分资源来源于互联网,若有侵权,请直接联系作者删除。