使用谷歌Gemini系列l(wèi)lm 構(gòu)建一個人工智能助手
本項目最適合GenAI初學(xué)者和Python初學(xué)者-中級
這個項目包括哪些內(nèi)容?在谷歌Cloud Kaggle 5天密集GenAI課程中討論的幾個關(guān)鍵GenAI概念:嵌入,檢索增強生成(RAG),矢量數(shù)據(jù)庫,少量提示,提示緩存等。
項目的目標
我之前開發(fā)的一個(假的)植物商店的人工智能助手,名為“種植!”
設(shè)置
該項目使用谷歌Gemini系列l(wèi)lm,因此您需要通過AI Studio生成API密鑰。您可以在文檔中找到詳細的說明。
1:智能FAQ (RAG)
項目的這一部分涉及使用檢索增強生成(RAG)向LLM提供額外的上下文(內(nèi)部策略文檔),以幫助準確地回答客戶的查詢。
1.1數(shù)據(jù)(生成一些虛擬數(shù)據(jù))
我的項目數(shù)據(jù)包括:
工廠政策
常見問題示例;這讓我們可以從FAQ提示緩存開始
1.2創(chuàng)建矢量數(shù)據(jù)庫
啟動一個矢量數(shù)據(jù)庫(例如ChromaDB)并分配你的嵌入函數(shù);這基本上是管理和調(diào)用嵌入模型(例如,從谷歌Gemini),當(dāng)你添加/查詢數(shù)據(jù)庫。
1.3在RAG bot中使用vectorDB
下圖解釋了這個項目中使用的RAG和提示緩存過程;在適當(dāng)?shù)牡胤街赜妙愃撇樵兊拇鸢浮?
1.4圖解釋道:
首先,用戶詢問他們的查詢,例如:“我可以退款嗎?”
然后,該模型檢查之前是否問過語義相似的問題
這是通過將查詢轉(zhuǎn)換為嵌入來完成的,該嵌入在向量數(shù)據(jù)庫中搜索類似查詢(使用它們之間的距離測量)。
這決定了接下來觸發(fā)哪條路由(或桶)!
桶A:發(fā)現(xiàn)非常相似的查詢,相似度得分<= 0.75,因此返回答案,無需通過所需的LLM進行任何處理。
桶B:有些類似的查詢/查詢發(fā)現(xiàn);相似度評分> 0.75 ~ <=0.9;因此,返回前X個類似的問題,并從更大的文檔池(前K個相關(guān)文檔)中檢索數(shù)據(jù)- LLM在答案生成中使用這些(少量)
桶C:沒有找到相似的查詢(>0.9相似度得分),然后從更大的文檔池(前K個相關(guān)文檔)檢索數(shù)據(jù)
任何新生成的答案都被添加到提示緩存中
應(yīng)用安全防護和格式化(例如刪除錯別字)來避免向提示緩存添加不相關(guān)或?qū)懙貌缓玫牟樵?
如果在文檔中沒有找到相關(guān)信息,告訴用戶我們目前無法回答他們的查詢
提示緩存“命中”計數(shù)更新時,桶A或B答案的位置;這使得FAQ問題可以根據(jù)提示緩存中的“點擊”次數(shù)進行排序;在聊天機器人界面中,前4名以建議的形式顯示。
1.5壓力梯度界面
最后,使用Gradio創(chuàng)建一個不錯的聊天機器人界面
這提供了一種與工具交互的簡單機制!
2:數(shù)據(jù)庫智能查詢
該工具包括在本地數(shù)據(jù)庫上調(diào)用函數(shù);以獲取有關(guān)植物及植物產(chǎn)品的資料。
2.1創(chuàng)建sqlite數(shù)據(jù)庫
表的創(chuàng)建:
植物有列:plant_id, plant_name, scientific_name, price, category, light_requirement, water_requirement, humidity_requirement, care_level, description
Plant_products具有列:product_id, product_name, description, application_plants, symptoms_addressing
2.2編寫使LLM能夠與這些交互的函數(shù)
list_tables() -檢索數(shù)據(jù)庫中所有表的名稱
descripbe_table—查找表模式,返回列和相應(yīng)數(shù)據(jù)類型的列表
execute_query—執(zhí)行SQL語句,返回結(jié)果
2.3為LLM提供Tools功能
模型現(xiàn)在可以使用這些函數(shù)(工具)來回答用戶的查詢,例如:
你們賣的最便宜的植物是什么?
ZZ工廠對光和水的要求是什么?
你們有價格低于15英鎊的Pothos嗎?
描述和平百合及其對光的要求
這個示例“最便宜的植物是什么?”返回以下內(nèi)容:
總的來說,數(shù)據(jù)庫查詢功能非常強大,但是在查看真實場景時需要仔細考慮安全性!
潛在限制(工具1:智能常見問題解答)
數(shù)據(jù)質(zhì)量和覆蓋范圍:不完整或過時的政策可能會限制機器人準確回答更廣泛客戶查詢的能力。
嵌入模型語義理解:雖然有幫助,但嵌入模型對語言的解釋并不完美,可能會錯過措辭或上下文中的細微差異,從而導(dǎo)致錯誤的相似性匹配。
固定的相似性閾值:當(dāng)前用于識別相似查詢的硬編碼閾值可能過于嚴格或?qū)捤桑赡軐?dǎo)致將查詢路由到LLM或提示緩存的次優(yōu)。
RAG檢索相關(guān)性:從矢量數(shù)據(jù)庫中檢索到的頂部文檔可能并不總是包含回答用戶特定問題所需的最精確信息,即使最初的語義搜索很好。
隨著時間的推移,提示緩存準確性:由于策略更改,緩存的答案可能會過時,并且不相關(guān)或不正確條目的可能性可能會降低將來對類似查詢的響應(yīng)的質(zhì)量。
潛在的限制(工具2:數(shù)據(jù)庫查詢)
數(shù)據(jù)依賴性和查詢準確性:該工具的準確性在很大程度上依賴于結(jié)構(gòu)良好的數(shù)據(jù)庫信息和LLM將自然語言正確轉(zhuǎn)換為精確的SQL查詢的能力。任何一個錯誤都可能導(dǎo)致不準確的結(jié)果。
有限的隱式關(guān)系理解:該工具可能難以處理需要理解plant和plant_products表之間的間接連接的用戶查詢,而不是明確定義的關(guān)系。
下一個步驟:
改進智能常見問題解答(附加功能)
在常見問題解答中獲取反饋;無用的查詢可能會降低“命中”分數(shù)
比較長上下文/上下文學(xué)習(xí)與當(dāng)前的RAG方法
將工具組合成Agent
代理編排決定如何利用所有可用的工具處理查詢
例如,它可以回答關(guān)于商店的一般問題(工具一-智能常見問題),也可以回答與工廠庫存產(chǎn)品相關(guān)的問題(工具二-智能數(shù)據(jù)庫查詢)。
添加第三個工具:植物健康助手
圖片上傳器:用戶上傳他們糟糕的植物的圖片
植物識別和癥狀檢測:Gemini API可識別植物種類并描述任何可見癥狀
如果沒有可見的癥狀:提示用戶獲取更多信息/從谷歌搜索中提供一般潛在問題
(代理擴展)植物健康信息檢索:谷歌搜索API檢索常見疾病和已識別植物和癥狀的治療信息
(代理擴展)天氣數(shù)據(jù)集成:谷歌天氣API提供當(dāng)前的天氣條件,這些天氣條件被納入植物健康分析
向用戶提供治療建議和潛在原因解釋,并向用戶推薦任何相關(guān)產(chǎn)品
第四個工具:購物助手(應(yīng)用集成)
提供購物協(xié)助,例如在訂貨前討論各種選擇,以及創(chuàng)建/管理賬戶
本文編譯自hackster.io