
APISIX-MCP:利用 AI + MCP 擁抱 API 智能化管理
我們先看一下普通的調(diào)用是如何發(fā)生。首先,調(diào)用者需要知道服務(wù)提供者的地址(一個(gè)域名或者是一個(gè) IP),之后調(diào)用者根據(jù)提前約定好的參數(shù),對接口進(jìn)行調(diào)用。調(diào)用流程圖如下:
在日常開發(fā)中,我們已經(jīng)知悉當(dāng)前的提供者的接口集合、接口和接口參數(shù)的具體作用,所以可以基于這些上下文,在業(yè)務(wù)代碼中寫入調(diào)用邏輯,實(shí)現(xiàn)服務(wù)間的調(diào)用。對模型而言,這些調(diào)用上下文也是必須的,模型也需要知道服務(wù)提供者的接口集合以及接口的詳細(xì)描述,才能根據(jù)上下文進(jìn)行接口調(diào)用。因此,對于已經(jīng)使用 Nacos 作為注冊配置中心的存量服務(wù)而言,Nacos 中已經(jīng)存儲(chǔ)了服務(wù)的調(diào)用地址,只需要增加服務(wù)的接口信息就能實(shí)現(xiàn)模型來調(diào)用上下文。為此,我們引入了“應(yīng)用全局描述”來描述當(dāng)前應(yīng)用以及接口的詳細(xì)信息,通過統(tǒng)一的接口描述協(xié)議對Nacos 中的服務(wù)進(jìn)行 MCP 化改造。對于之前未注冊在 Nacos 中的服務(wù),只需要通過 Nacos 持久化服務(wù)發(fā)現(xiàn)手動(dòng)注冊即可。在配置完服務(wù)相關(guān)信息之后,MCP 協(xié)議需要的相關(guān)數(shù)據(jù)都已經(jīng)齊全了,接下來就需要考慮如何將這些數(shù)據(jù)通過 MCP 協(xié)議暴露出去,這里我們通過 Higress 的插件機(jī)制完成 MCP 協(xié)議的暴露能力。調(diào)用流程圖如下:
MCP 協(xié)議目前支持多種資源(Tool、Prompt、Resource 等),我們對使用量較高的 Tool 進(jìn)行了優(yōu)先實(shí)現(xiàn),再借助 Higress 提供的統(tǒng)一的 SSE 協(xié)議支持,便加速了 MCP Server 的構(gòu)建。實(shí)現(xiàn)原理上,我們通過在 Higress 中的 MCP Server 插件實(shí)現(xiàn)了 Nacos 中管理的 Tools 的暴露,對外通過 MCP 協(xié)議暴露普通 HTTP 服務(wù),需要先完成兩件事,實(shí)現(xiàn)原理圖如下:
在整體實(shí)現(xiàn)中,Nacos 作為 MCP Registry,扮演控制面的角色來管理 Tool 的元信息,Higress 在數(shù)據(jù)面做協(xié)議轉(zhuǎn)換和 RPC 調(diào)用。存量服務(wù)只需要添加接口描述即可,無需做任何改動(dòng)。
最近高德推出了 MCP Server 獲得了業(yè)內(nèi)廣泛關(guān)注,這部分 Server 是高德基于 MCP 社區(qū)的開發(fā)指引實(shí)現(xiàn)的,構(gòu)建成本較高。接下來,我們基于高德官方的 Open API 接口,通過 Nacos+Higress 的方案,來演示如何0代碼適配 MCP Server。
通過 docker 部署 nacos:
export NACOS_AUTH_TOKEN=自定義的token,token為原始內(nèi)容的base64編碼結(jié)果
export NACOS_AUTH_IDENTITY_VALUE=自定義的IDENTITY_VALUE,任意英文和數(shù)字組合
docker run -td -e PREFER_HOST_MODE=hostname -e MODE=standalone -e NACOS_AUTH_IDENTITY_KEY=serverIdentity -e NACOS_AUTH_IDENTITY_VALUE=${NACOS_AUTH_IDENTITY_VALUE} -e NACOS_AUTH_TOKEN=${NACOS_AUTH_TOKEN} -p 8848:8848 -p 9848:9848 nacos/nacos-server
部署文檔可參考:https://higress.cn/ai/mcp-quick-start/
調(diào)用高德 API,我們首先需要申請到高德 API 的 key。進(jìn)入高德開發(fā)者平臺(tái):https://console.amap.com/dev/index ,登陸之后,創(chuàng)建新應(yīng)用。
創(chuàng)建新應(yīng)用:
應(yīng)用創(chuàng)建完成之后,我們創(chuàng)建 key:
在控制臺(tái)看到 key,將 key 保存下來
接下來我們在Nacos中配置完成高德HttpApi的描述文件的配置以及高德域名信息配置。
首先我們通過持久化服務(wù)發(fā)現(xiàn)的能力將高德的域名注冊到 nacos 中,服務(wù)名為 amap,分組為 amap。
創(chuàng)建完服務(wù)之后,我們將高德的域名注冊到 Nacos 中。
通過以下命令注冊高德的域名。
curl -X POST 'http://127.0.0.1:8848/nacos/v1/ns/instance?serviceName=amap&groupName=amap&ip=restapi.amap.com&port=80&ephemeral=false'
檢查 amap 服務(wù)的實(shí)例數(shù)變?yōu)?。
在配置中心新建一個(gè)配置文件對高德的 API 進(jìn)行描述。
進(jìn)入配置中心,點(diǎn)擊新建配置。
創(chuàng)建 DataId 為 amap-mcp-tools.json分組為 amap 的配置項(xiàng),配置內(nèi)容為
{
"protocol": "http",
"tools": [
{
"name": "get_weather",
"description": "get weather",
"inputSchema": {
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "city adcode"
}
}
}
},
{
"name": "get_adcode",
"description": "get adcode via address",
"inputSchema": {
"type": "object",
"properties": {
"address": {
"type": "string",
"description": "address"
}
}
}
},
{
"name": "get_address_via_ip",
"description": "get address via ip",
"inputSchema": {
"type": "object",
"properties": {
"ip": {
"type": "string",
"description": "ip address"
}
}
}
}
],
"toolsMeta": {
"get_weather": {
"credentialRef": "amap-key.json",
"InvokeContext": {
"path": "/v3/weather/weatherInfo",
"method": "GET"
}
},
"get_adcode": {
"credentialRef": "amap-key.json",
"InvokeContext": {
"path": "/v3/geocode/geo",
"method": "GET"
}
},
"get_address_via_ip": {
"credentialRef": "amap-key.json",
"InvokeContext": {
"path": "/v3/ip",
"method": "GET"
}
}
}
}
這個(gè)配置描述了高德的 HTTP API 的相關(guān)參數(shù)信息,以及 Higress 進(jìn)行協(xié)議轉(zhuǎn)換時(shí)需要的上下文信息。再創(chuàng)建 DataId 為 amap-key.json, 分組為 amap 的配置項(xiàng)配置內(nèi)容為:
{
"type": "fixed-query-token",
"credentialsMap": {
"key": "key",
"value": "高德的api key"
}
}
在 Nacos 中進(jìn)行獲取出口 IP 服務(wù)配置
注冊一個(gè)獲取當(dāng)前出口 IP 的服務(wù)獲取當(dāng)前的 IP。以 ipinfo.io 為例,在服務(wù)管理中創(chuàng)建服務(wù) ip, 分組為 ip:
服務(wù)創(chuàng)建完成之后,向 Nacos 中注冊 ipinfo.io 的域名信息,執(zhí)行以下命令。
curl -X POST 'http://127.0.0.1:8848/nacos/v1/ns/instance?serviceName=ip&groupName=ip&ip=ipinfo.io&port=80&ephemeral=false'
注冊完成之后,就能在 Nacos 控制臺(tái)看到 IP 服務(wù)的下有一個(gè)實(shí)例了。
服務(wù)創(chuàng)建完成之后,我們在配置中心配置獲取 IP 服務(wù)的接口描述。創(chuàng)建 DataId ip-mcp-tools.json為 ,分組為 ip的配置,配置內(nèi)容為:
{
"protocol": "http",
"tools": [
{
"name": "get_current_ip_address",
"description": "get current caller's ip address",
"inputSchema": {
"type": "object",
"properties": {
"empty_args": {
"type": "string",
"description": "should be empty"
}
}
}
}
],
"toolsMeta": {
"get_current_ip_address": {
"InvokeContext": {
"path": "/",
"method": "GET"
}
}
}
}
配置創(chuàng)建完之后,就可以在 Cursor 中配置 Higress 作為 MCP Server 調(diào)用 Tool 了。
Cursor 的具體配置方法如下:首先安裝最新版本的 Cursor,安裝完成之后在 Cursor 的設(shè)置中,配置 MCP Server 的具體信息。
{
"mcpServers": {
"nacos-registry": {
"url": "http://localhost/registry/sse"
}
}
}
配置完成后可以看到 通過 Higress + Nacos 暴露的 MCP Server 提供的 Tool。
接下來,我們通過 Agent 模式向智能體,詢問今天天氣怎么樣。
可以看到,智能體先獲取了當(dāng)前主機(jī)的出口 IP,再通過 IP 獲取到具體的省市信息,再通過省市信息獲取到adcode,最終通過 adcode 獲取到當(dāng)前的天氣信息。整個(gè)過程中,用戶只需要將服務(wù)注冊在 Nacos 中,并且在 Nacos 中配置服務(wù)接口相關(guān)的描述信息即可,服務(wù)本身的代碼無需任何改造;
通過 Nacos+Higress 的方案實(shí)現(xiàn)0代碼改造將 Agent 連接到存量應(yīng)用,能夠顯著降低存量應(yīng)用的改造成本。當(dāng)前需要用戶手動(dòng)配置接口描述信息,后續(xù)可以通過工具化的能力將接口進(jìn)一步簡化,用戶只需要微調(diào)即可。現(xiàn)實(shí)中,我們有大量的存量服務(wù)和接口,按照接口到 Tool 的映射,我們將會(huì)有非常多的 Tool,當(dāng) Agent 拉取 Tool 列表并傳遞給模型的時(shí)候,將會(huì)有非常多的 token 消耗,并且模型的性能也可能會(huì)下降。那么如何在上下文中圈定有效的 Tool 列表,并返回給 Agent,將會(huì)是我們后續(xù)重要的演進(jìn)方向之一。除了Tool,MCP 協(xié)議還有 Prompt、Resource 等,MCP 社區(qū)也在持續(xù)更新協(xié)議,我們將在后續(xù)逐個(gè)支持,助力 MCP 生態(tài)的發(fā)展。
Nacos 3.0 架構(gòu)已將發(fā)布正式版本,定位 AI 應(yīng)用服務(wù)管理平臺(tái),包含了 MCP 動(dòng)態(tài)管理,也覆蓋通用 AI 生態(tài)場景,包含模型參數(shù)、Prompt 動(dòng)態(tài)模版等場景幫助業(yè)務(wù)動(dòng)態(tài)管理實(shí)時(shí)生效,Nacos 社區(qū)有完備的多語言客戶端生態(tài),成熟的 Python、GO、Rust、Java、NodeJS等主流語言的適配,幫你用最低的成本快速構(gòu)建AI應(yīng)用;
隨著 Nacos 演進(jìn),會(huì)推出越來越多 AI 相關(guān)的能力,希望大家來繼續(xù)參與 Nacos 社區(qū)共建,Nacos 3.0歡迎參與社區(qū)搭把手!“Nacos社區(qū)群4”群的釘釘群號: 12810027056“Nacos MCP 社區(qū)討論群”群的釘釘群號: 97760026913
原文轉(zhuǎn)載自:https://mp.weixin.qq.com/s/rSN-8quzA1JMeq_FWQnfTQ
APISIX-MCP:利用 AI + MCP 擁抱 API 智能化管理
C# 與 Windows API 交互的“秘密武器”:結(jié)構(gòu)體和聯(lián)合體
免費(fèi)強(qiáng)大的API開發(fā)和調(diào)試工具——Reqable
SpringBoot中6種API版本控制策略
更智能的Kubernetes AI推理路由:Gateway API推理擴(kuò)展
超越 API:MCP 如何成為 AI 時(shí)代的“萬能適配器”?
從零開始的機(jī)器學(xué)習(xí)實(shí)踐指南
2025年最佳語音轉(zhuǎn)文字API比較:一個(gè)報(bào)表31項(xiàng)指標(biāo)近200條數(shù)據(jù)
使用DeepSeek和Claude繪制出高質(zhì)量的SVG 圖片