MCP 實踐:基于 MCP 架構(gòu)實現(xiàn)知識庫系統(tǒng) 原創(chuàng)
本文通過一個實際案例展示如何基于 MCP(Model Context Protocol)開發(fā)一個支持私有知識庫的 AI Agent 問答系統(tǒng)。
1、AI Agent 問答系統(tǒng)整體流程
AI Agent 問答知識庫系統(tǒng)整體由構(gòu)建與檢索流程組成。
第一、知識庫構(gòu)建流程
1、文本切分
對輸入的文本進行切分,確保切分后的文本段在保持完整性和語義連貫性的同時,便于后續(xù)處理和檢索。
2、FAQ 提取
從文本中提取常見問題及其答案(FAQ),作為知識庫的一部分,以增強檢索的準確性和效率。
3、知識庫導(dǎo)入
將切分后的文本段和提取的 FAQ 導(dǎo)入知識庫,并進行 Embedding 處理,以便將文本轉(zhuǎn)換為向量形式,便于檢索。
第二、知識檢索(RAG)流程
1、問題拆解
對用戶提出的問題進行拆解,將其分解為更小、更具體的子問題,以提高檢索的精確度。
2、檢索策略
對每個子問題分別進行檢索,包括:
對文本段進行向量檢索,以找到最相關(guān)的文本內(nèi)容。
對 FAQ 進行全文和向量混合檢索,以確保檢索結(jié)果的全面性和準確性。
3、內(nèi)容篩選
對檢索結(jié)果進行篩選,選擇與子問題最相關(guān)的內(nèi)容,作為生成回答的參考。
第三、優(yōu)化策略
與傳統(tǒng)的 Naive RAG 相比,本流程在知識庫構(gòu)建和檢索階段進行了以下優(yōu)化:
1、Chunk 切分優(yōu)化
改進文本切分方法,以更好地保持文本的完整性和語義連貫性。
2、FAQ 提取
自動從文本中提取 FAQ,豐富知識庫內(nèi)容,提高檢索效果。
3、Query Rewrite
對用戶問題進行重寫,使其更易于檢索。
4、混合檢索
結(jié)合全文和向量檢索方法,提高檢索的準確性和效率。
通過這些優(yōu)化,我們的知識庫構(gòu)建和檢索流程能夠更有效地處理和響應(yīng)用戶查詢,提供更準確、更全面的答案。
2、基于 MCP 的 AI Agent 知識庫架構(gòu)設(shè)計
基于 MCP 的 AI Agent 知識庫架構(gòu)設(shè)計主要分為三個核心部分:知識庫、MCP Server 以及功能實現(xiàn)模塊。每個部分在系統(tǒng)中扮演著不同的角色,共同協(xié)作以實現(xiàn)高效的知識管理和檢索功能。
第一、知識庫模塊
知識庫是系統(tǒng)的數(shù)據(jù)存儲中心,包含兩個主要的存儲組件:
- Knowledge Store:用于存儲和管理文本內(nèi)容。它支持向量檢索和全文檢索,以確??焖偾覝蚀_的信息檢索。
- FAQ Store:專門用于存儲常見問題及其答案(FAQ)。同樣支持混合檢索方式,以提高檢索效率和準確性。
第二、MCP Server 模塊
MCP Server 作為系統(tǒng)的操作核心,負責(zé)對 Knowledge Store 和 FAQ Store 進行讀寫操作。它提供了四個主要的工具(Tools),用于支持不同的操作需求:
- storeKnowledge:用于將新的文本內(nèi)容導(dǎo)入 Knowledge Store。
- searchKnowledge:用于在 Knowledge Store 中檢索文本內(nèi)容。
- storeFAQ:用于將新的 FAQ 導(dǎo)入 FAQ Store。
- searchFAQ:用于在 FAQ Store 中檢索 FAQ。
第三、功能實現(xiàn)部分模塊
這一部分完全依賴于 Prompt 和 LLM(大語言模型)來實現(xiàn)對知識庫的操作,包括:
- 文檔導(dǎo)入:通過 LLM 處理,將文檔內(nèi)容導(dǎo)入 Knowledge Store。
- 檢索:利用 LLM 的能力,對 Knowledge Store 或 FAQ Store 進行內(nèi)容檢索。
- 問答:通過 LLM 解析用戶問題,并在知識庫中檢索相關(guān)信息以生成答案。
這種設(shè)計使得系統(tǒng)能夠靈活地處理各種知識管理和檢索任務(wù),同時保持高效的性能和準確性。
3、基于 MCP 的 AI Agent 知識庫架構(gòu)實現(xiàn)
第一、開源代碼概覽
阿里的這個項目代碼已全部開源,主要分為兩個部分:
Github 地址:
??https://github.com/aliyun/alibabacloud-tablestore-mcp-server??
- 客戶端(Client):使用 Python 編寫,負責(zé)與大語言模型(LLM)進行交互。它通過 MCP 客戶端獲取所需的工具(Tools),并根據(jù) LLM 的反饋來調(diào)用這些工具??蛻舳死镁脑O(shè)計的提示(Prompt)實現(xiàn)了三個核心功能:知識庫構(gòu)建、檢索和問答。
- 服務(wù)器端(Server):使用 Java 編寫,基于 Spring AI 框架實現(xiàn) MCP 服務(wù)器。由于底層存儲采用的是 Tablestore,因此主體框架是基于相關(guān)文章的代碼進行改造。
第二、知識庫存儲
我們選擇 Tablestore 作為知識庫的存儲解決方案,原因如下:
- 簡單易用:只需創(chuàng)建一個實例即可開始使用,采用 Serverless 模式,無需管理容量和后續(xù)運維。
- 低成本:完全按量計費,自動根據(jù)存儲規(guī)模水平擴展,最大可擴展至PB級。雖然采用本地知識庫可以實現(xiàn)零成本,但我們實現(xiàn)的是一個企業(yè)級、可通過云共享的知識庫。
- 功能完備:支持全文、向量和標量等檢索功能,支持混合檢索。
第三、MCP 服務(wù)器
MCP服務(wù)器實現(xiàn)了四個工具(Tools),具體注冊代碼可參考 TablestoreMcp,相關(guān)描述如下:
第四、知識庫構(gòu)建
1.對文本進行切段并提取 FAQ
以上完全通過提示詞來完成,可根據(jù)自己的要求進行調(diào)優(yōu)。這種方式的優(yōu)勢是切段的文本能保證完整性以及語義一致性,能夠比較靈活的對格式做一些處理。提取的 FAQ 很全面,對于簡單問題的問答通過直接搜索 FAQ 是最準確直接的。最大的缺點就是執(zhí)行比較慢并且成本較高,一次會消耗大量的 Token,不過好在是一次性的投入。
2.寫入知識庫和 FAQ 庫
這一步也是通過提示詞來完成,基于 MCP 架構(gòu)可以非常簡單的實現(xiàn)。
3.知識庫檢索
同樣這一步也是通過提示詞加 MCP 來實現(xiàn),非常簡便。通過提示詞描述實現(xiàn)了一個稍微復(fù)雜點的檢索:先對問題進行拆解,拆解為更原子的子問題;每個子問題分別檢索知識庫和 FAQ,檢索結(jié)果匯總后篩選留下與問題最相關(guān)的內(nèi)容;按照格式返回結(jié)果。
4.知識庫問答
直接查看提示詞和效果。從 MCP 服務(wù)器的日志中可以看到自動調(diào)用了知識庫和 FAQ 的檢索工具,并能根據(jù)之前導(dǎo)入的內(nèi)容進行回答。
通過這種方式,我們實現(xiàn)了一個高效、靈活且功能完備的知識庫系統(tǒng)。
本文轉(zhuǎn)載自公眾號玄姐聊AGI 作者:玄姐
原文鏈接:??https://mp.weixin.qq.com/s/n56zgMe3FtH3pOW9k4vp2w??
