在本教程中,你將構(gòu)建一個(gè)大型語(yǔ)言模型 (LLM) 聊天機(jī)器人,該機(jī)器人使用稱為檢索增強(qiáng)生成 (RAG) 的模式。
使用 RAG 構(gòu)建的聊天機(jī)器人可以克服 ChatGPT 等通用會(huì)話模型所具有的一些限制。 特別是,他們能夠討論和回答以下問(wèn)題:
- 你的組織私有的信息
- 不屬于訓(xùn)練數(shù)據(jù)集的事件,或者 LLM 完成訓(xùn)練后發(fā)生的事件
作為一個(gè)額外的好處,RAG 可以幫助 LLM 以事實(shí)為 “基礎(chǔ)”,使他們不太可能做出回應(yīng)或 “產(chǎn)生幻覺(jué)”。
實(shí)現(xiàn)這一目標(biāo)的秘訣是使用兩步過(guò)程從 LLM 獲得答案:
- 首先在檢索階段,針對(duì)用戶的查詢搜索一個(gè)或多個(gè)數(shù)據(jù)源。 檢索在此搜索中找到的相關(guān)文檔。 為此,使用 Elasticsearch 索引是一個(gè)很好的選擇,使你能夠在關(guān)鍵字、密集和稀疏向量搜索方法,甚至它們的混合組合之間進(jìn)行選擇。
- 然后在生成階段,用戶的提示被擴(kuò)展為包括第一階段檢索到的文檔,并添加了對(duì) LLM 的指令,以在檢索到的信息中找到用戶問(wèn)題的答案。 擴(kuò)展提示(包括問(wèn)題的添加上下文)將代替原始查詢發(fā)送到 LLM。
教程結(jié)構(gòu)
本教程分為兩個(gè)主要部分。
- 在第一部分中,您將學(xué)習(xí)如何運(yùn)行 Chatbot RAG 應(yīng)用程序示例,這是一個(gè)具有 Python 后端和 React 前端的完整應(yīng)用程序。
- 一旦你啟動(dòng)并運(yùn)行了示例應(yīng)用程序,本教程的第二部分將解釋 RAG 實(shí)現(xiàn)的不同組件,以便你可以根據(jù)自己的需要調(diào)整示例代碼。
要求
要學(xué)習(xí)本教程,你需要安裝以下組件:
?1)Elasticsearch 及 Kibana
有關(guān)安裝說(shuō)明,請(qǐng)參閱如下的文章:
-
如何在 Linux,MacOS 及 Windows 上進(jìn)行安裝 Elasticsearch
-
Kibana:如何在 Linux,MacOS 及 Windows 上安裝 Elastic 棧中的 Kibana
在安裝的時(shí)候,請(qǐng)選擇 Elastic Stack 8.x?進(jìn)行安裝。在安裝的時(shí)候,我們可以看到如下的安裝信息:
?
在下面的展示中,我將使用 Elastic Stack 8.11 來(lái)進(jìn)行展示。
2)OpenAI 的 API 密鑰。 實(shí)際上,你可以使用你喜歡的任何其他 LLM,只要它受到 Langchain 項(xiàng)目的支持即可。
3)Python 解釋器。 確保它是最新版本,例如 Python 3.8 或更高版本。
4)Node.js 和 Yarn。
本教程重點(diǎn)介紹 RAG 主題。 為了能夠修改示例應(yīng)用程序,你將需要以下技術(shù)的基本知識(shí):
- 使用 Flask 進(jìn)行 Python 后端開發(fā)。
- 使用 React 進(jìn)行 TypeScript 前端開發(fā)。
整個(gè)項(xiàng)目的完整代碼在如下地址可以進(jìn)行下載:
git clone https://github.com/liu-xiao-guo/elasticsearch-labs
cd elasticsearch-labs/example-apps/chatbot-rag-app
聊天機(jī)器人示例位于 example-apps/chatbot-rag-app 子目錄中。
$ pwd
/Users/liuxg/python/elasticsearch-labs
$ ls
CONTRIBUTING.md bin supporting-blog-content
LICENSE datasets test
Makefile example-apps
README.md notebooks
$ cd example-apps
$ ls
README.md openai-embeddings workplace-search
chatbot-rag-app relevance-workbench
internal-knowledge-search search-tutorial
$ cd chatbot-rag-app/
$ ls
Dockerfile api data frontend requirements.txt
README.md app-demo.gif env.example requirements.in
Python 后端
在本節(jié)中,我們將設(shè)置和配置項(xiàng)目的后端部分。
安裝 Python 依賴項(xiàng)
為了遵循 Python 最佳實(shí)踐,你現(xiàn)在將創(chuàng)建一個(gè)虛擬環(huán)境,這是專用于該項(xiàng)目的私有 Python 安裝,可以在其中安裝所有依賴項(xiàng)。 使用以下命令執(zhí)行此操作:
python3 -m venv .venv
$ pwd
/Users/liuxg/python/elasticsearch-labs/example-apps/chatbot-rag-app
$ python3 -m venv .venv
此命令在 .venv (dot-venv) 目錄中創(chuàng)建 Python 虛擬環(huán)境。 你可以將此命令中的 .venv 替換為你喜歡的任何其他名稱。 請(qǐng)注意,在某些 Python 安裝中,你可能需要使用 python 而不是 python3 來(lái)調(diào)用 Python 解釋器。
下一步是激活虛擬環(huán)境,這是使該虛擬環(huán)境成為你所在終端會(huì)話的活動(dòng) Python 環(huán)境的一種方法。如果你使用的是基于 UNIX 的操作系統(tǒng)(例如 Linux 或 macOS),請(qǐng)激活 虛擬環(huán)境如下:
source .venv/bin/activate
$ pwd
/Users/liuxg/python/elasticsearch-labs/example-apps/chatbot-rag-app
$ python3 -m venv .venv
$ source .venv/bin/activate
(.venv) $
如果你在 Microsoft Windows 計(jì)算機(jī)上的 WSL 環(huán)境中工作,上述激活命令也適用。 但如果你使用的是 Windows 命令提示符或 PowerShell,激活命令會(huì)有所不同:
.venv\Scripts\activate
激活虛擬環(huán)境后,命令行提示符將更改為顯示環(huán)境名稱:
(.venv) $ _
配置 Python 環(huán)境的最后一步是安裝入門應(yīng)用程序所需的一些包。 確保上一步中已激活虛擬環(huán)境,然后運(yùn)行以下命令安裝這些依賴項(xiàng):
pip install -r requirements.txt
??
編寫配置文件
在上一節(jié)中下載的代碼的主目錄中有一個(gè)名為 env.example 的文件。 該文件包含應(yīng)用程序支持的所有配置變量。
復(fù)制該文件,并將其命名為 .env:
cp env.example .env
(.venv) $ ls -al
total 920
drwxr-xr-x 14 liuxg staff 448 Jan 15 09:25 .
drwxr-xr-x 9 liuxg staff 288 Jan 15 09:21 ..
-rw-r--r-- 1 liuxg staff 55 Jan 15 09:21 .flaskenv
-rw-r--r-- 1 liuxg staff 82 Jan 15 09:21 .gitignore
drwxr-xr-x 6 liuxg staff 192 Jan 15 09:25 .venv
-rw-r--r-- 1 liuxg staff 807 Jan 15 09:21 Dockerfile
-rw-r--r-- 1 liuxg staff 6085 Jan 15 09:21 README.md
drwxr-xr-x 7 liuxg staff 224 Jan 15 09:21 api
-rw-r--r-- 1 liuxg staff 430277 Jan 15 09:21 app-demo.gif
drwxr-xr-x 4 liuxg staff 128 Jan 15 09:21 data
-rw-r--r-- 1 liuxg staff 860 Jan 15 09:21 env.example
drwxr-xr-x 9 liuxg staff 288 Jan 15 09:21 frontend
-rw-r--r-- 1 liuxg staff 315 Jan 15 09:21 requirements.in
-rw-r--r-- 1 liuxg staff 5259 Jan 15 09:21 requirements.txt
(.venv) $ cp env.example .env
(.venv) $ ls .env
.env
如果您在 Windows 上學(xué)習(xí)本教程,請(qǐng)?jiān)谏厦娴拿钪惺褂?copy 而不是 cp。
在你喜歡的文本編輯器中打開 .env 以查看應(yīng)用程序配置,并查看以下小節(jié)以獲取有關(guān)如何配置應(yīng)用程序的指導(dǎo)。
Elasticsearch 設(shè)置
我們?cè)?.env 中設(shè)置如下的變量:
.env
ELASTICSEARCH_URL=https://elastic:yarOjyX5CLqTsKVE3v*d@192.168.0.3:9200
ES_INDEX=workplace-app-docs
ES_INDEX_CHAT_HISTORY=workplace-app-docs-chat-history
LLM_TYPE=openai
OPENAI_API_KEY=YourOpenAiKey
??
在上面,你必須根據(jù)自己的 Elasticsearch 安裝修改上面的?ELASTICSEARCH_URL 值。你還需要修改上面的?OPENAI_API_KEY 值。你需要在 OpenAI 的網(wǎng)站中申請(qǐng)開發(fā)者 key。你可以在地址?https://platform.openai.com/api-keys?進(jìn)行申請(qǐng)。
為了能夠讓 Python 連接到 Elasticsearch,我們必須把 Elasticsearch 的證書拷貝到當(dāng)前的目錄下:
(.venv) $ pwd
/Users/liuxg/python/elasticsearch-labs/example-apps/chatbot-rag-app/api
(.venv) $ cp ~/elastic/elasticsearch-8.11.0/config/certs/http_ca.crt .
(.venv) $ ls http_ca.crt
http_ca.crt
另外,在 github 上的代碼是為在 docker 的環(huán)境下運(yùn)行二準(zhǔn)備的,我們必須修改其中的一個(gè)部分以使得它正常運(yùn)行:
api/elasticsearch_client.py
if ELASTICSEARCH_URL:
elasticsearch_client = Elasticsearch(
hosts=[ELASTICSEARCH_URL],
ca_certs = ./http_ca.crt,
verify_certs = True
)
data/index_data.py
if ELASTICSEARCH_URL:
elasticsearch_client = Elasticsearch(
hosts=[ELASTICSEARCH_URL],
ca_certs = "./http_ca.crt",
verify_certs = True
)
寫入示例數(shù)據(jù)集
該應(yīng)用程序附帶一個(gè)示例數(shù)據(jù)集,存儲(chǔ)在 data/data.json 文件中。 請(qǐng)隨意在文本編輯器中打開此文件,以熟悉其中包含的文檔。
使用以下命令將數(shù)據(jù)集導(dǎo)入應(yīng)用程序:
flask create-index
(.venv) $ pwd
/Users/liuxg/python/elasticsearch-labs/example-apps/chatbot-rag-app
(.venv) $ flask create-index
".elser_model_2" model is available
Loading data from $/Users/liuxg/python/elasticsearch-labs/example-apps/chatbot-rag-app/api/../data/data.json
Loaded 15 documents
Split 15 documents into 26 chunks
Creating Elasticsearch sparse vector store in Elastic Cloud:
等上面的命令運(yùn)行完畢后,我們到 Kibana 中進(jìn)行查看:
啟動(dòng)后端
完成上述所有步驟后,你應(yīng)該能夠使用以下命令啟動(dòng) Python 后端:
flask run
保持后端運(yùn)行并打開一個(gè)新的終端會(huì)話以繼續(xù)本教程的其余部分。
React 前端
在本部分中,你將啟動(dòng)聊天機(jī)器人的前端。
安裝依賴項(xiàng)
前端位于項(xiàng)目的 frontend 子目錄中,因此請(qǐng)繼續(xù)更改為:
cd frontend
$ pwd
/Users/liuxg/python/elasticsearch-labs/example-apps/chatbot-rag-app
$ cd frontend/
運(yùn)行 yarn 命令安裝所有前端依賴項(xiàng):
yarn
運(yùn)行前端
使用以下命令啟動(dòng)前端:
yarn start
幾秒鐘后,你的瀏覽器應(yīng)該打開該應(yīng)用程序。
使用應(yīng)用程序
現(xiàn)在,你可以通過(guò)單擊 common questions 中的一個(gè)或輸入你自己的問(wèn)題來(lái)向聊天機(jī)器人詢問(wèn)任何問(wèn)題。
聊天機(jī)器人的響應(yīng)將來(lái)自導(dǎo)入的數(shù)據(jù)集,每個(gè)響應(yīng)將引用檢索到的文檔以及使用特定文檔的文檔。
一定要嘗試提出后續(xù)問(wèn)題,這些問(wèn)題應(yīng)該 “記住” 會(huì)話之前討論的內(nèi)容。
本教程的其余部分將討論該應(yīng)用程序的一些實(shí)現(xiàn)細(xì)節(jié),以便你可以根據(jù)需要進(jìn)行更改、試驗(yàn)和調(diào)整代碼。請(qǐng)關(guān)注我們的下一個(gè)部分!請(qǐng)?jiān)敿?xì)閱讀文章 “Elasticsearch:聊天機(jī)器人教程(二)”。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-796877.html
更多閱讀,請(qǐng)參閱 “Elasticsearch:使用 Elasticsearch 向量搜索及 RAG 來(lái)實(shí)現(xiàn) Chatbot”。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-796877.html
到了這里,關(guān)于Elasticsearch:聊天機(jī)器人教程(一)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!