基于 MCP 實(shí)現(xiàn)推薦業(yè)務(wù)場景案例架構(gòu)設(shè)計(jì) 原創(chuàng)
Anthropic 推出的 MCP(模型上下文協(xié)議)取得了成功,這顯然激發(fā)了 AI 行業(yè)里的其他參與者,大家都想來定義一些開放協(xié)議,好用在 AI Agent 系統(tǒng)(Agentic Systems)的集成里。
1、MCP 架構(gòu)設(shè)計(jì)
MCP(模型上下文協(xié)議)是由 Anthropic 定義的一個(gè)開放協(xié)議,標(biāo)準(zhǔn)化應(yīng)用程序如何為大語言模型(LLM)提供上下文。更具體地說,它試圖標(biāo)準(zhǔn)化基于 LLM 的應(yīng)用程序與其他環(huán)境集成的協(xié)議。
在 AI Agent 系統(tǒng)(Agentic Systems)中,上下文可以通過多種方式提供:
1、外部數(shù)據(jù):這是長期記憶的一部分。
2、工具:系統(tǒng)與環(huán)境交互的能力。
3、動(dòng)態(tài)提示詞:可以作為系統(tǒng)提示詞(System Prompt)的一部分注入。
第一、為什么要標(biāo)準(zhǔn)化?
目前,AI Agent 應(yīng)用的開發(fā)流程很混亂:
1.有許多 AI Agent 框架存在細(xì)微差異。雖然看到生態(tài)系統(tǒng)蓬勃發(fā)展令人鼓舞,但這些細(xì)微差異很少能帶來足夠的價(jià)值,但可能會(huì)顯著改變你的代碼編寫方式。
2.與外部數(shù)據(jù)源的集成通常是臨時(shí)實(shí)現(xiàn)的,并且使用不同的協(xié)議,即使在組織內(nèi)部也是如此。對于不同公司來說,這顯然是如此。
2.工具在代碼庫中以略微不同的方式定義。如何將工具附加到增強(qiáng)型 LLM 上也是不同的。
目標(biāo)是提高我們創(chuàng)新 AI Agent 應(yīng)用的速度、安全性以及將相關(guān)數(shù)據(jù)帶入上下文的便利性。
第二、MCP 架構(gòu)設(shè)計(jì)
1.MCP Host:使用 LLM 為核心并希望通過 MCP 訪問數(shù)據(jù)的程序。
2.MCP Client:與 MCP Server 保持1:1連接的客戶端。
3.MCP Server:每個(gè) MCP Server 都通過標(biāo)準(zhǔn)化的模型上下文協(xié)議公開特定功能的輕量級(jí)程序。
4.Local Data Sources:你計(jì)算機(jī)上的文件、數(shù)據(jù)庫和服務(wù),MCP Server 可以安全訪問。
5.Remote Data Sources:通過互聯(lián)網(wǎng)可用的外部系統(tǒng)(比如:通過 API),MCP Server 可以連接到這些系統(tǒng)。
第三、通過 MCP 分離控制責(zé)任
MCP Server 公開三個(gè)主要元素(Prompts、Resoures、Tools),這些元素是有意設(shè)計(jì)的,以幫助實(shí)現(xiàn)特定的控制分離。
1.Prompts 提示詞被設(shè)計(jì)為用戶控制的。后端的程序員可以公開特定的提示詞(適用于與后端服務(wù)公開的數(shù)據(jù)交互),這些提示詞可以注入到使用 LLM 的應(yīng)用程序中,并暴露給給定應(yīng)用程序的用戶。
2.Resoures 資源被設(shè)計(jì)為應(yīng)用程序控制的。Resources 資源是任何可以被利用 LLM 構(gòu)建的應(yīng)用程序使用的數(shù)據(jù)(文本或二進(jìn)制)。應(yīng)用程序的程序員(通常是 AI 應(yīng)用開發(fā)工程師)負(fù)責(zé)將這些信息編碼到應(yīng)用程序中。通常,這里沒有自動(dòng)化,LLM 不參與此選擇。
3.Tools 工具被設(shè)計(jì)為大模型控制的。如果我們賦予應(yīng)用程序如何與環(huán)境交互的代理權(quán),我們使用 Tools 工具來實(shí)現(xiàn)這一點(diǎn)。MCP Server 公開一個(gè)端點(diǎn),可以列出所有可用 Tools 工具及其描述和所需參數(shù),應(yīng)用程序可以將此列表傳遞給 LLM,以便它決定哪些 Tools 工具適用于手頭的任務(wù)以及如何調(diào)用它們。
2、基于 MCP 實(shí)現(xiàn)招聘推薦業(yè)務(wù)場景
第一、招聘推薦業(yè)務(wù)場景剖析
很多企業(yè)內(nèi)部都有推薦業(yè)務(wù)的場景,特別是對于招聘推薦業(yè)務(wù),招聘場景涉及到企業(yè)用人端的招聘服務(wù),也涉及到個(gè)人用戶的簡歷數(shù)據(jù),這些數(shù)據(jù)往往散落在不同的平臺(tái)中,為了更高效的實(shí)現(xiàn)人才的匹配,招聘平臺(tái)就需要利用 AI Agent 智能體根據(jù)招聘崗位需求快速找到最合適的候選人,這就是招聘的推薦業(yè)務(wù)場景。
在這個(gè)業(yè)務(wù)場景中,通過 MCP 統(tǒng)一協(xié)議連接多個(gè)系統(tǒng),AI Agent 智能體可以自主決策,從而按需獲取崗位數(shù)據(jù)、職位數(shù)據(jù)、簡歷數(shù)據(jù)等,從而將招聘找人效率提高30%+。
第二、基于 MCP 的整體流程設(shè)計(jì),如下所示:
- 1、招聘平臺(tái)內(nèi)部需要提供 API 接口能力;
- 2、提供獲取崗位 JD 的 API 接口能力;
- 3、提供內(nèi)部封裝的簡歷排序能力;
- 4、AI Agent 智能體根據(jù) MCP Server 調(diào)用結(jié)果,給出對應(yīng)的簡歷推薦理由。
第三、基于 MCP 的整體架構(gòu)設(shè)計(jì),如下所示:
第四、MCP Server 的代碼實(shí)現(xiàn),如下所示:
import requests
import json
from mcp.server.fastmcp import FastMCP
# 創(chuàng)建 MCP 服務(wù)器
mcp = FastMCP()
@mcp.tool()
def get_job_list(job_name="", page=1, page_size=20):
"""
獲取職位列表和對應(yīng)的jobId
參數(shù):
職位名稱: 職位的名稱關(guān)鍵詞,如"安全"、"工程師"等
頁碼: 分頁查詢的頁碼,默認(rèn)為1
每頁數(shù)量: 每頁返回的職位數(shù)量,默認(rèn)為20
"""
payload = {
"jobTitle": job_name,
"page": page,
"limit": page_size
}
try:
response = requests.post(URL, headers=HEADERS, data=json.dumps(payload))
response.raise_for_status() # 檢查請求是否成功
return response.json()
except Exception as e:
return {"錯(cuò)誤": f"獲取職位列表失敗: {str(e)}"}
第五、配置到 MCP Client 中,Client 調(diào)用如下所示:
隨著 MCP Server 數(shù)量的增加,可能會(huì)面臨以下挑戰(zhàn):
- MCP Server 選擇難題:客戶端在選擇合適的 MCP Server 進(jìn)行調(diào)用時(shí)可能會(huì)遇到困難,這需要花費(fèi)大量時(shí)間來嘗試不同的調(diào)用方案。由于服務(wù)器的不同排列組合,嘗試的成本可能會(huì)急劇增加。在這種情況下,可能需要在客戶端開發(fā)更高級(jí)的記憶功能,以記住成功的調(diào)用路徑;同時(shí),在服務(wù)器端實(shí)施服務(wù)評(píng)級(jí)機(jī)制,以便優(yōu)先選擇性能更優(yōu)的服務(wù)器進(jìn)行調(diào)用。
- 安全性和授權(quán)問題:目前的開源 MCP 版本尚未考慮授權(quán)和訪問權(quán)限的問題,這可能導(dǎo)致 MCP Server 向客戶端植入惡意信息,或者客戶端將本地的個(gè)人隱私信息上傳到網(wǎng)絡(luò)中,從而引發(fā)安全風(fēng)險(xiǎn)。
本文轉(zhuǎn)載自??玄姐聊AGI?? 作者:玄姐
