TiDB Bot:用 Generative AI 構建企業專屬的用戶助手機器人

本文介紹了 PingCAP 是如何用 Generative AI 構建一個使用企業專屬知識庫的用戶助手機器人。除了使用業界常用的基于知識庫的回答方法外,還嘗試使用模型在 few shot 方法下判斷毒性。 最終,該機器人在用戶使用后,點踩的比例低于 5%,已經應用到了 TiDB 面向全球客戶的各種渠道中。

Generative Al 的魔力已經展現

從 22 年開始,Generative AI (后文稱 GenAI)在全球席卷了浪潮。 自 MidJourney (?https://www.midjourney.com/?), DALL-E (?https://openai.com/dall-e-2?) 帶來了文字生成圖片的火熱,再到 ChatGPT (?https://openai.com/chatgpt?) 以自然、流利的對話徹底引爆人們的視線,GenAI 成為再也無法繞過的話題。 AI 是否能夠在更通用的場景下支持人類更好的生活、工作,成為了 23 年的核心話題之一。

其中,LangChain (?https://www.langchain.com/?) 等開發工具的崛起,代表著工程師開始批量的創建基于 GenAI 的應用。PingCAP 也做了一些實驗,并且陸續完成了一些工作,比如:

● Ossingisht 的 Data Explorer (?https://ossinsight.io/explore/?):一個用自然語言生成 SQL 來探索 Github 開源軟件的項目

● TiDB Cloud 的 Chat2Query (?https://docs.pingcap.com/tidbcloud/explore-data-with-chat2query?):一個利用 Cloud 內數據庫通過自然語言生成 SQL 的項目在構建了這些應用后,筆者開始思考是否可以用 GenAI 的能力構建更通用的應用,帶給用戶更大的價值。

需求思考

在全球 TiDB 和 TiDB Cloud 逐步成長下,面向全球用戶的支持成為越來越重要的事情。 而隨著用戶量的幾何增長,面向用戶的支持人員數量并不會快速增長,因此,如何承接海量用戶就成為急需考慮的事情。

根據實際支持用戶的體驗,對用戶在全球社區的提問以及內部工單系統的調研,用戶有 50% 以上的問題其實是可以在官方文檔中找到答案,只是因為文檔內容太多,難以找到。因此,如果可以提供一個具有 TiDB 所有官方文檔的知識的機器人,也許可以幫助用戶更好的使用 TiDB。

Generative Al 與需求實現的差距

發掘出需求后,也需要了解 GenAI 的特性和限制,以確認是否 Gen AI 能夠用在此需求中。 根據已經完成的工作,筆者可以總結出一些 Gen AI 的特性。 在這里,Gen AI 主要指 GPT (Generative Pre-trained Transformer )類模型,以文本對話為主,本文后續都以 GPT 來描述。

1?GPT?的能力

●?理解語義的能力?。GPT 具有極強的語義理解能力,基本上可以無障礙理解任何文本。無論是何種語言(人類語言或計算機語言),何種表達水平的文本,就算是多語言混雜,或者是語法、用詞錯誤,都可以理解用戶的提問。

●?邏輯推理的能力?。GPT 具體一定的邏輯推理能力,在不額外增加任何特殊提示詞情況下,GPT 可以做出簡單的推理,并且挖掘出問題深層的內容。在補充了一定的提示詞下,GPT 可以做出更強的推理能力,這些提示詞的方法包括:Few-shot,Chain-of-Thought(COT),Self-Consistency,Tree of thought(TOT) 等等。

●?嘗試回答所有問題的能力?。GPT,特別是 Chat 類型的 GPT,如 GPT 3.5,GPT 4,一定會嘗試用對話形式,在滿足設定價值觀的情況下,回答用戶的所有問題,就算是回答“我不能回答這個信息”。

●?通用知識的能力?。GPT 自身擁有海量的通用知識,這些通用知識有較高的準確度,并且覆蓋范圍很大。

●?多輪對話的能力?。GPT 可以根據設定好的角色,理解不同角色之間的多次對話的含義,這意味著可以在對話中采用追問形式,而不是每一次對話都要把歷史所有的關鍵信息都重復一遍。這種行為非常符合人類的思考和對話邏輯。

2?GPT?的限制

●?被動觸發?。GPT 必須是用戶給出一段內容,才會回復內容。這意味著 GPT 本身不會主動發起交互。

●?知識過期?。這里特指 GPT 3.5 和 GPT 4,二者的訓練數據都截止于 2021 年 9 月,意味著之后的知識,GPT 是不知道的。不能期待 GPT 本身給你提供一個新的知識。

●?細分領域的幻覺?。雖然 GPT 在通用知識部分有優秀的能力,但是在一個特定的知識領域,比如筆者所在的數據庫行業,GPT 的大部分回答都存在著或多或少的錯誤,無法直接采信。

●?對話長度?。GPT 每輪對話有著字符長度的限制,因而如果提供給 GPT 超過字符長度的內容,此次對話會失敗。

3?需求實現的差距

筆者期望用 GPT 實現一個“企業專屬的用戶助手機器人”,這意味著以下需求:

● 需求一:多輪對話形式,理解用戶的提問,并且給出回答。

● 需求二:回答的內容中關于 TiDB 和 TiDB Cloud 的內容需要正確無誤。

● 需求三:不能回答和 TiDB、TiDB Cloud 無關的內容。

對這些需求進行分析:

● 需求一:基本上可以滿足,根據 GPT 的“理解語義的能力”、“邏輯推理的能力”、“嘗試回答問題的能力”、“上下文理解的能力”。

● 需求二:無法滿足。因為 GPT 的“知識過期”、“細分領域的幻覺”限制。

● 需求三:無法滿足。因為 GPT 的 “嘗試回答所有問題的能力”,任何問題都會回答,并且 GPT 本身并不會限制回答非 TiDB 的問題。

因此,在這個助手機器人構建中,主要就是在解決需求二和需求三的問題。

正確回答細分領域知識

這里要解決需求二的問題。

如何讓 GPT 根據特定領域知識回答用戶的問題并不是新鮮的領域,筆者之前的優化的 Ossinsight - Data Explorer 就使用特定領域知識,幫助自然語言生成 SQL 的可執行率(即生成的 SQL 可以成功的在 TiDB 中運行出結果)提升了 25% 以上 。

這里需要運用到的是向量數據庫的空間相似度搜索能力。一般分為三個步驟:

1?領域知識存儲到向量數據庫中

第一步是將 TiDB (?https://docs.pingcap.com/tidb/stable?) 和 TiDB Cloud (?https://docs.pingcap.com/tidbcloud?) 的官方文檔放入到向量數據庫中。

獲取到文檔后,將文字內容其放入 Embedding 模型中,產出文字內容對應的向量,并將這些向量放入到特定的向量數據庫中。

在這一步中,需要檢查兩點:

● 如果文檔的質量較差,或者文檔的格式不滿足預期,會事先對文檔進行一輪預處理,將文檔轉化為相對干凈,容易被 LLM 理解的文本格式。

● 如果文檔較長,超過 GPT 單次的對話長度,就必須對文檔進行裁剪,以滿足長度需要。裁剪方法有很多種,比如,按特定字符(如,逗號,句號,分號)裁剪,按文本長度裁剪,等等。

2?從向量數據庫中搜索相關內容

第二步是在用戶提出問題的時候,從向量數據庫中,根據用戶問題搜索相關的文本內容。

當用戶發起一次對話時,系統會將用戶的對話也通過 Embedding 模型轉化成向量,再將這個向量放到向量數據庫中和原有的預料進行查詢。查詢過程中,利用相似度算法(比如,cosine similarity,dot-product,等等),計算最相似的領域知識向量,并且提取出對應向量的文本內容。

用戶的特定問題可能需要多篇文檔才能回答,所以在搜索過程中,會取相似度最高的 Top N(目前 N 是 5)。這些 Top N 可以滿足跨越多個文檔的需要,并且都會成為下一步提供給 GPT 的內容。

3?相關內容和用戶提問一起提供給?GPT

第三步是組裝所有的相關信息,將其提供給 GPT。

將任務目標和相關的領域知識包含在系統提示詞中,并且根據歷史對話組裝好聊天歷史。將所有內容一起提供給 GPT,就可以得到基于這部分領域知識的特定回答。

在完成以上步驟,我們就基本上可以滿足需求二,可以根據特定的領域知識回答問題,回答正確性相比直接提問 GPT 有極大提升。

限定回答領域

這里要解決需求三的問題。

該機器人是作為企業支持能力提供給用戶,因此期望機器人只回答和企業相關的內容,比如,TiDB、TiDB Cloud 本身,SQL 問題,應用構建問題,等等。如果超過這些范圍,就期望機器人拒絕回答,比如,天氣、城市、藝術,等等。

因為之前提到 GPT 的“嘗試回答所有問題的能力”,對于 GPT 本身的設定,任何問題都應該要做出符合人類價值觀的回復。所以,這一層限制無法依賴 GPT 幫我們構建,只能在應用側嘗試做限制。

只有做到了這個需求,一個業務才可能真正的上線對用戶服務。遺憾的是目前工業界沒有對此比較好的實現,大部分的應用設計中并不涉及這一部分內容。

1?概念:毒性

剛剛提到,GPT 其實會嘗試讓回答符合人類的價值觀,這步工作在模型訓練中叫做“對齊”(Align),讓 GPT 拒絕回答仇恨、暴力相關的問題。如果 GPT 未按照設定回答了仇恨、暴力相關問題,就稱之為檢測出了毒性(Toxicity)。

因此,對于筆者即將創造的機器人,其毒性的范圍實際上增加了,即,所有回答了非公司業務的內容都可以稱之為存在毒性。在此定義下,我們就可以參考前人在去毒(Detoxifying)方面的工作。DeepMind 的 Johannes Welbl (?https://aclanthology.org/2021.findings-emnlp.210.pdf?) (2021)等人介紹了可以采用語言模型來做為毒性檢測的方式,目前,GPT 的能力得到了足夠的加強,用 GPT 來直接判斷用戶的提問是否屬于公司業務范圍,成為了可能。

要做到“限定回答領域”,需要有兩個步驟。

2?限定領域的判斷

第一步,需要對用戶的原始提問進行判斷。

這里需要使用 few shot 的方法去構建毒性檢測的提示詞,讓 GPT 在擁有多個示例的情況下,判斷用戶的提問是否符合企業服務的范圍。

比如一些示例:

<< EXAMPLES >>
?
instruction: who is Lady Gaga?
question: is the instruction out of scope (not related with TiDB)?
answer: YES
?
instruction: how to deploy a TiDB cluster?
question: is the instruction out of scope (not related with TiDB)?
answer: NO
?
instruction: how to use TiDB Cloud?
question: is the instruction out of scope (not related with TiDB)?
answer: NO

在判斷完成后,GPT 會輸入 Yes 或 No 的文字,供后續流程處理。注意,這里 Yes 意味著有毒(和業務不相關),No 意味著無毒(和業務有關)。

第二步,得到了是否有毒的結果后,我們將有毒和無毒的流程分支,進行異常流程和正常流程的處理。

正常流程就是上文中的 正確回答細分領域知識相關內容,此處主要說明異常內容的流程。

當系統發現產出的內容是 “Yes” 時,會引導流程進入毒性內容回復流程。此時,會將一個拒絕回答用戶問題的系統提示詞和用戶對應的問題提交給 GPT,最終用戶會得到一個拒絕回答的回復。

當完成這兩步后,需求三基本完成。

整體邏輯架構

至此,我們得到了一個基本可以提供給用戶的,具有特定企業領域知識的助手機器人。這機器人我們稱之為 TiDB Bot。

TiDB Bot 上線后效果

從 3 月 30 日起,TiDB Bot 就開始進行內部測試,直到 7 月 11 日正式對 Cloud 的用戶開放。

在 TiDB Bot 孵化的 103 天來,感謝無數的社區、開發者對測試產品提出的反饋,讓 TiDB Bot 逐步變得可用。在測試階段,一共 249 名用戶使用,發送了 4570 條信息。到測試階段完成為止,共有 83 名用戶給出了 266 條反饋,其中點踩的反饋占總信息數的 3.4%,點贊的反饋占總信息數的 2.1%。

除了直接使用的社區用戶,還有提出建議和思路的用戶,給出更多解決方案的社區用戶。感謝所有的社區和開發者,沒有你們,就沒有 TiDB Bot 產品發布。

后續

隨著用戶量逐漸增加,無論是召回內容的準確性、毒性判斷的成功,都依然有不小的挑戰,因此,筆者在實際提供服務中,對 TiDB Bot 的準確度進行優化,穩步提升回答效果。 這些內容將在后續的文章中介紹。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/43464.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/43464.shtml
英文地址,請注明出處:http://en.pswp.cn/news/43464.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

汽車租賃管理系統/汽車租賃網站的設計與實現

摘 要 租賃汽車走進社區&#xff0c;走進生活&#xff0c;成為當今生活中不可缺少的一部分。隨著汽車租賃業的發展&#xff0c;加強管理和規范管理司促進汽車租賃業健康發展的重要推動力。汽車租賃業為道路運輸車輛一種新的融資服務形式、廣大人民群眾一種新的出行消費方式和…

龍蜥社區安全聯盟(OASA)正式成立,啟明星辰、綠盟、360 等 23 家廠商重磅加入

7 月 28 日&#xff0c;由啟明星辰、綠盟、360、阿里云、統信軟件、浪潮信息、中興通訊&#xff5c;中興新支點、Intel、中科院軟件所等 23 家單位共同發起的龍蜥社區安全聯盟&#xff08;OASA&#xff0c;OpenAnolisSecurityAlliance&#xff09;&#xff08;以下簡稱“安全聯…

insightface安裝過程中提示 Microsoft Visual C++ 14.0 or greater is required.

pip install insightface安裝過程中提示 Microsoft Visual C 14.0 or greater is required.Get it with "Microsoft C Build Tools": https://visualstudio.microsoft.com/visual-cpp-build-tools/ 根據提示網站訪問官網下載生成工具 打開軟件后會自動更新環境&#…

集群、負載均衡集群、高可用集群簡介,LVS工作結構、工作模式、調度算法和haproxy/nginx模式拓撲介紹

一.集群的定義 1.定義 2.分類 &#xff08;1&#xff09;負載均衡集群&#xff08;LBC/LB&#xff09; &#xff08;2&#xff09;高可用集群&#xff08;HAC&#xff09; 二.使用集群的意義 1.高性價比和性能比 2.高可用性 3.可伸縮性強 4.持久和透明性高 三.常見的…

運維監控學習筆記9

2、畫出拓撲圖的小案例&#xff1a; 3、在連接的線上顯示網絡流量&#xff0c;使用了一個簡單的公式&#xff1a; {nginx-server:net.if.out[ens33].last(0)} 4、在screens中顯示nginx的狀態頁面&#xff1a; 5、zabbix報警&#xff1a; 發送郵件的選項。Email可以使用&#xf…

trees和woods使用有什么區別

“Trees” 和 “woods” 都指的是樹木&#xff0c;但它們在語境和用法上有一些區別&#xff1a; 數量和單個實體&#xff1a;“Trees” 是一個通用的名詞&#xff0c;用來指代多個樹木。它沒有限定數量&#xff0c;可以表示任意多的樹木。 “Woods” 則更常用于指一片有密集樹木…

【Nginx18】Nginx學習:WebDav文件存儲與圖片媒體處理模塊

Nginx學習&#xff1a;WebDav文件存儲與圖片媒體處理模塊 今天的內容怎么說呢&#xff1f;有兩個感覺非常有意思&#xff0c;另外一些就差點意思。有意思的是&#xff0c;咱們可以直接用 Nginx 的 Webdav 功能搭建一個網盤&#xff0c;另外也可以實現動態的圖片處理。這兩個功能…

安裝jenkins-cli

1、要在 Linux 操作系統上安裝 jcli curl -L https://github.com/jenkins-zh/jenkins-cli/releases/latest/download/jcli-linux-amd64.tar.gz|tar xzv sudo mv jcli /usr/local/bin/ 在用戶根目錄下&#xff0c;增加 jcli 的配置文件&#xff1a; jcli config gen -ifalse …

nginx 配置反向代理的邏輯原則案例(值得一看)

一 實操步驟 1.1 架構圖 1.2 配置原則 匹配準則&#xff1a; 當proxy_pass代理地址端口后有目錄(包括 / 和/xxx),相當于是絕對根路徑&#xff0c;則 nginx 不會把 location 中匹配的路徑部分代理走; 當proxy_pass代理地址端口后無任何內容&#xff0c;可以理解為相對路徑…

【Linux命令詳解 | gzip命令】 gzip命令用于壓縮文件,可以顯著減小文件大小

文章標題 簡介一&#xff0c;參數列表二&#xff0c;使用介紹1. 基本壓縮和解壓2. 壓縮目錄3. 查看壓縮文件內容4. 測試壓縮文件的完整性5. 強制壓縮6. 壓縮級別7. 與其他命令結合使用8. 壓縮多個文件9. 自動刪除原文件 總結 簡介 在Linux中&#xff0c;gzip命令是一款強大的文…

sklearn-決策樹

目錄 決策樹算法關鍵 特征維度&判別條件 決策樹算法:選擇決策條件 純度的概念

mac 關于獲取手機信息 終端指令

iOS真機命令&#xff08;自動化測試&#xff09; 獲取設備的的UDID idevice_id --list # 顯示當前所連接設備的 udid instruments -s devices # 列出所有設備&#xff0c;包括真機、模擬器、mac ideviceinfo 可以在返回的數據中找到 udid idevice_id -l 蘋果手機 safari打開網…

神經網絡基礎-神經網絡補充概念-62-池化層

概念 池化層&#xff08;Pooling Layer&#xff09;是深度學習神經網絡中常用的一種層級結構&#xff0c;用于減小輸入數據的空間尺寸&#xff0c;從而降低模型的計算復雜度&#xff0c;減少過擬合&#xff0c;并且在一定程度上提取輸入數據的重要特征。池化層通常緊跟在卷積層…

MyBatis XML映射處理CLOB和BLOB類型

Mybatis的MapperXML映射文件應該處理數據庫字段類型為CLOB和BLOB類型的數據呢&#xff1f;首先我們先看下CLOB和BLOB這兩種數據類型的介紹。 介紹 使用Mybatis時涉及到兩種特殊類型的處理&#xff0c;分別是Blob&#xff08;Binary Large Object&#xff09;和Clob&#xff0…

python+django+mysql項目實踐四(信息修改+用戶登陸)

python項目實踐 環境說明: Pycharm 開發環境 Django 前端 MySQL 數據庫 Navicat 數據庫管理 用戶信息修改 修改用戶信息需要顯示原內容,進行修改 通過url傳遞編號 urls views 修改內容需要用數據庫的更新,用update進行更新,用filter進行選擇 輸入參數多nid,傳遞要修…

Flutter實現Service + UI 全面跨平臺

作者&#xff1a;Karl_wei 前言&#xff1a; Flutter作為跨平臺的UI框架&#xff0c;其可行性已經被市場所認可。UI跨端后&#xff0c;我們自然會希望一些運行在終端的小服務也能跨端&#xff0c;特別是當這個小服務還涉及到一些 UI 的展示。 我們希望Flutter能承擔這個角色&…

去除UI切圖邊緣上多余的線條

最近接到UI切圖&#xff0c;放進項目&#xff0c;顯示邊緣有多余線條&#xff0c;影響UI美觀。開始以為切圖沒切好&#xff0c;實則不是。如圖&#xff1a; ->解決&#xff1a; 將該圖片資源WrapMode改為Clamp

2021年03月 C/C++(三級)真題解析#中國電子學會#全國青少年軟件編程等級考試

第1題&#xff1a;找和為K的兩個元素 在一個長度為n(n < 1000)的整數序列中&#xff0c;判斷是否存在某兩個元素之和為k。 時間限制&#xff1a;1000 內存限制&#xff1a;65536 輸入 第一行輸入序列的長度n和k&#xff0c;用空格分開。 第二行輸入序列中的n個整數&#xff…

Rancher-RKE-install 部署k8s集群

一、為什么用Rancher-RKE-install 1.CNCF認證的k8s安裝程序。 2.有中文文檔。 二、安裝步驟 1.下載Rancher-Rke的二進制包-下面是項目的地址 GitHub - rancher/rke: Rancher Kubernetes Engine (RKE), an extremely simple, lightning fast Kubernetes distrib…

探索樹算法:C語言實現二叉樹與平衡樹

探索樹算法&#xff1a;C語言實現二叉樹與平衡樹 樹是計算機科學中一個重要且廣泛應用的數據結構&#xff0c;它在許多領域都有著重要作用。本篇博客將深入介紹兩種常見的樹算法&#xff1a;二叉樹遍歷和平衡二叉樹&#xff08;AVL樹&#xff09;&#xff0c;并提供在C語言中的…