Created
Aug 12, 2024 12:32 AM
Favorite
Favorite
Priority
备注
推荐
🌟🌟🌟🌟🌟
类型
Langchain
点击上方蓝字关注我们

一、前言

在之前的文章中,我们研究了如何使用LangChain结合大型语言模型(LLM)API来构建用户友好且直观的聊天机器人。现在,我们将探索一个新的Python包来进一步简化LangChain的实现。只需3-4行代码,我们就可以轻松地与任何外部数据进行通信!这个神奇的包叫 Embedchain!⭐这些库各有优点。我认为LangChain的性能更好,并且具备更多功能。另一方面,Embedchain则更容易使用,并且免费提供开源的语言模型。总之,这两个库都旨在为您创建专属的语言模型。选择使用哪个库取决于你的具体需求。例如,如果您需要处理数据,在LangChain库中有20多种工具可供选择,比如与PDF文件互动或者从医疗网站Pubmed获取信息等等;同时还能够从YouTube下载视频并将其转换为文本进行对话等等——所有这些都是LangChain库所擅长的领域。而Embedchain也有其自身的优势。综上所述,我的建议是掌握这两个库,并在不同情况下做出最佳选择。

二、EmbedChain 介绍

EmbedChain 是一个功能强大的框架,旨在简化使用任何数据集创建语言模型 (LLM) 支持的机器人的过程。它提供了一个抽象层,用于处理数据集加载、分块、嵌入创建以及矢量数据库中的存储。它使用LangChain、OpenAI的Ada嵌入模型、OpenAI的ChatGPT API和Chroma作为存储嵌入的向量数据库。通过使用 .add.add_local 函数,您可以轻松地将单个或多个数据集添加到您的机器人中。然后,您可以利用 .query 函数从添加的数据集中检索答案。如果你想创建一个包含 YouTube 视频、PDF 格式的书籍、两篇博客文章和问答对的 Naval Ravikant 机器人,你只需添加相应的链接即可。Embedchain 将负责剩下的工作,为你创建一个机器人。
Embedchain 为你抽象出以下步骤,以轻松创建 LLM 支持的应用程序:
  1. 检测数据类型并加载数据
  1. 创建有意义的块
  1. 为每个块创建嵌入
  1. 将块存储在矢量数据库中
当用户提出查询时,会发生以下过程来查找答案:
  1. 为查询创建嵌入
  1. 从向量数据库中查找与查询相似的文档
  1. 将类似文档作为上下文传递给LLM以获得最终答案
加载数据集和查询的过程涉及多个步骤,每个步骤都有自己的细微差别:
  • 我应该如何对数据进行分块?什么是有意义的块大小?
  • 我应该如何为每个块创建嵌入?我应该使用哪种嵌入模型?
  • 我应该如何将块存储在矢量数据库中?我应该使用哪个矢量数据库?
  • 我应该将元数据与嵌入一起存储吗?
  • 我应该如何找到类似的查询文档?我应该使用哪种排名模型?
Embedchain 照顾所有这些细微差别,并提供一个简单的界面来在任何数据上创建应用程序。

三、快速开始

快速安装 embedchain:

四、大语言模型

Embedchain 内置了对各种流行的大型语言模型的支持。我们为你处理集成这些模型的复杂性,使你可以通过用户友好的界面轻松自定义语言模型交互。
notion image

4.1、OpenAI

要使用 OpenAI LLM 模型,您必须设置 OPENAI_API_KEY 环境变量。您可以从OpenAI平台获取OpenAI API密钥。获得密钥后,您可以像这样使用它:
如果您希望配置 LLM 的不同参数,可以通过使用 yaml 配置文件加载应用程序来实现。

4.2、Hugging Face

使用以下命令安装相关依赖:
首先,在环境变量中设置 HUGGINGFACE_ACCESS_TOKEN ,您可以从他们的平台获取该环境变量。获得令牌后,使用配置 yaml 文件加载应用程序:

五、Embedding 模型

Embedchain 支持以下提供商的多种嵌入模型:
notion image

5.1、OpenAI

要使用OpenAI嵌入功能,您必须设置 OPENAI_API_KEY 环境变量。您可以从OpenAI平台获取OpenAI API密钥。获得密钥后,您可以像这样使用它:

5.2、Hugging Face

Hugging Face 支持使用 Sentence Transformer 库生成任意长度的文本文档的嵌入。下面给出了如何使用拥抱脸生成嵌入的示例:

六、向量数据库

将矢量数据库与 Embedchain 结合使用是一个无缝过程。你需要做的就是在 YAML 配置文件中配置它。我们为下面每个受支持的数据库提供了示例:
notion image

6.1、ChromaDB

6.2、Elasticsearch

使用以下命令安装相关依赖:

6.3、OpenSearch

使用以下命令安装相关依赖:

6.4、Milvus

使用以下命令安装相关依赖:
设置 Zilliz 环境变量 ZILLIZ_CLOUD_URIZILLIZ_CLOUD_TOKEN ,您可以在其云平台上找到它。

6.5、Pinecone

使用以下命令安装pinecone相关依赖项:
为了使用 Pinecone 作为矢量数据库,请设置环境变量 PINECONE_API_KEYPINECONE_ENV ,您可以在 Pinecone 仪表板上找到它们。

6.6、Qdrant

为了将 Qdrant 用作矢量数据库,请设置环境变量 QDRANT_URLQDRANT_API_KEY ,您可以在 Qdrant Dashboard 上找到它们。

七、数据源

Embedchain 内置了12种数据源的支持。我们处理从这些数据源加载非结构化数据的复杂性,使你可以通过用户友好的界面轻松自定义你的应用程序。
notion image

7.1、CSV 文档

要添加任何 csv 文件,请将 data_type 用作 csvcsv 允许远程 URL 和常规文件路径。每行都包含标题,因此如果你有 age 列,则 18 将添加为 age: 18 。例如:
注意:csv 文件有一个大小限制,超过该限制可能会引发错误。该限制由LLM设定。请考虑将大型 csv 文件分成较小的 csv 文件。

7.2、代码文档

要将任何代码文档网站添加为加载程序,请使用 data_type 作为 docs_site 。例如:
其他支持的数据源类型就不一一列举了,具体可以查阅官方文档,基本上差异就是指定 data_type 属性为文档的类型即可。同时 add 方法既支持传入在线URL地址,也支持传入本地文档地址。

八、数据类型处理

8.1、自动数据类型检测

add 方法根据你对源参数的输入自动尝试检测 data_type。因此 app.add('https://www.youtube.com/watch?v=dQw4w9WgXcQ') 足以嵌入 YouTube 视频。此检测适用于所有格式。它基于是否是 URL、本地文件、源数据类型等因素。

8.1.1、调试自动检测

在配置yaml中设置 log_level: DEBUG 来调试数据类型检测是否正确。否则,你将不知道何时将无效的文件路径解释为原始文本。

8.1.2、强制数据类型

要忽略数据类型检测的任何问题,你可以通过将 data_type 添加为 add 方法参数来强制使用它。下面的示例向你展示了强制相应 data_type 的关键字。强制还可以用于边缘情况,例如将站点地图解释为网页,以读取其原始文本而不是跟随链接。

8.2、远程数据类型

在远程数据类型中使用本地文件某些 data_types 适用于远程内容并且仅适用于 URL。你可以通过使用 file: URI 方案格式化路径来传递本地文件,例如 file:///info.pdf

8.3、重用向量数据库

默认情况下,会在./db目录中创建一个持久化的向量数据库。您可以将应用程序拆分为两个Python脚本:一个用于创建本地的向量数据库,另一个用于重用这个本地的持久化向量数据库。当您想要对数百个文档进行索引,并单独实现聊天界面时,这非常有用。
Embedchain 开箱即用。对于高级用户,还提供配置选项。这些配置选项都是可选的并且具有合理的默认值。你可以通过 Embedchain 提供的简单 yaml 配置来配置应用程序的不同组件( llmembedding modelvector database )。以下是 yaml 配置的通用全栈示例:
针对上面 yaml 配置中每个键的含义解释如下:
十、References
[1]. Embedchain GitHub: https://github.com/embedchain/embedchain[2]. Data Platform for LLMs: https://app.embedchain.ai/
如果你对这篇文章感兴趣,而且你想要了解更多关于AI领域的实战技巧,可以关注「技术狂潮AI」公众号。在这里,你可以看到最新最热的AIGC领域的干货文章和案例实战教程。
AI模型92
聊天机器人2
EmbedChain1
AI工具20
LangChain13
AI模型 · 目录
上一篇如何利用验证链技术减少大型语言模型中的幻觉
Loading...