国精产品一区一区三区mba下载,国产免费av一区二区三区,国产三级片在线观看,国产免费内射又粗又爽密桃视频,国产精品综合一区二区三区

當前位置:主頁 > 要聞 > 正文
每日頭條!ChatGPT 和 Elasticsearch的結合:在私域數據上使用ChatGPT
來源:騰訊云作者:洞察網2023-04-21 16:24:40

如何結合 Elasticsearch 的搜索相關性和 OpenAI 的 ChatGPT 的問答功能來查詢您的數據?在此博客中,您將了解如何使用 Elasticsearch 將 ChatGPT 連接到專有數據存儲,并為您的數據構建問答功能。


(資料圖片僅供參考)

什么是ChatGPT?

近幾個月來,人們對 ChatGPT 充滿了熱情,這是一種由 OpenAI 創(chuàng)建的開創(chuàng)性人工智能模型。但 ChatGPT 到底是什么?

基于強大的 GPT 架構,ChatGPT 旨在理解文本輸入并生成類似人類的響應。GPT 代表“生成式預訓練Transformer(Generative Pre-trained Transformer)”。Transformer 是一種尖端模型架構,徹底改變了自然語言處理 (NLP) 領域。這些模型在海量數據上進行了預訓練,能夠理解上下文、生成相關響應,甚至進行對話. 要了解更多關于 transformer 模型的歷史和 Elastic Stack 中的一些 NLP 基礎知識,請務必查看很棒的Elastic ML 工程師 Josh Devins 的演講。

ChatGPT 的主要目標是促進人機之間有意義且引人入勝的交互。通過利用 NLP 的最新進展,ChatGPT 模型可以提供廣泛的應用程序,從聊天機器人和虛擬助手到內容生成、代碼完成等等。這些人工智能驅動的工具已迅速成為無數行業(yè)的寶貴資源,幫助企業(yè)簡化流程并增強服務。

然而,盡管 ChatGPT 具有不可思議的潛力,但用戶仍應注意某些限制。一個值得注意的限制是知識截止日期。目前,ChatGPT 接受的數據訓練截至 2021 年 9 月,這意味著它不知道此后發(fā)生的事件、發(fā)展或變化。因此,用戶在依賴 ChatGPT 獲取最新信息時應牢記這一限制。在討論快速變化的知識領域(例如軟件增強和功能甚至世界大事)時,這可能會導致反應過時或不正確。

ChatGPT 雖然是一種令人印象深刻的 AI 語言模型,但偶爾會在其響應中產生幻覺,當它無法訪問相關信息時通常會加劇這種情況。這種過度自信會導致向用戶提供不正確的答案或誤導性信息。重要的是要意識到這一限制,并在必要時以一定程度的懷疑態(tài)度、交叉檢查和驗證信息來處理 ChatGPT 生成的響應,以確保準確性和可靠性。

ChatGPT 的另一個限制是它缺乏關于特定領域內容的知識。雖然它可以根據接受過培訓的信息生成連貫且與上下文相關的響應,但它無法訪問特定領域的數據或提供依賴于用戶獨特知識庫的個性化答案。例如,它可能無法深入了解組織的專有軟件或內部文檔。因此,用戶在直接從 ChatGPT 尋求有關此類主題的建議或答案時應謹慎行事。

最小化這些限制的一種方法是為 ChatGPT 提供對與您的域和問題相關的特定文檔的訪問權限,并啟用 ChatGPT 的語言理解功能以生成定制的響應。

這可以通過將 ChatGPT 連接到 Elasticsearch 等搜索引擎來實現。

Elasticsearch——you know, for search!

Elasticsearch 是一個高效的搜索引擎,旨在提供相關文檔檢索,確保用戶可以快速準確地訪問他們需要的信息。Elasticsearch 的主要重點是向用戶提供最相關的結果、簡化搜索過程并增強用戶體驗。

Elasticsearch 擁有眾多可確保一流搜索性能的功能,包括支持傳統關鍵字和基于文本的搜索 ( BM25 )以及一個具備精確匹配和近似kNN的AI向量搜索(k-Nearest Neighbor)。這些高級功能使 Elasticsearch 不僅可以檢索相關的結果,還可以檢索使用自然語言表達的查詢的結果。通過利用傳統、向量或混合搜索 (BM25 + kNN),Elasticsearch 可以提供無與倫比的精確結果,幫助用戶輕松找到他們需要的信息。

Elasticsearch 的主要優(yōu)勢之一是其強大的 API,它可以與其他服務無縫集成以擴展和增強其功能。通過將 Elasticsearch 與各種第三方工具和平臺集成,用戶可以根據自己的特定需求創(chuàng)建功能強大的自定義搜索解決方案。這種靈活性和可擴展性使 Elasticsearch 成為希望提高搜索能力并在競爭激烈的數字環(huán)境中保持領先地位的企業(yè)的理想選擇。

通過與 ChatGPT 等高級人工智能模型協同工作,Elasticsearch 可以為 ChatGPT 提供最相關的文檔以用于其響應。Elasticsearch 和 ChatGPT 之間的這種協同作用可確保用戶收到與其查詢相關的事實、上下文相關和最新的答案。從本質上講,Elasticsearch 的檢索能力與 ChatGPT 的自然語言理解能力相結合,提供了無與倫比的用戶體驗,為信息檢索和 AI 支持的協助樹立了新標準。

如何將 ChatGPT 與 Elasticsearch 結合使用

Python API接受用戶提問。

為 Elasticsearch 生成混合搜索請求

title字段上的 BM25 匹配kNN 搜索title向量字段提升 kNN 搜索結果以對齊分數設置 size=1 只返回得分最高的文檔

2.搜索請求發(fā)送到Elasticsearch。

3.文檔正文和原始url返回給python應用程序。

對 OpenAI ChatCompletion 進行 API 調用:prompt:"answer this question using only this document "生成的響應返回給 python。Python 將原始文檔源 url 添加到生成的響應中,并將其打印到屏幕上供用戶使用。

ElasticDoc ChatGPT 流程利用 Python 界面接受用戶問題并為 Elasticsearch 生成混合搜索請求,結合 BM25 和 kNN 搜索方法從 Elastic的官方文檔中查找最相關的文檔,這些文檔現已在 Elasticsearch 中編制索引。但是,您不必使用混合搜索甚至向量搜索。Elasticsearch 可以靈活地使用最適合您需求的搜索模式,并為您的特定數據集提供最相關的結果。

在檢索到最佳結果后,該程序會為 OpenAI 的 ChatCompletion API 制作Prompt,指示它僅使用所選文檔中的信息來回答用戶的問題。此提示是確保 ChatGPT 模型僅使用官方文檔中的信息、這是減少ChatGPT產生幻覺的關鍵。

最后,該程序向用戶展示 API 生成的響應和源文檔的鏈接,提供無縫且用戶友好的體驗,集成了前端交互、Elasticsearch 查詢和 OpenAI API 使用以實現高效的問答。

請注意,雖然為簡單起見我們只返回得分最高的文檔,但最佳做法是返回多個文檔以為 ChatGPT 提供更多上下文??梢栽诓恢挂粋€文檔頁面中找到正確的答案,或者如果我們要為完整的正文文本生成向量,那么這些較大的文本正文可能需要分塊并存儲在多個 Elasticsearch 文檔中。通過利用 Elasticsearch 與傳統搜索方法協同搜索大量矢量字段的能力,您可以顯著提高您的頂級文檔召回率。

技術設置

技術要求相當低,但需要一些步驟才能將所有部分組合在一起。對于此示例,我們將配置Elasticsearch 網絡爬蟲以攝取 Elastic 文檔并在攝取時為title生成向量。您可以跟隨本文并復制此設置,或使用自己的數據。為了跟隨本文,我們需要:

Elasticsearch集群Eland Python 庫OpenAI API 賬號運行我們的 python 前端和 api 后端的服務器

Elastic Cloud設置

本節(jié)中的步驟假設您當前沒有在 Elastic Cloud 中運行的 Elasticsearch 集群。如果你已經有一個 Elastic Cloud

的集群,可以跳到下一部分。

注冊

如果您還沒有 Elasticsearch 集群,您可以通過Elastic Cloud注冊免費試用。

創(chuàng)建部署

注冊后,系統會提示您創(chuàng)建第一個部署。

為您的部署創(chuàng)建一個名稱。您可以接受默認的云提供商和區(qū)域,或單擊“編輯設置”并選擇其他位置。單擊創(chuàng)建部署。很快將為您配置一個新的部署,您將登錄到 Kibana。

回到云端

在繼續(xù)之前,我們需要在 Cloud Console 中做幾件事:

單擊左上角的導航圖標并選擇管理此部署。

添加機器學習節(jié)點。

返回 Cloud Console,單擊左側導航欄中部署名稱下的Edit。向下滾動到 Machine Learning instances 框并單擊 +Add Capacity。在Size per zone下,單擊并選擇 2 GB RAM大小的機器學習節(jié)點向下滾動并單擊保存:在彈出的 summarizing the architecture changes窗口中,單擊“Confirm”。片刻之后,您的部署現在將能夠運行機器學習模型!

重置 Elasticsearch 部署用戶和密碼:

單擊部署名稱下方左側導航欄中的安全性。單擊重置密碼并使用重置進行確認。(注意:因為這是一個新集群,所以不應使用此 Elastic 密碼。)下載為“elastic”用戶新創(chuàng)建的密碼。(我們將使用它從 Hugging Face 和我們的 python 程序中加載我們的模型。)

復制 Elasticsearch 部署云 ID。

單擊您的部署名稱以轉到概覽頁面。在右側單擊復制圖標以復制您的 Cloud ID。(保存此以備后用連接到 Deployment。)

Eland

接下來,我們需要將embedding模型加載到 Elasticsearch 中,用于為我們的博客title生成向量,以及為用戶的搜索問題生成向量。我們將使用由 SentenceTransformers 訓練并托管在 Hugging Face 模型中心上的all-distilroberta-v1模型。在此示例中,我們之所以選擇這個模式,是因為它是在涵蓋廣泛主題的非常大的數據集上訓練的,適合一般用途。但是,我們并非一定要選擇這個模型,對于向量搜索用例,使用針對您的特定數據集進行微調的模型通常會提供最佳相關性。

為此,我們將使用Elastic 創(chuàng)建的Eland python 庫。該庫提供了廣泛的數據科學功能,但我們將使用它作為橋梁,將模型從 Hugging Face 模型中心加載到 Elasticsearch,以便它可以部署在機器學習節(jié)點上以供推理使用。

Eland 可以作為 python 腳本的一部分運行,也可以在命令行上運行。該存儲庫還為希望走這條路的用戶提供了一個 Docker 容器。今天我們將在一個小型 python notebook中運行 Eland ,它可以在網絡瀏覽器中免費運行在谷歌的 Colab 中。

打開程序鏈接并單擊頂部的“在 Colab 中打開”按鈕以在 Colab 中啟動筆記本。

將變量 hf_model_id 設置為模型名稱。此模型已在示例代碼中設置,但如果您想使用不同的模型可自行修改:

hf_model_id="sentence-transformers/all-distilroberta-v1"從 Hugging Face 復制模型名稱。最簡單的方法是單擊模型名稱右側的復制圖標。

運行 cloud auth 部分,系統會提示您輸入:

Cloud ID(您可以在 Elastic Cloud 控制臺中找到它)Elasticsearch 用戶名(最簡單的方法是使用在創(chuàng)建部署時創(chuàng)建的“Elastic”用戶)Elasticsearch的密碼

運行剩余的步驟:

這將從 Hugging face 下載模型,將其分塊,并將其加載到 Elasticsearch 中。將模型部署(啟動)到機器學習節(jié)點上。

Elasticsearch 索引和網絡爬蟲

接下來我們將創(chuàng)建一個新的 Elasticsearch 索引來存儲我們的 Elastic 文檔,將網絡爬蟲配置為自動抓取這些文檔并為其編制索引,并使用攝取管道為文檔title生成向量。

請注意,您可以在此步驟中使用您的專有數據,以創(chuàng)建適合您的領域的問答體驗。

如果您尚未打開 Kibana,請從 Cloud Console 打開它。在 Kibana 中,導航到Enterprise Search -> Overview。單擊創(chuàng)建 Elasticsearch 索引。使用 Web Crawler 作為攝取方法,輸入 elastic-docs 作為索引名稱。然后,單擊創(chuàng)建索引。單擊“ingest Pipeline”選項卡。單擊 Ingest Pipeline中的 Copy and customize。單擊 Add Inference Pipeline為新管道輸入名稱 elastic-docs_title-vector。選擇您在上面的 Eland 步驟中加載的經過訓練的 ML 模型。選擇title作為源字段。單擊Continue,然后在測試階段再次單擊Continue在 Review 階段點擊 Create Pipeline

更新 dense_vector 字段的映射。(注意:對于 Elasticsearch 8.8+ 版本,此步驟應該是自動的。)

在導航菜單中,單擊 Dev Tools。如果這是您第一次打開 Dev Tools,您可能必須在帶有文檔的彈出窗口中單擊“關閉”。在 Console 選項卡的 Dev Tools 中,使用以下代碼更新dense_vector目標字段的映射。您只需將其粘貼到代碼框中,然后單擊第 1 行右側的小箭頭。
POST search-elastic-docs/_mapping{  "properties": {    "title-vector": {      "type": "dense_vector",      "dims": 768,      "index": true,      "similarity": "dot_product"    }  }}了解詳情
您應該會在屏幕的右半部分看到以下響應:
{  "acknowledged": true}
這將允許我們稍后在title字段上運行 kNN 向量搜索。

配置網絡爬蟲以爬取 Elastic官方文檔:

再次單擊導航菜單,然后單擊 Enterprise Search -> Overview。在內容下,單擊索引。單擊 search-elastic-docs。單擊“Manage Domains”選項卡。單擊“Add domain”。輸入https://www.elastic.co/guide/en,然后單擊驗證域。檢查運行后,單擊Add domain。然后單擊抓取規(guī)則。逐個添加以下爬行規(guī)則。從底部開始,逐步向上。規(guī)則按照第一個匹配進行評估。

Disallow

Contains

release-notes

Allow

Regex

/guide/en/.*/current/.*

Disallow

Regex

.*

準備好所有規(guī)則后,單擊頁面頂部的抓取。然后,單擊“Crawl all domains on this index”。

Elasticsearch 的網絡爬蟲現在將開始爬取文檔站點,為title字段生成向量,并對文檔和向量建立索引。

第一次爬網需要一些時間才能完成。同時,我們可以設置 OpenAI API 憑證和 Python 后端。

與 OpenAI API 連接

要向 ChatGPT 發(fā)送文檔和問題,我們需要一個 OpenAI API 帳戶和密鑰。如果您還沒有帳戶,可以創(chuàng)建一個免費帳戶,您將獲得初始數量的免費積分。

前往https://platform.openai.com并點擊注冊。您可以通過電子郵件地址和密碼進行注冊,也可以使用Google或Microsoft登錄。

創(chuàng)建帳戶后,您需要創(chuàng)建一個 API 密鑰:

單擊API Key。單擊創(chuàng)建新密鑰。復制新密鑰并將其保存在安全的地方,因為您將無法再次查看該密鑰。

Python 后端設置

克隆或下載python程序

Github 代碼鏈接

安裝所需的 python 庫。我們在具有隔離環(huán)境的 Replit 中運行示例程序。如果您在筆記本電腦或 VM 上運行它,最佳做法是為 python 設置一個VENV。運行 pip install -r requirements.txt

2.設置身份驗證和連接環(huán)境變量(例如,如果在命令行上運行:export openai_api=”123456abcdefg789”)

openai_api - OpenAI API Keycloud_id - Elastic Cloud IDcloud_user - Elasticsearch 集群用戶cloud_pass - Elasticsearch 用戶密碼

3.運行streamlit程序。有關 streamlit 的更多信息可以在其文檔中找到。

Streamlit 有自己的啟動命令:streamlit run elasticdocs_gpt.py這將啟動網絡瀏覽器,并將 url 打印到命令行。

聊天響應的示例

一切都已攝取且前端啟動并運行后,您可以開始詢問有關 Elastic 官方文檔的問題。

詢問“Show me the API call for an inference processor”現在會返回一個 API 調用的例子和有關配置設置的信息。

詢問將新集成添加到 Elastic Agent 的步驟:

如前所述,允許 ChatGPT 僅根據訓練過的數據回答問題的風險之一是它容易產生錯誤答案的幻覺。該項目的目標之一是為 ChatGPT 提供包含正確信息的數據,并讓它制定答案。

那么當我們給 ChatGPT 一個不包含正確信息的文檔時會發(fā)生什么?比方說,請它告訴您如何造船(Elastic 的官方文檔不包含此內容):

當 ChatGPT 無法在我們提供的文檔中找到問題的答案時,它會退回到我們的提示指令,簡單地告訴用戶它無法回答問題。

Elasticsearch 的強大檢索 + ChatGPT 的強大功能

在這個例子中,我們展示了如何將Elasticsearch強大的搜索檢索功能與GPT模型生成的最新進展的AI響應集成,從而將用戶體驗提升到一個全新的水平。

這些組件可以根據您的具體要求進行定制,并進行調整以提供最佳結果。雖然我們使用了Elastic網絡爬蟲來攝取公共數據,但您并不局限于此方法。你隨意嘗試其他embedding模型,尤其是那些針對特定領域數據進行微調的模型。

您今天可以嘗試本博客中討論的所有功能!要構建您自己的 ElasticDocs GPT 體驗,請注冊一個Elastic 試用帳戶,然后查看此示例代碼庫以開始使用。

如果您想了解更多Elasticsearch在搜索相關性上的新可能,可以嘗試以下兩個:

[博客] 使用 Elasticsearch 部署 NLP 文本嵌入和矢量搜索[博客] 使用 Elastic 實現圖像相似度搜索

[責任編輯:linlin]

標簽:

評論排行
熱門話題
最近更新