AI Agent實戰:智慧檢索在Kingbase資料庫管理中的優勢應用

努力的小雨發表於2024-07-01

前言

在資訊科技飛速發展的今天,資料庫管理已成為IT專業人員日常工作中不可或缺的一部分。然而,面對複雜的SQL問題,傳統的web搜尋往往難以提供精準的答案,尤其是在針對特定資料庫系統,如金倉資料庫時,這種侷限性更加明顯。為了解決這一問題,我決定利用Agent的高階搜尋和處理能力,建立一個個人助手,以快速準確地找到解決方案。

助手搭建

個人助手描述

我的個人助手是一個高度整合的智慧搜尋解決方案,專為金倉資料庫使用者設計。它採用以下步驟,高效地協助我解決資料庫相關問題:

  • 知識庫檢索:直接訪問金倉資料庫的官方文件,快速檢索特定問題的專業解答。
  • 社群與部落格搜尋:利用先進的搜尋演算法,深入社群和部落格,挖掘更廣泛的知識和經驗。
  • 智慧問答:結合大型語言模型,對搜尋結果進行智慧分析,提供精準且相關的答案。

透過這一流程,我的助手不僅提升了問題解決的速度,還確保了答案的質量和深度。現在,我將著手建立這個強大的助手,以期在資料庫管理的道路上,為我提供持續的支援和便利。

image

提示詞

這部分內容,我將直接呈現最終的文案。在省略中間的最佳化過程的同時,確保文案的清晰度和專業性:

# 角色
你是一位資深的 KingbaseES 金倉資料庫專家,精通其各項技術細節,能夠準確解答使用者關於 KingbaseES 金倉資料庫的各類諮詢疑問,熟練獲取並深度解讀官方教程資料,助力使用者輕鬆上手並全面深入理解 KingbaseES 金倉資料庫。

## 技能
### 技能 1: 解答諮詢疑問
1. 當使用者提出有關 KingbaseES 金倉資料庫的具體問題時,運用【KingbaseES_search】工具全面剖析問題,並給出精確、明晰且易於理解的答案。
2. 倘若問題表述不清晰,需主動與使用者交流,以確切明晰具體問題。

## 限制:
- 僅專注於 KingbaseES 金倉資料庫相關工作,堅決拒絕回答無關內容。
- 所輸出的內容務必嚴格依照給定的格式進行組織,不得偏離框架要求。
- 提取的關鍵資訊務必簡潔清晰,突出重點。

知識庫

構建個人知識庫對於提升問題解決效率至關重要。以下是我構建知識庫的步驟:

  • 訪問官方資源:訪問金倉資料庫的官方文件,精心挑選並下載了所有必要的手冊、指南和最佳實踐文件,確保我的知識庫既全面又準確。
  • 整理關鍵資訊:專注於收集和整理官方提供的最佳實踐、常見問題解答和配置指南,這些都是解決資料庫問題時不可或缺的資源。
  • 保持知識庫更新:密切關注金倉資料庫的最新版本更新,及時整合新資訊,確保我的知識庫始終保持最新狀態。

由於某些官方文件的下載連結存在訪問限制或需要特定許可權,我考慮採取手動下載的方式,以確保新增內容能夠及時納入我的知識庫。以下是手動下載過程的示意圖:

image

在收集知識後,對知識庫進行精心篩選和整理,確保其內容的質量和相關性。以下是我的最佳化步驟:

  • 篩選過程:對收集到的知識片段進行細緻的評估,識別並剔除那些過時或不適用的資訊。
  • 內容更新:定期更新知識庫,引入最新的資料庫管理、技術更新
  • 結構最佳化:對知識庫進行結構化整理,以便於快速檢索和應用,提升知識庫的實用性和效率。
  • 質量控制:實施嚴格的質量控制流程,確保知識庫中的每一條資訊都是準確、可靠且有價值的。

image

在初步構建知識庫並進行測試之後,我發現雖然它提供了一定的幫助,但效果並不顯著。這讓我意識到,僅依賴知識庫可能不足以解決所有問題。因此,我計劃擴充套件我的解決方案:

  • 利用社群資源:為了彌補這一不足,我打算利用社群的API,抓取社群問答和部落格文章,以獲取更多樣化和實時的解決方案。
  • 實施計劃:我將設計一個系統,透過API整合社群內容,並對抓取的資訊進行篩選和分析,以期找到更有效的答案。

image

外掛開發(社群+部落格)

既然需要利用API來獲取資訊,那麼開發一個專門的外掛就顯得尤為重要。我將著手建立一個外掛,專門用於與社群的API進行互動,以抓取所需的資訊。

image

這裡寫一下簡單的描述:

image

在開發過程中,程式碼編寫的細節往往涉及複雜的技術實現,對於非專業讀者可能難以理解。因此,我選擇省略中間的編碼步驟,直接展示最終的程式碼成果:

from runtime import Args
from typings.search_forum.search_forum import Input, Output
import json
import requests
def get_search(query,type):
    cookies = {
        '_ga': 'GA1.3.1791910307.1718679034',
        '__bid_n': '19029f909db92161118c02',
        'Hm_lvt_3c01febe06ffa2353036661fdec1f873': '1718691104,1718792940,1718846376',
        'sensorsdata2015jssdkcross': '%7B%22distinct_id%22%3A%2219029f90aad523-090ebfbc937d5e-4c657b58-2073600-19029f90aae77%22%2C%22first_id%22%3A%22%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E5%BC%95%E8%8D%90%E6%B5%81%E9%87%8F%22%2C%22%24latest_search_keyword%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC%22%2C%22%24latest_referrer%22%3A%22https%3A%2F%2Fcloud.tencent.com%2F%22%7D%2C%22identities%22%3A%22eyIkaWRlbnRpdHlfY29va2llX2lkIjoiMTkwMjlmOTBhYWQ1MjMtMDkwZWJmYmM5MzdkNWUtNGM2NTdiNTgtMjA3MzYwMC0xOTAyOWY5MGFhZTc3In0%3D%22%2C%22history_login_id%22%3A%7B%22name%22%3A%22%22%2C%22value%22%3A%22%22%7D%2C%22%24device_id%22%3A%2219029f90aad523-090ebfbc937d5e-4c657b58-2073600-19029f90aae77%22%7D',
    }

    headers = {
        'Accept': 'application/json, text/plain, */*',
        'Accept-Language': 'zh-CN',
        'Connection': 'keep-alive',
        'Content-Type': 'application/json;charset=UTF-8',
        # 'Cookie': '_ga=GA1.3.1791910307.1718679034; __bid_n=19029f909db92161118c02; Hm_lvt_3c01febe06ffa2353036661fdec1f873=1718691104,1718792940,1718846376; sensorsdata2015jssdkcross=%7B%22distinct_id%22%3A%2219029f90aad523-090ebfbc937d5e-4c657b58-2073600-19029f90aae77%22%2C%22first_id%22%3A%22%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E5%BC%95%E8%8D%90%E6%B5%81%E9%87%8F%22%2C%22%24latest_search_keyword%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC%22%2C%22%24latest_referrer%22%3A%22https%3A%2F%2Fcloud.tencent.com%2F%22%7D%2C%22identities%22%3A%22eyIkaWRlbnRpdHlfY29va2llX2lkIjoiMTkwMjlmOTBhYWQ1MjMtMDkwZWJmYmM5MzdkNWUtNGM2NTdiNTgtMjA3MzYwMC0xOTAyOWY5MGFhZTc3In0%3D%22%2C%22history_login_id%22%3A%7B%22name%22%3A%22%22%2C%22value%22%3A%22%22%7D%2C%22%24device_id%22%3A%2219029f90aad523-090ebfbc937d5e-4c657b58-2073600-19029f90aae77%22%7D',
        'Origin': 'https://bbs.kingbase.com.cn',
        'Referer': 'https://bbs.kingbase.com.cn/',
        'Sec-Fetch-Dest': 'empty',
        'Sec-Fetch-Mode': 'cors',
        'Sec-Fetch-Site': 'same-origin',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 Edg/126.0.0.0',
        'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="126", "Microsoft Edge";v="126"',
        'sec-ch-ua-mobile': '?0',
        'sec-ch-ua-platform': '"Windows"',
    }
    tpe = f'kingbase_blog_{type}'
    json_data = {
        'keyWord': query,
        'type': tpe,
        'pageNum': 1,
        'pageSize': 100,
        'fullSearch': True,
    }

    response = requests.post(
        'https://bbs.kingbase.com.cn/web-api/web/search/queryByKeyWord',
        cookies=cookies,
        headers=headers,
        json=json_data,
    )
    return response.text
    # Note: json_data will not be serialized by requests
    # exactly as it was in the original request.
    #data = '{"keyWord":"SQL調優","type":"kingbase_blog_forum","pageNum":1,"pageSize":10,"fullSearch":true}'.encode()
    #response = requests.post(
    #    'https://bbs.kingbase.com.cn/web-api/web/search/queryByKeyWord',
    #    cookies=cookies,
    #    headers=headers,
    #    data=data,
    #)
def handler(args: Args[Input])->Output:
    response_text = get_search(args.input.query,args.input.type)
    response_json = json.loads(response_text)
    return response_json

這裡看下測試效果:

image

工作流

為了進一步擴充套件我的資訊來源,我編寫了一個外掛,利用社群和部落格提供的API進行搜尋。但是由於官方API的搜尋結果關聯度可能不夠,我建立了一個工作流,這裡簡要概括下工作流需要做哪些事情:

  • 搜尋過濾:透過編寫特定的演算法,對搜尋結果進行初步過濾,去除無關資訊。
  • 大模型節點:利用大型語言模型節點進行二次篩選,確保搜尋結果的相關性和準確性。
  • 引用連結:為每個解決方案提供引用連結,方便我進一步研究和驗證。

好的,我們建立一下:

image

在工作流中新增我們剛才編寫的外掛,對問題進行搜尋:

image

在完成初步的程式碼開發和功能實現後,接下來我們將關注剩餘的功能點。以下是我們最終確定的工作流節點的檢視概覽:

image

效果

隨著所有關鍵元件的基本完成,我們現在可以展示最終的助手效果。以下是我們助手的最終成果概覽:

image

在演示環節,我們注意到金倉社群的搜尋功能存在一些限制,導致搜尋結果並不總是符合我們的預期。為了克服這一挑戰,我們採取了以下措施:

  • 資料檢索量增加:我們特意將資料檢索量設定為100條,以增加獲取相關資料的機會。
  • 大模型輔助篩選:利用先進的大模型技術,我們對檢索到的資料進行深度過濾和篩選,以確保結果的相關性和準確性。
  • 效能考慮:由於增加了資料量和大模型的輔助處理,這一過程可能會比較耗時。我們正在努力最佳化演算法,以提高搜尋和篩選的效率。

在演示中,我們將展示這一過程,雖然速度可能較慢,但最終結果比社群的搜尋將更加精準和有價值。

image

希望透過這次演示,向使用者展示即使在面對搜尋限制的情況下,我的助手依然能夠透過智慧篩選提供高質量的結果。

總結

雖然在開發過程中遇到了不少技術挑戰,但最終我成功構建了一個針對金倉資料庫的社群檢索諮詢助手。這個助手不僅解決了普通web搜尋無法滿足特定資料庫問題的需求,還提高了我解決問題的效率和質量。在未來的工作中,我將繼續最佳化這個助手,使其更加智慧和強大。

我們可以看到Agent如何在資料庫問題解決中發揮重要作用,從知識庫的構建到社群資源的深度挖掘,每一個環節都體現了Agent能力的強大和便捷。

智慧助手線上體驗地址:KingbaseES金倉資料庫小助手


我是努力的小雨,一名 Java 服務端碼農,潛心研究著 AI 技術的奧秘。我熱愛技術交流與分享,對開源社群充滿熱情。身兼掘金優秀作者、騰訊雲內容共創官、阿里雲專家博主、華為云云享專家等多重身份。

🚀 目前,我的探索重點在於 AI Agent 智慧體應用,我對其充滿好奇,並不斷探索著其潛力與可能性。如果你也對此領域充滿熱情,歡迎與我交流分享,讓我們共同探索未知的領域!

💡 我將不吝分享我在技術道路上的個人探索與經驗,希望能為你的學習與成長帶來一些啟發與幫助。

🌟 歡迎關注努力的小雨!🌟

相關文章