使用GPT根據文件建立聊天機器人的詳細教程

使用GPT根據文件建立聊天機器人的詳細教程

與ChatGPT聊天很有趣,而且資訊量很大–過去一段時間我一直在與它閒聊,探索一些新的想法,學習。但這些都是比較隨意的用例,新奇感很快就會減弱,特別是當你意識到它能產生幻覺的時候。

我們可能如何以更有成效的方式來使用它?隨著OpenAI最近釋出的GPT 3.5系列API,我們可以做的事情遠不止是閒聊。對於企業和你的個人使用來說,一個非常有成效的使用案例是QA(問題回答)–你用自然語言向機器人詢問你自己的檔案/資料,它可以通過從檔案中檢索資訊並生成迴應來快速回答你[1]。你可以把它用於客戶支援、綜合使用者研究、你的個人知識管理,等等

AI生成圖片

向機器人詢問與檔案有關的問題,用穩定擴散法生成的影象。

在這篇文章中,我將探討如何根據自己的資料建立自己的問答聊天機器人,包括為什麼有些方法行不通,以及如何利用llama-index和GPT API以高效的方式建立文件問答聊天機器人的步驟指南。

(如果你只想知道如何建立問答聊天機器人,你可以直接跳到 “逐步建立文件問答聊天機器人” 部分)

探索不同的方法

我的日常工作是產品經理–閱讀客戶反饋和內部檔案佔據了我生活的很大一部分時間。當ChatGPT出來的時候,我立刻想到了把它作為一個助手,幫助我綜合客戶的反饋,或者找到關於我正在做的功能的相關舊產品文件。

我首先想到的是用我自己的資料對GPT模型進行微調來實現這個目標。但是,微調需要花費相當多的錢,而且需要一個有例項的大資料集。也不可能在檔案有變化時每次都進行微調。更關鍵的一點是,微調根本不可能讓模型 “知道 “文件中的所有資訊,而是要教給模型一種新的技能。因此,對於(多)文件質量保證來說,微調並不是一個好辦法。

我想到的第二個方法是通過在prompt中提供上下文來進行prompt工程。例如,我可以在實際問題之前附加原始文件內容,而不是直接問問題。但是GPT模型的注意力是有限的–它只能接受prompt中的幾千字(大約4000個標記或3000字)。只要我們有成千上萬的客戶反饋郵件和數百個產品文件,就不可能給它prompt中的所有背景。如果你向API傳遞一個長的上下文,也是很昂貴的,因為定價是基於你使用的代幣的數量。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
I will ask you questions based on the following context:— Start of Context —YOUR DOCUMENT CONTENT— End of Context—My question is: “What features do users want to see in the app?”
I will ask you questions based on the following context:— Start of Context —YOUR DOCUMENT CONTENT— End of Context—My question is: “What features do users want to see in the app?”
I will ask you questions based on the following context:— Start of Context —YOUR DOCUMENT CONTENT— End of Context—My question is: “What features do users want to see in the app?”

(如果你想了解更多關於GPT的微調和promp工程,你可以閱讀這篇文章:https://medium.com/design-bootcamp/3-ways-to-tailor-foundation-language-models-like-gpt-for-your-business-e68530a763bd)

由於prompt對輸入標記的數量有限制,我想出了這樣一個主意:首先使用一種演算法來搜尋文件並挑選出相關的摘錄,然後只將這些相關的語境與我的問題一起傳遞給GPT模型。在我研究這個想法的時候,我發現了一個叫做gpt-index(現在改名為LlamaIndex)的庫,它正是我想做的事情,而且使用起來很簡單[2]。

自動聊天機器人工作流

從檔案中提取相關部分,然後將其反饋給prompt。圖示來自https://www.flaticon.com/

在下一節中,我將給出一個使用LlamaIndex和GPT在你自己的資料上建立一個問答聊天機器人的分步教程。

逐步建立文件問答聊天機器人

在這一節中,我們將用LlamaIndex和GPT(text-davinci-003)在現有文件的基礎上建立一個問答聊天機器人,這樣你就可以用自然語言提出關於文件的問題,並從聊天機器人那裡得到答案。

前提條件

在開始本教程之前,我們需要準備一些東西:

  • 你的OpenAI API金鑰,可以在https://platform.openai.com/account/api-keys
  • 一個你的文件資料庫。LlamaIndex支援許多不同的資料來源,如Notion、Google Docs、Asana等[3]。在本教程中,我們只使用一個簡單的文字檔案進行演示。
  • 一個本地的Python環境或一個線上的Google Colab筆記本

工作流程

工作流程簡單明瞭,只需要幾個步驟:

  1. 用LlamaIndex為你的文件資料建立一個索引
  2. 用自然語言查詢該索引
  3. LlamaIndex將檢索相關部分並將其傳遞給GPT prompt。
  4. 向GPT詢問相關的上下文並構建一個迴應

LlamaIndex所做的是將你的原始文件資料轉換成一個向量的索引,這對查詢來說是非常有效的。它將使用這個索引,根據查詢和資料的相似性,找到最相關的部分。然後,它將把檢索到的內容插入到它將傳送給GPT的prompt中,這樣GPT就有了回答你問題的背景。

設定

我們需要先安裝這些庫。只需在你的終端或谷歌Colab筆記本上執行以下命令。這些命令將同時安裝LlamaIndex和OpenAI。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
!pip install llama-index!pip install openai
!pip install llama-index!pip install openai
!pip install llama-index!pip install openai

接下來,我們將在python中匯入這些庫,並在一個新的.py檔案中設定你的OpenAI API金鑰。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
# Import necessary packagesfrom llama_index import GPTSimpleVectorIndex, Document, SimpleDirectoryReaderimport osos.environ['OPENAI_API_KEY'] = 'sk-YOUR-API-KEY'
# Import necessary packagesfrom llama_index import GPTSimpleVectorIndex, Document, SimpleDirectoryReaderimport osos.environ['OPENAI_API_KEY'] = 'sk-YOUR-API-KEY'
# Import necessary packagesfrom llama_index import GPTSimpleVectorIndex, Document, SimpleDirectoryReaderimport osos.environ['OPENAI_API_KEY'] = 'sk-YOUR-API-KEY'

構建索引並儲存它

在我們安裝了所需的庫並將其匯入後,我們將需要構建一個你的文件的索引。

為了載入你的文件,你可以使用LllamaIndex提供的SimpleDirectoryReader方法,或者你可以從字串中載入它。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
# Loading from a directorydocuments = SimpleDirectoryReader('your_directory').load_data()# Loading from strings, assuming you saved your data to strings text1, text2, ...text_list = [text1, text2, ...]documents = [Document(t) for t in text_list]
# Loading from a directorydocuments = SimpleDirectoryReader('your_directory').load_data()# Loading from strings, assuming you saved your data to strings text1, text2, ...text_list = [text1, text2, ...]documents = [Document(t) for t in text_list]
# Loading from a directorydocuments = SimpleDirectoryReader('your_directory').load_data()# Loading from strings, assuming you saved your data to strings text1, text2, ...text_list = [text1, text2, ...]documents = [Document(t) for t in text_list]

LlamaIndex還提供各種資料聯結器,包括Notion、Asana、Google Drive、Obsidian等。你可以在https://llamahub.ai/找到可用的資料聯結器。

載入完文件後,我們就可以用以下方法簡單地構建索引了:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
# Construct a simple vector indexindex = GPTSimpleVectorIndex(documents)
# Construct a simple vector indexindex = GPTSimpleVectorIndex(documents)
# Construct a simple vector indexindex = GPTSimpleVectorIndex(documents)

如果你想儲存索引並載入它以便將來使用,你可以使用以下方法:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
# Save your index to a index.json fileindex.save_to_disk('index.json')# Load the index from your saved index.json fileindex = GPTSimpleVectorIndex.load_from_disk('index.json')
# Save your index to a index.json fileindex.save_to_disk('index.json')# Load the index from your saved index.json fileindex = GPTSimpleVectorIndex.load_from_disk('index.json')
# Save your index to a index.json fileindex.save_to_disk('index.json')# Load the index from your saved index.json fileindex = GPTSimpleVectorIndex.load_from_disk('index.json')

查詢索引並獲得響應

查詢索引很簡單

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
# Querying the indexresponse = index.query("What features do users want to see in the app?")print(response)
# Querying the indexresponse = index.query("What features do users want to see in the app?")print(response)
# Querying the indexresponse = index.query("What features do users want to see in the app?")print(response)

查詢索引響應示例

一個響應的例子。

然後就可以了!你會得到你的答案。在引擎蓋下,LlamaIndex將接受你的prompt,在索引中搜尋相關的塊,並將你的prompt和相關塊傳遞給GPT。

一些關於高階用法的說明

上面的步驟只展示了使用LlamaIndex和GPT回答問題的一個非常簡單的入門用法。但你可以做的遠不止這些。事實上,你可以配置LlamaIndex來使用不同的大型語言模型(LLM),為不同的任務使用不同型別的索引,用一個新的索引來更新現有的索引,等等。如果你有興趣,你可以在https://gpt-index.readthedocs.io/en/latest/index.html,閱讀他們的文件。

小結

在這篇文章中,我們看到了如何將GPT與LlamaIndex結合起來使用,建立一個文件問題回答的聊天機器人。雖然GPT(和其他LLM)本身就很強大,但如果我們把它與其他工具、資料或流程結合起來,它的力量就會被大大放大。

你會用一個檔案問題回答聊天機器人做什麼?

References:

[1] What Is Question Answering? — Hugging Face. 5 Dec. 2022, https://huggingface.co/tasks/question-answering.

[2] Liu, Jerry. LlamaIndex. Nov. 2022. GitHub, https://github.com/jerryjliu/gpt_index.

via uxdesign.cc 閃電博編譯(原文有刪減)

評論留言