深入淺析,一步步用GPT打造你的聊天機器人
與ChatGPT聊天很有趣,而且信息量很大 —— 與它閑聊可以探索一些新的想法。但這些都是比較隨意的用例,新奇感很快就會減弱,特別是當人意識到它能產生幻覺的時候。
如何以更高效的方式使用ChatGPT呢?在OpenAI發布GPT3.5系列API后,可以做的事情遠不止是閑聊。QA(問答)是企業和個人使用的一個非常有效的用例 —— 用自然語言向機器人詢問自己的文件/數據,它可以通過從文件中檢索信息并生成回應來快速回答。可以把它用于客戶支持、綜合用戶研究、個人知識管理等等。
向機器人詢問與文件相關的問題。使用穩定擴散法生成的圖像。
本文將探討如何根據自己的數據建立問答聊天機器人,包括為什么有些方法行不通,以及如何利用llama-index和GPT API以高效的方式建立一個文檔問答聊天機器人的步驟指南。
(如果只想知道如何建立問答聊天機器人,可以直接跳到“逐步建立文檔問答聊天機器人”部分)
探索不同的方法
當ChatGPT問世時,可以想到把它作為自己工作的一個助手,從而節省自己的時間和精力等。
首先想到的是用自己的數據對GPT模型進行微調來實現這個目標。但是,微調需要花費相當多的錢,而且需要一個有實例的大數據集。也不可能在文件有變化時每次都進行微調。更為關鍵的一點是,微調根本不可能讓模型“知道”文檔中的所有信息,而是要教給模型一種新的技能。因此,對于(多)文檔質量保證來說,微調并不是一個好辦法。
第二個方法是通過在提示中提供上下文來進行提示工程。例如,可以在實際問題之前附加原始文檔內容,而不是直接問問題。但是GPT模型的注意力是有限的 —— 它只能接受提示中的幾千字(大約4000個標記或3000字)。只要有成千上萬的客戶反饋郵件和數百個產品文檔,就不可能給它提示中的所有背景。如果向API傳遞一個長的上下文,也是很昂貴的,因為定價是基于使用的代幣的數量。
由于提示符對輸入標記的數量有限制,想出了這樣一個主意來解決問題:首先使用一種算法來搜索文檔并挑選出相關的摘錄,然后只將這些相關的語境與問題一起傳遞給GPT模型。在過程中需要使用一個簡單、便捷的gpt-index?(現在改名為LlamaIndex)的庫。
從文件中提取相關部分,然后將其反饋給提示。
在下一節中,將給出一個使用LlamaIndex和GPT在自己的數據上建立一個問答聊天機器人的分步教程。
逐步建立文檔問答聊天機器人
在這一節中,將用LlamaIndex和GPT(text-davinci-003)在現有文檔的基礎上建立一個問答聊天機器人,這樣就可以用自然語言提出關于文檔的問題,并從聊天機器人那里得到答案。
前提條件
在開始本教程之前,需要做一些準備:
- OpenAI API密鑰,可以在https://platform.openai.com/account/api-keys找到。
- 一個文件數據庫。LlamaIndex支持許多不同的數據源,如Notion、Google Docs、Asana等。在本文中將只使用一個簡單的文本文件進行演示。
- 一個本地的Python環境或一個在線的Google Colab筆記本。
工作流程
工作流程很簡單,只需要幾個步驟:
- 1.用LlamaIndex為你的文檔數據建立一個索引。
- 2.用自然語言查詢該索引。
- 3.LlamaIndex將檢索相關部分并將其傳遞給GPT提示。
- 4.向GPT詢問相關的上下文并構建一個回應。
LlamaIndex所做的是將原始文檔數據轉換成一個矢量的索引,這對查詢來說是非常有效的。它將使用這個索引,根據查詢和數據的相似性,找到最相關的部分。然后,它將把檢索到的內容插入到它將發送給GPT的提示中,這樣GPT就有了回答問題的背景。
設置
首先需要安裝庫。只需在終端或谷歌Colab筆記本上運行以下命令。這些命令將同時安裝LlamaIndex和OpenAI。
接下來將在python中導入這些庫,并在一個新的.py文件中設置OpenAI API密鑰。
構建索引并保存
在安裝了所需的庫并將其導入后,將需要構建一個文檔的索引。
為了加載文檔,可以使用LllamaIndex?提供的SimpleDirectoryReader方法,或者可以從字符串中加載它。
LlamaIndex還提供各種數據連接器,包括Notion、Asana、Google Drive、Obsidian等。可以在https://llamahub.ai/找到可用的數據連接器。
加載完文檔后,就可以用以下方法簡單地構建索引了:
如果想保存索引并加載它以便將來使用,可以使用以下方法:
查詢索引并獲得響應
查詢索引很簡單:
一個回應的例子。
然后就可以得到答案了。在幕后,LlamaIndex將接收提示,在索引中搜索相關塊,并將提示和相關塊傳遞給GPT。
一些高級用法的說明
上面的步驟只是展示了使用LlamaIndex和GPT回答問題的一個非常簡單的入門用法。但可以做得比這更多。事實上,可以配置LlamaIndex來使用不同的大型語言模型(LLM),為不同的任務使用不同類型的索引,用一個新的索引來更新現有的索引,等等。如果有興趣,可以在https://gpt-index.readthedocs.io/en/latest/index.html,閱讀他們的文檔。
總結
本文中展示了如何結合使用GPT和LlamaIndex來構建一個文檔問答聊天機器人。雖然GPT(和其他LLM)本身就很強大,但如果把它與其他工具、數據或流程結合起來,它的力量也會被大大增強。