前言
過(guò)去,很多在線(xiàn)智能客服經(jīng)常被人吐槽為人工智障,隨著ChatGPT等生成式大語(yǔ)言模型的興起,我們有更簡(jiǎn)單的方案來(lái)實(shí)現(xiàn)一個(gè)更智能的在線(xiàn)客服。ChatGPT的通識(shí)問(wèn)答能力很強(qiáng),但落地到企業(yè)領(lǐng)域知識(shí)的時(shí)候,就容易胡說(shuō)八道。
本文將為你詳細(xì)介紹如何利用YCloud和OpenAI的相關(guān)接口能力,開(kāi)發(fā)一個(gè)懂你業(yè)務(wù)的WhatsApp智能客服。(以YCloud為例)
YCloud是一家提供全球云通信的CPaaS服務(wù)公司,主要提供全球短信、郵件、語(yǔ)音驗(yàn)證碼和WhatsApps等商業(yè)消息服務(wù),并基于這些基礎(chǔ)通信能力開(kāi)發(fā)了Verify驗(yàn)證服務(wù)、Campaign多渠道消息營(yíng)銷(xiāo)服務(wù)、Contact CDP服務(wù)、Inbox WhatsApp客服坐席服務(wù)、Growth Tools營(yíng)銷(xiāo)增長(zhǎng)工具等。2022年,YCloud和Meta官方達(dá)成合作,成為WhatsApp Business Platform在大中華區(qū)的首批解決方案提供商(WhatsApp BSP)。通過(guò)YCloud在線(xiàn)平臺(tái)可以創(chuàng)建WhatsApp Business API賬戶(hù),并獲取WhatsApp Business API能力。YCloud通過(guò)整合WhatsApp Business API的能力,開(kāi)發(fā)出了客服坐席Inbox平臺(tái),通過(guò)Inbox可以輕松對(duì)接WhatsApp商業(yè)賬號(hào)和客服坐席,讓一個(gè)賬號(hào)可以服務(wù)成千上萬(wàn)的終端用戶(hù)。
ChatGPT是OpenAI訓(xùn)練的大語(yǔ)言模型智能機(jī)器人,擁有較大的模型參數(shù)和語(yǔ)言預(yù)測(cè)能力。OpenAI也開(kāi)放了和ChatGPT(3.5)底層能力一致的gpt-3.5-turbo 和 gpt-4模型能力接口,可以方便企業(yè)通過(guò)API調(diào)用的方式獲取智能回復(fù)。
方案
了解下GPT的接口能力
首先,回歸題目,我們要利用ChatGPT(或OpenAI的gpt接口)做一個(gè)智能客服,但你會(huì)發(fā)現(xiàn)ChatGPT可能根本不了解你公司的業(yè)務(wù)場(chǎng)景,你問(wèn)它問(wèn)題它有時(shí)候懂一點(diǎn),有時(shí)候不懂,更可怕的是經(jīng)常對(duì)不懂的東西胡說(shuō)八道。那么我們有什么辦法做一個(gè)不會(huì)胡說(shuō)八道的智能客服呢?
先說(shuō)說(shuō)ChatGPT為什么容易胡說(shuō)八道?因?yàn)樗且粋€(gè)預(yù)訓(xùn)練的生成式大模型,原理是通過(guò)學(xué)習(xí)大量的知識(shí)(數(shù)據(jù)),以概率最大化的方式輸出文本。知識(shí)(數(shù)據(jù))雖然來(lái)自互聯(lián)網(wǎng)公開(kāi)數(shù)據(jù)和一些合作廠(chǎng)商,但它的知識(shí)(數(shù)據(jù))是來(lái)自2021年9月份之前的,而且因?yàn)閷W(xué)習(xí)的數(shù)據(jù)量巨大,當(dāng)你的公司業(yè)務(wù)在互聯(lián)網(wǎng)的曝光度還沒(méi)那么高的時(shí)候,在它學(xué)習(xí)的權(quán)重里也會(huì)降低,導(dǎo)致了你問(wèn)它跟你業(yè)務(wù)相關(guān)的問(wèn)題,它也不是完全不知道,所以根據(jù)預(yù)測(cè)概率的方式,給你吐了一些胡說(shuō)八道的回答。
因?yàn)闆](méi)有其他相關(guān)知識(shí),這個(gè)在機(jī)器學(xué)習(xí)領(lǐng)域叫Zero-Shot(零樣本分類(lèi)或零樣本學(xué)習(xí)),一般對(duì)于通識(shí)類(lèi)的問(wèn)答會(huì)好一些。一些推理類(lèi)的,在零樣本學(xué)習(xí)的情況下,也會(huì)比較差,所以一般推理類(lèi)可以通過(guò)提示語(yǔ)讓它分步分析(step by step),中間產(chǎn)生的過(guò)程信息,反過(guò)來(lái)可以反哺它的推理,最終能提高推導(dǎo)質(zhì)量。
所以在智能客服這個(gè)場(chǎng)景,我們應(yīng)該使用它更擅長(zhǎng)的Few-Shot能力,即小樣本分類(lèi)(或小樣本學(xué)習(xí))。我們?cè)趩?wèn)它問(wèn)題的時(shí)候,提前把一些相關(guān)的知識(shí)點(diǎn)告訴它,它就能從你的知識(shí)點(diǎn)里,總結(jié)和學(xué)習(xí)到信息,最后輸出一個(gè)比較靠譜的問(wèn)答結(jié)果
例如:在zero-shot的情況下,問(wèn)它
YCloud有什么服務(wù)

很明顯,它的知識(shí)里面,對(duì)YCloud是不了解的,但它通過(guò)Cloud這個(gè)關(guān)鍵字,推斷YCloud可能是跟其他云廠(chǎng)商一樣的。
然后我就給它一點(diǎn)樣本參考:
YCloud是一家提供CPaaS服務(wù)的公司,他有哪些服務(wù)?
它回答

也很明顯,它掌握的知識(shí)里包含CPaaS這個(gè)術(shù)語(yǔ),而且知道CPaaS是干啥的,所以通過(guò)CPaaS猜測(cè)了YCloud大約有這些服務(wù),雖然準(zhǔn)確了一些,但依然不夠格作為YCloud的客服代表,因?yàn)槲覀兘o它的知識(shí)點(diǎn)信息量太小了。
解決方案
所以解決它胡說(shuō)八道的方案就呼之欲出了——提前告訴它YCloud的業(yè)務(wù)知識(shí)點(diǎn),再讓它體用強(qiáng)大的Few-Shot能力,根據(jù)我們提供的知識(shí)點(diǎn)回答問(wèn)題
prompt:
你是一個(gè)YCloud智能客服,請(qǐng)根據(jù)下面的知識(shí)點(diǎn)回答問(wèn)題。
知識(shí)點(diǎn):"""
<一些業(yè)務(wù)知識(shí)>
"""
問(wèn)題:<知識(shí)點(diǎn)相關(guān)問(wèn)題>
那么這時(shí)又有新問(wèn)題來(lái)了,很多公司的業(yè)務(wù)知識(shí)點(diǎn)不少,很容易就觸及了gpt的接口限制(例如gpt-3.5-turbo模型,每次請(qǐng)求的max_tokens 是4096,大約就是3000多個(gè)單詞,而且這個(gè)max_tokens 是包含請(qǐng)求的內(nèi)容的token數(shù)和輸出的內(nèi)容的token數(shù)。gpt4有8k和32k的token數(shù),但他的單價(jià)比gpt-3.5貴幾十倍)。每次問(wèn)它前,都把公司所有的業(yè)務(wù)知識(shí)告訴它(比如YCloud的產(chǎn)品介紹文檔:https://docs.ycloud.com/docs,足足有幾萬(wàn)字,幸好是寫(xiě)得足夠細(xì)粒度),顯然不太可行,那有其他方案嗎?

YCloud產(chǎn)品介紹文檔
通過(guò)語(yǔ)義查找相關(guān)內(nèi)容
傳統(tǒng)使用分詞+關(guān)鍵字+Query重寫(xiě)實(shí)現(xiàn)模糊搜索的方案,雖然也能匹配到一些相關(guān)的內(nèi)容,但遠(yuǎn)不如通過(guò)語(yǔ)義匹配的方式,找到跟用戶(hù)語(yǔ)義更相關(guān)的內(nèi)容。OpenAI提供相關(guān)的能力,叫 embeddings。embeddings的接口功能上就是輸入一串文本,返回一個(gè)長(zhǎng)度為1538的向量(vector,類(lèi)似數(shù)組,但有維度屬性,每個(gè)元素不能和其他元素更換位置)。這個(gè)向量就是代表了輸入的文本通過(guò)GPT的模型抽取出來(lái)的語(yǔ)義特征。這個(gè)特征有1538個(gè)維度,如果有兩個(gè)特征相近的文本,基本可以斷定它們之間關(guān)聯(lián)性是比較強(qiáng)的。
那么有什么東西可以判斷兩個(gè)或者多個(gè)文本的特征相似度呢?簡(jiǎn)單地,可以通過(guò)求余弦相似度(cosine similarity)的方式,對(duì)比兩組向量的余弦相似度值(最大為1,最小0),值越大代表兩個(gè)向量越接近(類(lèi)似于三角函數(shù)里用cosθ衡量?jī)蓷l線(xiàn)的夾角一樣)。當(dāng)然也有成熟的向量數(shù)據(jù)庫(kù)產(chǎn)品、中間件,適用于對(duì)比數(shù)據(jù)規(guī)模較大的向量之間的特征。有了這個(gè)接口能力之后,我們只需要把產(chǎn)品文檔進(jìn)行拆分到小顆粒度,盡量讓每個(gè)產(chǎn)品的介紹文字tokens數(shù)不超過(guò)3000個(gè)token,另外預(yù)留1000左右個(gè)token給客戶(hù)輸入和AI進(jìn)行輸出(注意這是為openai的gpt3.5模型適配的,如果其他的LLM可以提供更多的token能力,可以適當(dāng)放寬限制)。然后把這些產(chǎn)品介紹變成一個(gè)個(gè)的知識(shí)點(diǎn),形成知識(shí)向量庫(kù)。用戶(hù)輸入查詢(xún)內(nèi)容之后,我們先通過(guò)embeddings把用戶(hù)輸入的內(nèi)容抽取特征,再跟知識(shí)庫(kù)向量庫(kù)進(jìn)行對(duì)比排序,找出語(yǔ)義最接近的產(chǎn)品介紹,作為Few-Shot 的知識(shí)點(diǎn),傳遞給GPT,GPT根據(jù)這些知識(shí)點(diǎn)回答用戶(hù)的問(wèn)題基本就靠譜了。在向量比對(duì)的過(guò)程中,可以根據(jù)自己公司的業(yè)務(wù)情況,調(diào)整向量相似度的閾值,如果最接近的知識(shí)庫(kù)仍然低于這個(gè)閾值(比如0.7、0.8,根據(jù)業(yè)務(wù)實(shí)際調(diào)整),此時(shí)可以留一個(gè)勾子(hook),告訴用戶(hù)該問(wèn)題無(wú)法回答(或者把回答轉(zhuǎn)交給真人客服),從而不會(huì)胡說(shuō)八道。
方案小結(jié)
以上就是做一個(gè)不會(huì)亂說(shuō)話(huà),且懂你業(yè)務(wù)的智能客服的總體方案,我們總結(jié)一下:
1.整理知識(shí)庫(kù),將每個(gè)知識(shí)塊大小控制在OpenAI接口的限制范圍內(nèi)(不排除其他LLM可以更大的token),然后形成知識(shí)向量庫(kù)
2.對(duì)用戶(hù)的輸入進(jìn)行向量化特征抽取,之后對(duì)比查找最接近的知識(shí)向量庫(kù)
3.將匹配到的知識(shí)和問(wèn)題,組裝成提示語(yǔ)(prompt),使用OpenAI的chat/completions接口進(jìn)行智能問(wèn)答

其他方案?
另一個(gè)讓OpenAI懂你的業(yè)務(wù)的方案,是用微調(diào)(fine-tune),但我目前不推薦。
因?yàn)镺penAI訓(xùn)練出的1750億參數(shù)的大模型,是因?yàn)樗喿x了大幾千億的token,才沉淀出來(lái)的模型(知識(shí)),相當(dāng)于在一個(gè)大規(guī)模的參數(shù)模型上,通過(guò)微調(diào)的方式讓它改動(dòng)一些參數(shù)以適應(yīng)你的業(yè)務(wù)形態(tài)。那么可以想見(jiàn),你需要微調(diào)的token數(shù)應(yīng)該不少,因?yàn)樗瓉?lái)被洗腦了很多其他知識(shí),需要再反復(fù)給它洗腦洗成懂你的業(yè)務(wù)知識(shí)。
此外目前OpenAI開(kāi)放支持的微調(diào)模型,只有早期的ada、babbage、curie、davinci,這些模型的能力遠(yuǎn)遠(yuǎn)弱于gpt 3.5和gpt4,相當(dāng)于你在一個(gè)弱很多的模型上做微調(diào),除了成本高,效果還比較差。
所以目前階段我是不建議用微調(diào)的,也許未來(lái)OpenAI開(kāi)放了3.5甚至4的微調(diào)能力之后,可以再試試看。其他的LLM也有支持微調(diào)的,在成本可控,質(zhì)量性能好的情況下,微調(diào)是一個(gè)不錯(cuò)的方案,而且是一個(gè)終極方案——每個(gè)企業(yè)可以擁有自己的業(yè)務(wù)大模型(成本可以接受的話(huà))。
用YCloud打通WhatsApp
接下來(lái),我們把這個(gè)客服,通過(guò)YCloud打通WhatsApp Business API,就變成一個(gè)可以對(duì)客戶(hù)提供問(wèn)答功能的WhatsApp智能客服了??偣簿瓦@么幾步:
1. 首先注冊(cè)YCloud賬戶(hù);
2. 創(chuàng)建WhatsApp賬戶(hù),連接到WhatsApp的手機(jī)號(hào)碼(需要一些企業(yè)認(rèn)證過(guò)程以及號(hào)碼的驗(yàn)證過(guò)程);
3. 進(jìn)入YCloud Inbox平臺(tái),創(chuàng)建一個(gè)WhatsApp 收件箱,該收件箱連接第2步創(chuàng)建的WhatsApp賬戶(hù);
4. 創(chuàng)建AgentBot機(jī)器人(請(qǐng)聯(lián)系YCloud商務(wù),可以?xún)?yōu)先開(kāi)通功能)和實(shí)現(xiàn)上面應(yīng)答的業(yè)務(wù)邏輯;
5. 反復(fù)更新調(diào)整知識(shí)庫(kù),讓AI回答更精準(zhǔn)。
最后看一下效果



可以看出,基本是參考相關(guān)的知識(shí)點(diǎn)來(lái)回答的,非??孔V。這里有一個(gè)有意思的點(diǎn),當(dāng)用戶(hù)用英文提問(wèn)時(shí),AI用英文回答,當(dāng)用戶(hù)用中文提問(wèn)時(shí),AI用中文回答。這對(duì)ChatGPT來(lái)說(shuō)并不難,但我的知識(shí)庫(kù)內(nèi)容其實(shí)是全英文的,并沒(méi)有中文在里面,難道OpenAI的embeddings能力這么強(qiáng),可以全語(yǔ)言匹配嗎?并不是,是因?yàn)槲以趯?shí)現(xiàn)這個(gè)bot的實(shí)際上做了一些Trick:
1. 歸一化
所謂歸一化就是把所有輸入都轉(zhuǎn)化為相同的衡量尺度,再進(jìn)行對(duì)比。比如,在國(guó)內(nèi)短信審核的時(shí)候,有些短信內(nèi)容是這樣的:"親愛(ài)的+5扣扣幺幺⑤巴巴①三你好。。。",對(duì)于這種文案,我們?nèi)祟?lèi)的大腦會(huì)自動(dòng)將其歸一化為"親愛(ài)的加我QQ1158813你好。。。",并果斷將其駁回。而具體到我們智能客服這個(gè)例子,由于我們的知識(shí)庫(kù)都是英文,所以我們需要把用戶(hù)的輸入也統(tǒng)一翻譯成英文(沒(méi)錯(cuò),翻譯也可以用gpt來(lái)做,不同的只是提示語(yǔ)),再用embeddings進(jìn)行向量對(duì)比。拿到知識(shí)庫(kù)之后,用戶(hù)輸入的問(wèn)題原封不動(dòng)傳給gpt,它就會(huì)按照用戶(hù)提問(wèn)的語(yǔ)言來(lái)進(jìn)行回答。
2. 模板化輸出
如果想讓AI輸出的內(nèi)容顯得更專(zhuān)業(yè)(更有溫度)一些,可以把專(zhuān)業(yè)(有溫度)的文案模板作為提示語(yǔ)的一部分告訴它,讓它按模板輸出。
prompt:
你是一個(gè)YCloud智能客服,請(qǐng)根據(jù)下面的知識(shí)點(diǎn)回答問(wèn)題:
知識(shí)點(diǎn):"""
<一些業(yè)務(wù)知識(shí)>
"""
問(wèn)題:<知識(shí)點(diǎn)相關(guān)問(wèn)題>
回答模板:"""
親愛(ài)的,你好
{{你的回答}}
希望我的回復(fù)可以幫到您,祝您一切順利~
"""
<內(nèi)容> 為需要提前準(zhǔn)備的內(nèi)容
{{你的回答}}?為prompt的一種模板寫(xiě)法,讓AI能關(guān)注到他的內(nèi)容應(yīng)該怎么放置。
3. 溫度調(diào)節(jié)
Chat Completions接口中有一個(gè)temperature參數(shù)是用來(lái)控制模型輸出的內(nèi)容的個(gè)性化程度的。取值是0-1(注意有些接口是0-1,有些是0-2,但作用是類(lèi)似的),越小代表輸出的內(nèi)容越精準(zhǔn),越大代表內(nèi)容越個(gè)性(花里胡哨)。具體到智能客服這個(gè)場(chǎng)景,我希望它不要油嘴滑舌,所以我設(shè)置為0,更精確的回答(注意依然無(wú)法100%精確)。
結(jié)語(yǔ)
好了,介紹了這么多,是不是發(fā)現(xiàn)實(shí)現(xiàn)一個(gè)智能客服挺容易的?
其實(shí)這些功能都在OpenAI官方的cookbook里有介紹,特別embeddings的能力,絕對(duì)是容易被只跟它在線(xiàn)聊天的人忽視的非常牛X的能力。像很多的基于文檔的問(wèn)答、語(yǔ)義化搜索,也都是基于這個(gè)方案來(lái)做的。
用YCloud實(shí)現(xiàn)WhatsApp客服有兩種路徑,一種是自己通過(guò)YCloud提供的WhatsApp Business Platform API + YCloud相應(yīng)的webhook推送,在webhook server里面實(shí)現(xiàn)問(wèn)答邏輯。另一種是通過(guò)YCloud已有的Inbox平臺(tái),創(chuàng)建Agentbot(需要聯(lián)系YCloud的商務(wù),提供你的應(yīng)用場(chǎng)景,由于目前火爆,需要排隊(duì)審核)來(lái)實(shí)現(xiàn)。通過(guò)Inbox實(shí)現(xiàn)的好處是,有一個(gè)專(zhuān)業(yè)的客服平臺(tái),真人客服可以上去直接看機(jī)器人和用戶(hù)聊天的情況,審查AI的回復(fù)術(shù)語(yǔ),對(duì)于回答不好(真無(wú)法100%保證不會(huì)說(shuō)錯(cuò))的地方,及時(shí)進(jìn)行調(diào)整,問(wèn)答邏輯上遇到不懂的問(wèn)題(比如匹配不到關(guān)聯(lián)性較強(qiáng)的知識(shí)庫(kù))也可以切換成人工接管回復(fù),這樣可以給終端用戶(hù)更好的用戶(hù)體驗(yàn)。

用YCloud Inbox對(duì)接客服坐席
智能客服不僅限于做搜索,其實(shí)售前的跟單話(huà)術(shù),只要提煉出知識(shí)點(diǎn),也可以用智能客服來(lái)做的。甚至可以借鑒上面的實(shí)現(xiàn)邏輯,做一個(gè)在線(xiàn)的商品推薦機(jī)器人(因?yàn)樯唐沸畔⒋蠖鄶?shù)情況下是公開(kāi)可見(jiàn)的)。
風(fēng)險(xiǎn)提示
最后做一下風(fēng)險(xiǎn)提示:由于OpenAI是一家私人公司,我上面?zhèn)鬟f的數(shù)據(jù)都是公開(kāi)網(wǎng)頁(yè)上的知識(shí)點(diǎn),不涉及到任何用戶(hù)、公司、國(guó)家的敏感數(shù)據(jù),所以可以放心調(diào)用。大家在實(shí)現(xiàn)類(lèi)似的業(yè)務(wù)時(shí),也請(qǐng)考慮自身的數(shù)據(jù)是否敏感,特別是涉及到個(gè)人、公司、國(guó)家的敏感信息,一定要做好管控,遵守業(yè)務(wù)所在國(guó)家的法律法規(guī),防止造成不必要的損失或者法律風(fēng)險(xiǎn)。
后話(huà)
在實(shí)現(xiàn)上述的WhatsApp智能客服過(guò)程中,我全程都是跟GPT4結(jié)對(duì)編程的,主要的代碼實(shí)現(xiàn)邏輯都是GPT4寫(xiě)的,我更多是提出問(wèn)題和一些不合理的點(diǎn)(比如一些不熟悉的web接口定義,提bug等),讓GPT4持續(xù)改進(jìn)代碼。這里開(kāi)個(gè)坑,后面再補(bǔ)一篇如何與GPT4進(jìn)行結(jié)對(duì)編程,敬請(qǐng)期待~~
參考資料:
1.?OpenAI官方cookbook:?https://github.com/openai/openai-cookbook
2.?YCloud官網(wǎng): https://www.ycloud.com/ 或 點(diǎn)擊閱讀原文
3. 如何提高zero-shot時(shí)的推理能力:Let's think step by step:https://arxiv.org/abs/2205.11916
4. 一些支持向量搜索的數(shù)據(jù)庫(kù):redis、pinecone、milvus、zilliz等等
注:本文授權(quán)轉(zhuǎn)載于公眾號(hào):AI探戈。