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