深入淺析,一步步用GPT打造你的聊天機(jī)器人
與ChatGPT聊天很有趣,而且信息量很大 —— 與它閑聊可以探索一些新的想法。但這些都是比較隨意的用例,新奇感很快就會(huì)減弱,特別是當(dāng)人意識(shí)到它能產(chǎn)生幻覺的時(shí)候。
如何以更高效的方式使用ChatGPT呢?在OpenAI發(fā)布GPT3.5系列API后,可以做的事情遠(yuǎn)不止是閑聊。QA(問(wèn)答)是企業(yè)和個(gè)人使用的一個(gè)非常有效的用例 —— 用自然語(yǔ)言向機(jī)器人詢問(wèn)自己的文件/數(shù)據(jù),它可以通過(guò)從文件中檢索信息并生成回應(yīng)來(lái)快速回答??梢园阉糜诳蛻糁С帧⒕C合用戶研究、個(gè)人知識(shí)管理等等。
向機(jī)器人詢問(wèn)與文件相關(guān)的問(wèn)題。使用穩(wěn)定擴(kuò)散法生成的圖像。
本文將探討如何根據(jù)自己的數(shù)據(jù)建立問(wèn)答聊天機(jī)器人,包括為什么有些方法行不通,以及如何利用llama-index和GPT API以高效的方式建立一個(gè)文檔問(wèn)答聊天機(jī)器人的步驟指南。
(如果只想知道如何建立問(wèn)答聊天機(jī)器人,可以直接跳到“逐步建立文檔問(wèn)答聊天機(jī)器人”部分)
探索不同的方法
當(dāng)ChatGPT問(wèn)世時(shí),可以想到把它作為自己工作的一個(gè)助手,從而節(jié)省自己的時(shí)間和精力等。
首先想到的是用自己的數(shù)據(jù)對(duì)GPT模型進(jìn)行微調(diào)來(lái)實(shí)現(xiàn)這個(gè)目標(biāo)。但是,微調(diào)需要花費(fèi)相當(dāng)多的錢,而且需要一個(gè)有實(shí)例的大數(shù)據(jù)集。也不可能在文件有變化時(shí)每次都進(jìn)行微調(diào)。更為關(guān)鍵的一點(diǎn)是,微調(diào)根本不可能讓模型“知道”文檔中的所有信息,而是要教給模型一種新的技能。因此,對(duì)于(多)文檔質(zhì)量保證來(lái)說(shuō),微調(diào)并不是一個(gè)好辦法。
第二個(gè)方法是通過(guò)在提示中提供上下文來(lái)進(jìn)行提示工程。例如,可以在實(shí)際問(wèn)題之前附加原始文檔內(nèi)容,而不是直接問(wèn)問(wèn)題。但是GPT模型的注意力是有限的 —— 它只能接受提示中的幾千字(大約4000個(gè)標(biāo)記或3000字)。只要有成千上萬(wàn)的客戶反饋郵件和數(shù)百個(gè)產(chǎn)品文檔,就不可能給它提示中的所有背景。如果向API傳遞一個(gè)長(zhǎng)的上下文,也是很昂貴的,因?yàn)槎▋r(jià)是基于使用的代幣的數(shù)量。
由于提示符對(duì)輸入標(biāo)記的數(shù)量有限制,想出了這樣一個(gè)主意來(lái)解決問(wèn)題:首先使用一種算法來(lái)搜索文檔并挑選出相關(guān)的摘錄,然后只將這些相關(guān)的語(yǔ)境與問(wèn)題一起傳遞給GPT模型。在過(guò)程中需要使用一個(gè)簡(jiǎn)單、便捷的gpt-index?(現(xiàn)在改名為L(zhǎng)lamaIndex)的庫(kù)。

從文件中提取相關(guān)部分,然后將其反饋給提示。
在下一節(jié)中,將給出一個(gè)使用LlamaIndex和GPT在自己的數(shù)據(jù)上建立一個(gè)問(wèn)答聊天機(jī)器人的分步教程。
逐步建立文檔問(wèn)答聊天機(jī)器人
在這一節(jié)中,將用LlamaIndex和GPT(text-davinci-003)在現(xiàn)有文檔的基礎(chǔ)上建立一個(gè)問(wèn)答聊天機(jī)器人,這樣就可以用自然語(yǔ)言提出關(guān)于文檔的問(wèn)題,并從聊天機(jī)器人那里得到答案。
前提條件
在開始本教程之前,需要做一些準(zhǔn)備:
- OpenAI API密鑰,可以在https://platform.openai.com/account/api-keys找到。
 - 一個(gè)文件數(shù)據(jù)庫(kù)。LlamaIndex支持許多不同的數(shù)據(jù)源,如Notion、Google Docs、Asana等。在本文中將只使用一個(gè)簡(jiǎn)單的文本文件進(jìn)行演示。
 - 一個(gè)本地的Python環(huán)境或一個(gè)在線的Google Colab筆記本。
 
工作流程
工作流程很簡(jiǎn)單,只需要幾個(gè)步驟:
- 1.用LlamaIndex為你的文檔數(shù)據(jù)建立一個(gè)索引。
 - 2.用自然語(yǔ)言查詢?cè)撍饕?/li>
 - 3.LlamaIndex將檢索相關(guān)部分并將其傳遞給GPT提示。
 - 4.向GPT詢問(wèn)相關(guān)的上下文并構(gòu)建一個(gè)回應(yīng)。
 
LlamaIndex所做的是將原始文檔數(shù)據(jù)轉(zhuǎn)換成一個(gè)矢量的索引,這對(duì)查詢來(lái)說(shuō)是非常有效的。它將使用這個(gè)索引,根據(jù)查詢和數(shù)據(jù)的相似性,找到最相關(guān)的部分。然后,它將把檢索到的內(nèi)容插入到它將發(fā)送給GPT的提示中,這樣GPT就有了回答問(wèn)題的背景。
設(shè)置
首先需要安裝庫(kù)。只需在終端或谷歌Colab筆記本上運(yùn)行以下命令。這些命令將同時(shí)安裝LlamaIndex和OpenAI。
接下來(lái)將在python中導(dǎo)入這些庫(kù),并在一個(gè)新的.py文件中設(shè)置OpenAI API密鑰。
構(gòu)建索引并保存
在安裝了所需的庫(kù)并將其導(dǎo)入后,將需要構(gòu)建一個(gè)文檔的索引。
為了加載文檔,可以使用LllamaIndex?提供的SimpleDirectoryReader方法,或者可以從字符串中加載它。
LlamaIndex還提供各種數(shù)據(jù)連接器,包括Notion、Asana、Google Drive、Obsidian等。可以在https://llamahub.ai/找到可用的數(shù)據(jù)連接器。
加載完文檔后,就可以用以下方法簡(jiǎn)單地構(gòu)建索引了:
如果想保存索引并加載它以便將來(lái)使用,可以使用以下方法:
查詢索引并獲得響應(yīng)
查詢索引很簡(jiǎn)單:

一個(gè)回應(yīng)的例子。
然后就可以得到答案了。在幕后,LlamaIndex將接收提示,在索引中搜索相關(guān)塊,并將提示和相關(guān)塊傳遞給GPT。
一些高級(jí)用法的說(shuō)明
上面的步驟只是展示了使用LlamaIndex和GPT回答問(wèn)題的一個(gè)非常簡(jiǎn)單的入門用法。但可以做得比這更多。事實(shí)上,可以配置LlamaIndex來(lái)使用不同的大型語(yǔ)言模型(LLM),為不同的任務(wù)使用不同類型的索引,用一個(gè)新的索引來(lái)更新現(xiàn)有的索引,等等。如果有興趣,可以在https://gpt-index.readthedocs.io/en/latest/index.html,閱讀他們的文檔。
總結(jié)
本文中展示了如何結(jié)合使用GPT和LlamaIndex來(lái)構(gòu)建一個(gè)文檔問(wèn)答聊天機(jī)器人。雖然GPT(和其他LLM)本身就很強(qiáng)大,但如果把它與其他工具、數(shù)據(jù)或流程結(jié)合起來(lái),它的力量也會(huì)被大大增強(qiáng)。















 
 
 









 
 
 
 