Embedchain 簡介:為 LLM 量身定做的數(shù)據(jù)平臺
介紹
LangChain 和 LangFlow 等工具的引入使使用大型語言模型構(gòu)建應(yīng)用程序變得更加容易。盡管構(gòu)建應(yīng)用程序和選擇不同的大型語言模型變得更加容易,但對于開發(fā)人員來說,數(shù)據(jù)上傳部分(數(shù)據(jù)來自各種來源)在開發(fā) LLM 驅(qū)動的應(yīng)用程序時(shí)仍然很耗時(shí),因?yàn)殚_發(fā)人員需要將來自這些不同來源的數(shù)據(jù)轉(zhuǎn)換為純文本,然后再將它們注入到矢量存儲中。這就是 Embedchain 的用武之地,它使上傳任何數(shù)據(jù)類型的數(shù)據(jù)并立即開始查詢 LLM 變得簡單。在本文中,我們將探討如何開始使用 Embedchain。
學(xué)習(xí)目標(biāo)
● 了解 Embedchain 在簡化大型語言模型 (LLM) 數(shù)據(jù)管理和查詢過程方面的重要性
● 了解如何有效地將非結(jié)構(gòu)化數(shù)據(jù)集成并上傳到 Embedchain 中,使開發(fā)人員能夠無縫地處理各種數(shù)據(jù)源
● 了解 Embedchain 支持的不同大型語言模型和向量存儲
● 了解如何將各種數(shù)據(jù)源(如網(wǎng)頁和視頻)添加到矢量存儲中,從而了解數(shù)據(jù)引入
什么是 Embedchain?
Embedchain 是一個(gè) Python/Javascript 庫,開發(fā)人員可以使用它無縫連接多個(gè)數(shù)據(jù)源和大型語言模型。Embedchain 允許我們上傳、索引和檢索非結(jié)構(gòu)化數(shù)據(jù)。非結(jié)構(gòu)化數(shù)據(jù)可以是任何類型,例如文本、網(wǎng)站/YouTube 視頻的 URL、圖像等。
Emdechain 使得使用單個(gè)命令上傳這些非結(jié)構(gòu)化數(shù)據(jù)變得簡單,從而為它們創(chuàng)建向量嵌入,并使用連接的 LLM 立即開始查詢數(shù)據(jù)。在幕后,Embedchain 負(fù)責(zé)從源加載數(shù)據(jù),對其進(jìn)行分塊,然后為其創(chuàng)建向量嵌入,最后將它們存儲在向量存儲中。

使用 Embedchain 創(chuàng)建第一個(gè)應(yīng)用程序
在本節(jié)中,我們將安裝 Embedchain 包并使用它創(chuàng)建一個(gè)應(yīng)用程序。第一步是使用 pip 命令安裝軟件包,如下所示:
● 第一條語句將安裝 Embedchain Python 包
● 下一行將安裝 huggingface-hub,如果我們想使用 hugging-face 提供的任何模型,則需要這個(gè) Python 包
現(xiàn)在,我們將創(chuàng)建一個(gè)環(huán)境變量來存儲 Hugging Face Inference API Token,如下所示。我們可以通過登錄 Hugging Face 網(wǎng)站然后生成 Token 來獲取推理 API Token。
Embedchain 庫將使用上面提供的 token 來推斷擁抱臉部模型。接下來,我們必須創(chuàng)建一個(gè) YAML 文件,定義我們要從 huggingface 使用的模型。YAML 文件可以被視為一個(gè)簡單的鍵值存儲,我們在其中定義 LLM 應(yīng)用程序的配置。這些配置可以包括我們將要使用的 LLM 模型或我們將要使用的嵌入模型。下面是一個(gè)示例 YAML 文件
● 我們正在從 Python 本身創(chuàng)建一個(gè) YAML 文件,并將其存儲在名為 huggingface_model.yaml 的文件中。
● 在這個(gè) YAML 文件中,我們定義了模型參數(shù),甚至定義了正在使用的嵌入模型。
● 在上面,我們將提供程序指定為 huggingface 和 flan-t5 模型,具有不同的配置/參數(shù),包括模型的溫度、max_tokens(即輸出長度),甚至top_p值。
● 對于嵌入模型,我們使用了 huggingface 中流行的嵌入模型,稱為 all-mpnet-base-v2,它將負(fù)責(zé)為我們的模型創(chuàng)建嵌入向量。
YAML 配置
接下來,我們將使用上述 YAML 配置文件創(chuàng)建一個(gè)應(yīng)用。
● 在這里,我們將 Pipeline 對象作為 App 從 Embedchain 導(dǎo)入。Pipeline 對象負(fù)責(zé)創(chuàng)建 LLM 應(yīng)用程序,這些應(yīng)用程序采用我們上面定義的不同配置。
● 該應(yīng)用程序?qū)⑹褂?YAML 文件中指定的模型創(chuàng)建一個(gè) LLM。對于這個(gè) App,我們可以從不同的數(shù)據(jù)源饋入數(shù)據(jù),而對于同一個(gè) App,我們可以調(diào)用 query 方法對提供的數(shù)據(jù)進(jìn)行 LLM 查詢。
● 現(xiàn)在,讓我們添加一些數(shù)據(jù)。
● app.add() 方法將接收數(shù)據(jù)并將其添加到向量存儲中。
● Embedchain 負(fù)責(zé)從網(wǎng)頁收集數(shù)據(jù),將其創(chuàng)建為塊,然后為數(shù)據(jù)創(chuàng)建嵌入。
● 然后,數(shù)據(jù)將存儲在矢量數(shù)據(jù)庫中。Embedchain 中使用的默認(rèn)數(shù)據(jù)庫是 chromadb。
● 在此示例中,我們將 Google 的父級 Alphabet 的 Wikipedia 頁面添加到應(yīng)用程序中。
讓我們根據(jù)上傳的數(shù)據(jù)查詢我們的 App:

在上圖中,使用 query() 方法,我們向我們的應(yīng)用程序(即 flan-t5 模型)詢問了兩個(gè)與添加到應(yīng)用程序的數(shù)據(jù)相關(guān)的問題。該模型能夠正確回答這些問題。這樣,我們可以通過將多個(gè)數(shù)據(jù)源傳遞給 add() 方法將它們添加到模型中,并在內(nèi)部處理它們并為它們創(chuàng)建嵌入,最后將添加到向量存儲中。然后我們可以使用 query() 方法查詢數(shù)據(jù)。
使用不同的模型和向量存儲配置應(yīng)用程序
在前面的示例中,我們了解了如何準(zhǔn)備一個(gè)應(yīng)用程序,該應(yīng)用程序?qū)⒕W(wǎng)站添加為數(shù)據(jù),并將 Hugging Face 模型添加為應(yīng)用程序的基礎(chǔ)大型語言模型。在本節(jié)中,我們將了解如何使用其他模型和其他向量數(shù)據(jù)庫來了解 Embedchain 的靈活性。在此示例中,我們將使用 Zilliz Cloud 作為矢量數(shù)據(jù)庫,因此我們需要下載相應(yīng)的 Python 客戶端,如下所示:
● 上面將下載 Pymilvus Python 包,我們可以使用它與 Zilliz Cloud 進(jìn)行交互。
● pytube 庫將允許我們將 YouTube 視頻轉(zhuǎn)換為文本,以便它們可以存儲在矢量商店中。
● 接下來,我們可以使用 Zilliz Cloud 創(chuàng)建一個(gè)免費(fèi)帳戶。創(chuàng)建免費(fèi)帳戶后,轉(zhuǎn)到 Zilliz Cloud Dashboard 并創(chuàng)建一個(gè)集群。
創(chuàng)建集群后,我們可以獲取連接到集群的憑據(jù),如下所示:

OpenAI API 密鑰
復(fù)制公共終結(jié)點(diǎn)和令牌,并將其存儲在其他位置,因?yàn)檫B接到 Zilliz Cloud Vector Store 需要這些內(nèi)容?,F(xiàn)在對于大型語言模型,這次我們將使用 OpenAI GPT 模型。因此,我們還需要 OpenAI API 密鑰才能向前邁進(jìn)。獲取所有密鑰后,創(chuàng)建環(huán)境變量,如下所示:
以上會將所有必需的憑據(jù)作為環(huán)境變量存儲到 Zilliz Cloud 和 OpenAI?,F(xiàn)在是時(shí)候定義我們的應(yīng)用程序了,可以按如下方式完成:
● 這里首先我們導(dǎo)入 Embedchain 提供的 ZillizVectorDB 類。
● 然后,在創(chuàng)建新應(yīng)用程序時(shí),我們會將 ZillizVectorDB() 傳遞給 App() 函數(shù)中的 db 變量。
● 由于我們沒有指定任何 LLM,因此默認(rèn)的 LLM 被選為 OpenAI GPT 3.5。
● 現(xiàn)在,我們的應(yīng)用程序被定義為 OpenAI 作為 LLM,Zilliz 被定義為 Vector Store。
● 接下來,我們將使用 add() 方法將 YouTube 視頻添加到我們的應(yīng)用程序中。
● 添加 YouTube 視頻就像將 URL 傳遞給 add() 函數(shù)一樣簡單,所有視頻到文本的轉(zhuǎn)換都被 Embedchain 抽象出來,從而變得簡單。
Zilliz 云
現(xiàn)在,視頻首先被轉(zhuǎn)換為文本,接下來它將被創(chuàng)建成塊,并由 OpenAI 嵌入模型轉(zhuǎn)換為矢量嵌入。然后,這些嵌入將存儲在 Zilliz Cloud 中。如果我們轉(zhuǎn)到 Zilliz Cloud 并檢查我們的集群內(nèi)部,我們可以找到一個(gè)名為“Embedchain_store”的新收集,其中存儲了我們添加到應(yīng)用程序的所有數(shù)據(jù):

正如我們所看到的,以“Embedchain_store”的名稱創(chuàng)建了一個(gè)新集合,該集合包含我們在上一步中添加的數(shù)據(jù)。現(xiàn)在,我們將查詢我們的應(yīng)用程序。

添加到應(yīng)用程序的視頻是關(guān)于新的 Windows 11 更新的。在上圖中,我們向應(yīng)用程序詢問了視頻中提到的問題。該應(yīng)用程序正確地回答了這個(gè)問題。在這兩個(gè)示例中,我們了解了如何通過 Embedchain 使用不同的大型語言模型和不同的數(shù)據(jù)庫,并且還上傳了不同類型的數(shù)據(jù),即網(wǎng)頁和 YouTube 視頻。
Embedchain 支持的 LLM 和向量存儲
Embedchain 自發(fā)布以來,通過引入對各種大型語言模型和向量數(shù)據(jù)庫的支持,一直在增長。支持的大型語言模型如下所示:
● Hugging Face Models
● OpenAI
● Azure OpenAI
● Anthropic
● Llama2
● Cohere
● JinaChat
● Vertex AI
● GPT4All
除了支持廣泛的大型語言模型外, Embedchain 還支持許多向量數(shù)據(jù)庫,如下表所示:
● ChromaDB
● ElasticSearch
● OpenSearch
● Zilliz
● Pinecone
● Weaviate
● Qdrant
● LanceDB
除此之外,未來的 Embedchain 將增加對更多大型語言模型和向量數(shù)據(jù)庫的支持。
結(jié)論
在使用大型語言模型構(gòu)建應(yīng)用程序時(shí),主要挑戰(zhàn)將是處理數(shù)據(jù)時(shí),即處理來自不同數(shù)據(jù)源的數(shù)據(jù)。在轉(zhuǎn)換為嵌入之前,最終需要將所有數(shù)據(jù)源轉(zhuǎn)換為單個(gè)類型。每個(gè)數(shù)據(jù)源都有自己的處理方式,比如存在用于處理視頻的單獨(dú)庫,用于處理網(wǎng)站的其他庫,等等。因此,我們研究了 Embedchain Python Package 應(yīng)對這一挑戰(zhàn)的解決方案,它為我們完成了所有繁重的工作,從而使我們能夠集成來自任何數(shù)據(jù)源的數(shù)據(jù),而無需擔(dān)心潛在的轉(zhuǎn)換。
關(guān)鍵要點(diǎn)
本文的一些關(guān)鍵要點(diǎn)包括:
● Embedchain 支持大量大型語言模型,因此允許我們使用其中任何一個(gè)。
● 此外,Embedchain 還與許多流行的 Vector 商店集成。
● 一個(gè)簡單的 add() 方法可用于在向量存儲中存儲任何類型的數(shù)據(jù)。
● Embedchain 使 LLM 和 Vector DB 之間的切換變得更加容易,并提供了添加和查詢數(shù)據(jù)的簡單方法。
常見問題解答
問題1. 什么是 Embedchain?
答:Embedchain 是一個(gè) Python 工具,允許用戶添加任何類型的數(shù)據(jù)并將其存儲在 Vector Store 中,從而允許我們使用任何大型語言模型進(jìn)行查詢。
問題2. 我們?nèi)绾卧?Embedchain 中使用不同的 Vector Store?
答:我們選擇的向量數(shù)據(jù)庫可以通過 config.yaml 文件提供給我們正在開發(fā)的應(yīng)用程序,也可以通過將數(shù)據(jù)庫傳遞給 App() 類中的“db”參數(shù)直接提供給 App() 類。
問題3. 數(shù)據(jù)是否會在本地持久化?
答:是的,在使用像 chromadb 這樣的本地向量數(shù)據(jù)庫的情況下,當(dāng)我們執(zhí)行 add() 方法時(shí),數(shù)據(jù)將被轉(zhuǎn)換為向量嵌入,然后存儲在像 chromadb 這樣的向量數(shù)據(jù)庫中,該數(shù)據(jù)庫將保存在本地文件夾“db”下。
問題4. 是否有必要創(chuàng)建一個(gè) config.yaml 來使用不同的數(shù)據(jù)庫/ LLM?
答:不,不是。我們可以通過直接將配置傳遞給 App() 變量來配置我們的應(yīng)用程序,或者改用 config.yaml 從 YAML 文件生成 App。Config.yaml 文件對于復(fù)制結(jié)果/當(dāng)我們想與其他人共享應(yīng)用程序的配置時(shí)很有用,但這不是強(qiáng)制性的。
問題5. Embedchain 支持哪些數(shù)據(jù)源?
答:Embedchain 支持來自不同數(shù)據(jù)源的數(shù)據(jù),包括 CSV、JSON、Notion、mdx 文件、docx、網(wǎng)頁、YouTube 視頻、pdf 等等。Embedchain 抽象了它處理所有這些數(shù)據(jù)源的方式,從而使我們更容易添加任何數(shù)據(jù)。
引用
要了解有關(guān) Embedchain 及其架構(gòu)的更多信息,請參閱其官方文檔頁面和 Github 存儲庫。
●?https://docs.Embedchain.ai
●?https://github.com/Embedchain/Embedchain
原文地址:https://www.analyticsvidhya.com/blog/2023/11/Embedchain-a-data-platform-tailored-for-llms/

非常感謝大家的閱讀,小Mo在這里祝你在末來的 Python 學(xué)習(xí)職業(yè)生涯中一切順利!
后續(xù)小Mo會不定期更新書籍、視頻等學(xué)習(xí)資源,以上這些書籍資料也可通過關(guān)注微信公眾號免費(fèi)獲取哦!
歡迎關(guān)注我們的微信公眾號:MomodelAl
同時(shí),歡迎使用「Mo AI編程」微信小程序
以及登錄官網(wǎng),了解更多信息:Mo 人工智能教育實(shí)訓(xùn)平臺
Mo,發(fā)現(xiàn)意外,創(chuàng)造可能
注:部分資源來源于互聯(lián)網(wǎng),若有侵權(quán),請直接聯(lián)系作者刪除。