大模型集成遠程MCP服務

大模型集成遠程MCP服務,通常是指讓本地的大模型應用(如OpenAI、Qwen等)能夠自動調(diào)用遠程的MCP(Multi-Component Platform,多組件平臺)服務,實現(xiàn)多輪對話和多函數(shù)自動調(diào)用。下面我將詳細解釋其實現(xiàn)原理和步驟,并給出簡明的實現(xiàn)流程。


一、核心思路

  1. 本地注冊遠程MCP服務:將遠程MCP服務以“函數(shù)”形式注冊到本地大模型的函數(shù)調(diào)用系統(tǒng)中。
  2. 自動多輪調(diào)用:大模型根據(jù)用戶輸入,自動決定調(diào)用本地函數(shù)還是遠程MCP服務,并能多輪交互。
  3. 支持多種遠程協(xié)議:如SSE(Server-Sent Events)和HTTP,適配不同的MCP服務端實現(xiàn)。

二、實現(xiàn)步驟

1. 定義遠程MCP服務的注冊方法

MCPMultiFunctionCaller 類中,register_remote_mcp_server 方法用于注冊遠程MCP服務。
核心參數(shù)包括服務名、URL、服務類型(如ssehttp),以及參數(shù)描述。

def register_remote_mcp_server(self, name: str, url: str, server_type: str = "sse", ...):
    ...
    def remote_func(input: str, **kwargs):
        if server_type == "sse":
            return asyncio.run(self._call_sse(url, input))
        else:
            return self._call_http(url, input)
    ...
    self.functions[name] = FunctionDefinition(
        name=name,
        description=func_description,
        parameters=parameters,
        function=remote_func,
        is_remote=True
    )

2. 實現(xiàn)遠程調(diào)用邏輯

  • SSE協(xié)議:通過 aiohttp 異步流式讀取遠程服務返回的數(shù)據(jù)。
  • HTTP協(xié)議:通過 requests 直接POST請求獲取結果。
async def _call_sse(self, url: str, input_text: str) -> str:
    async with aiohttp.ClientSession() as session:
        async with session.post(url, json={"input": input_text}) as resp:
            result = ""
            async for line in resp.content:
                ...
            return result or "遠程MCP服務無返回"

3. 在主流程中注冊遠程MCP服務

caller.register_remote_mcp_server(
    name="12306-mcp",
    url="https://mcp.api-inference.modelscope.net/xxxxxxxxxxxx/sse",
    server_type="sse"
)

4. 多輪對話與自動函數(shù)調(diào)用

mcp_chat 方法會自動根據(jù)大模型的輸出,決定調(diào)用本地函數(shù)還是遠程MCP服務,并將結果反饋給大模型,支持多輪自動調(diào)用。


三、典型調(diào)用流程圖

image.png

四、常見問題與注意事項

  1. 參數(shù)格式:遠程MCP服務的參數(shù)需與本地注冊時的參數(shù)描述一致。
  2. 異步與同步:SSE通常為異步調(diào)用,需注意事件循環(huán)的管理。
  3. 多輪調(diào)用次數(shù):可通過 max_rounds 控制最大多輪調(diào)用次數(shù),防止死循環(huán)。
  4. 錯誤處理:需對遠程服務異常、超時等情況做容錯處理。

五、總結

只需三步即可集成遠程MCP服務到大模型應用:

  1. register_remote_mcp_server 注冊遠程服務;
  2. 在對話流程中自動調(diào)用遠程服務;
  3. 處理好參數(shù)和返回值的格式。

如需擴展更多遠程服務,只需多次調(diào)用注冊方法即可。

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容