分享

Embedchain 简介:为 LLM 量身定做的数据平台

 netouch 2023-11-15 发布于北京

介绍

LangChain 和 LangFlow 等工具的引入使使用大型语言模型构建应用程序变得更加容易。尽管构建应用程序和选择不同的大型语言模型变得更加容易,但对于开发人员来说,数据上传部分(数据来自各种来源)在开发 LLM 驱动的应用程序时仍然很耗时,因为开发人员需要将来自这些不同来源的数据转换为纯文本,然后再将它们注入到矢量存储中。这就是 Embedchain 的用武之地,它使上传任何数据类型的数据并立即开始查询 LLM 变得简单。在本文中,我们将探讨如何开始使用 Embedchain。

学习目标

● 了解 Embedchain 在简化大型语言模型 (LLM) 数据管理和查询过程方面的重要性

● 了解如何有效地将非结构化数据集成并上传到 Embedchain 中,使开发人员能够无缝地处理各种数据源

● 了解 Embedchain 支持的不同大型语言模型和向量存储

● 了解如何将各种数据源(如网页和视频)添加到矢量存储中,从而了解数据引入

什么是 Embedchain?

Embedchain 是一个 Python/Javascript 库,开发人员可以使用它无缝连接多个数据源和大型语言模型。Embedchain 允许我们上传、索引和检索非结构化数据。非结构化数据可以是任何类型,例如文本、网站/YouTube 视频的 URL、图像等。

Emdechain 使得使用单个命令上传这些非结构化数据变得简单,从而为它们创建向量嵌入,并使用连接的 LLM 立即开始查询数据。在幕后,Embedchain 负责从源加载数据,对其进行分块,然后为其创建向量嵌入,最后将它们存储在向量存储中。

Embedchain 简介:为 LLM 量身定做的数据平台

使用 Embedchain 创建第一个应用程序

在本节中,我们将安装 Embedchain 包并使用它创建一个应用程序。第一步是使用 pip 命令安装软件包,如下所示:

● 第一条语句将安装 Embedchain Python 包

● 下一行将安装 huggingface-hub,如果我们想使用 hugging-face 提供的任何模型,则需要这个 Python 包

现在,我们将创建一个环境变量来存储 Hugging Face Inference API Token,如下所示。我们可以通过登录 Hugging Face 网站然后生成 Token 来获取推理 API Token。

import osos.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.8embedder:  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 Appapp = App.from_config(yaml_path='huggingface_model.yaml')

● 在这里,我们将 Pipeline 对象作为 App 从 Embedchain 导入。Pipeline 对象负责创建 LLM 应用程序,这些应用程序采用我们上面定义的不同配置。

● 该应用程序将使用 YAML 文件中指定的模型创建一个 LLM。对于这个 App,我们可以从不同的数据源馈入数据,而对于同一个 App,我们可以调用 query 方法对提供的数据进行 LLM 查询。

● 现在,让我们添加一些数据。

app.add('https://en./wiki/Alphabet_Inc.')

● app.add() 方法将接收数据并将其添加到向量存储中。

● Embedchain 负责从网页收集数据,将其创建为块,然后为数据创建嵌入。

● 然后,数据将存储在矢量数据库中。Embedchain 中使用的默认数据库是 chromadb。

● 在此示例中,我们将 Google 的父级 Alphabet 的 Wikipedia 页面添加到应用程序中。

让我们根据上传的数据查询我们的 App:

Embedchain 简介:为 LLM 量身定做的数据平台

在上图中,使用 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 并创建一个集群。

创建集群后,我们可以获取连接到集群的凭据,如下所示:

Embedchain 简介:为 LLM 量身定做的数据平台

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 ZillizVectorDBapp = App(db=ZillizVectorDB())app.add('https://www./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 简介:为 LLM 量身定做的数据平台

正如我们所看到的,以“Embedchain_store”的名称创建了一个新集合,该集合包含我们在上一步中添加的数据。现在,我们将查询我们的应用程序。

Embedchain 简介:为 LLM 量身定做的数据平台

添加到应用程序的视频是关于新的 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 存储库。

● https://docs.Embedchain.ai

● https://github.com/Embedchain/Embedchain

原文地址:
https://www./blog/2023/11/Embedchain-a-data-platform-tailored-for-llms/


非常感谢大家的阅读,小Mo在这里祝你在末来的 Python 学习职业生涯中一切顺利!

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多