掘金 人工智能 前天 14:29
企业AI落地实践(三):使用 AI 网关解决 AI Agent 与 LLM 的交互挑战
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文深入探讨了AI Agent在应用实践中与LLM及工具交互所面临的核心挑战,并提出了以AI网关和模型上下文协议(MCP)为核心的解决方案。AI网关通过统一代理LLM服务,解决了成本、幻觉、安全、高可用等多方面问题,并提供了灵活的路由和管理能力。MCP作为AI Agent的通用接口,标准化了与外部数据源和工具的连接,简化了开发工作量。文章详细阐述了MCP的运作机制、与Function Calling的区别,以及如何通过MSE Nacos构建企业级的MCP Registry,最终实现AI Agent技能池的统一管理和高效赋能,为企业级AI应用提供了可落地的实践路径。

💡 **AI网关统一管理LLM服务,解决生产级应用痛点**:AI网关作为LLM服务的一层代理,能够有效解决企业在LLM应用中遇到的成本平衡、模型幻觉、多模型切换、安全合规、高可用性以及闭源模型QPS/Token限制等一系列挑战。它通过模型服务管理、MCP管理、Agent管理、AI安全防护、AI插件和AI可观测等能力,为AI Agent提供了稳定、安全、高效的LLM交互基础。

🚀 **MCP协议标准化AI Agent工具连接,简化开发**:模型上下文协议(MCP)是一个开源协议,旨在让LLM能够以标准化的方式连接外部数据源和工具,解决了AI Agent在查找和解析接口方面的工作量。通过将复杂的函数调用抽象为客户端-服务器架构,MCP使得LLM能够智能地选择和调用外部工具,极大地提高了AI应用的灵活性和开发效率。

🗄️ **MSE Nacos构建企业级MCP Registry,赋能技能池管理**:文章提出使用MSE Nacos作为MCP Registry,构建一个集中式、安全、可管理的MCP服务仓库。MSE Nacos不仅兼容官方MCP Registry的标准,还提供了版本管理、安全管控、灰度发布等企业级能力,能够统一管理AI Agent的各种技能(MCP服务),解决AI Agent学习和管理技能的复杂性,降低成本和维护难度。

🔄 **Streamable HTTP协议优化MCP交互,提升兼容性**:为了解决传统SSE协议在企业级应用中的弊端,文章介绍了新的Streamable HTTP协议。该协议支持流式传输且不强制长连接,使得任何请求方都能以标准HTTP API的方式与MCP服务交互,打破了客户端壁垒,降低了AI Agent与MCP服务交互的开发成本,是MCP服务赋能AI Agent的关键。

🧩 **AI网关与MSE Nacos MCP Registry协同,打造灵活技能池**:通过AI网关代理MCP服务,并结合MSE Nacos MCP Registry,可以构建一个高度灵活的AI Agent技能池。AI网关可以对MCP服务进行策略管控、协议转换和重新组装,使得AI Agent能够轻松获取和使用多种工具。当需要添加新技能时,只需在MSE Nacos中注册新MCP服务并进行授权,AI Agent便能自动学会新技能,实现技能的动态扩展和管理。

作者:计缘

上一篇内容开始,我们开始具体分析 AI 应用实践过程中每一个环节的核心挑战,以及我们对应的解法和思路。

无论是编码方式构建 AI Agent,还是可视化流程式构建 AI Agent,一旦脱离了 LLM,就不存在 AI 一说了。所以 AI Agent 如何合理地、生产级地与 LLM 结合,将是我们今天文章的核心内容。

关注阿里云云原生公众号,后台回复“企业AI实践”获得我们整理的完整的企业级 AI 应用构建的最佳实践 PPT,配合系列文章一起食用,效果更佳。

AI Agent 大脑 - LLM

我们都知道现在大部分的 LLM 都是遵循 OpenAI 范式的请求方式,编码方式构建 AI Agent 和可视化流程式构建 AI Agent 虽然在使用方式上不同,但底层本质是一致的:

无论是上述哪种,都需要配置 LLM 服务的地址(www.xxx.com/v1/chat/com… LLM 服务用于认证鉴权的 API Key。所以 AI Agent 和 LLM 的交互本质上都是通过一层 Proxy,所有对 LLM 请求的管控、LLM 服务的管理都应该是这层 Proxy 协助做的事,这也正是 AI 网关做的事。

LLM 生产项目中必然会遇到的问题

在当前 AI 普惠的阶段下,有一个显著的特点就是用户们选择使用 LLM 的方式变多了,自主可控能力变强了。比如可以购买 GPU 资源自己部署大模型,可以在线下机房部署大模型,也可以使用阿里云的 PAI 或者函数计算 FC 来部署大模型。也可以使用各个模型托管平台,通过 API 的方式来使用大语言模型。但无论选择哪种方式,在 LLM 应用上生产项目的过程中,必然都会遇到一系列问题:

以上问题都是实实在在的企业在使用过程中遇到的问题,有些是模型自身问题,有些是部署架构问题,如果由企业一个一个去解决,复杂度和时间成本都是比较高的。所以就需要 AI 网关的介入来快速的,统一的收敛掉这些核心问题。

AI Agent 与 LLM 交互遇到的问题和普通服务与 LLM 交互的问题基本一致,所以这个章节我们主要讨论使用 AI 网关代理模型服务如何解决目前与 LLM 交互遇到的问题。

AI 网关简述

阿里云AI网关和阿里云云原生API网关同属一个内核。

AI 网关的能力主要包括六部分:

AI 网关代理 LLM

从上图架构中可以看出,AI 网关代理 LLM 方案的架构并不复杂,但是在 AI 应用上生产的过程中通常会遇到 10 个核心的问题,然而在上面这个并不复杂的架构下,通过 AI 网关都可以很有效地解决。接下来我们通过 AI Agent 视角、用户视角、业务场景视角来逐一分析和说明。

解决 AI Agent/用户管理失控的问题

现在大大小小的企业都在部署 LLM,想方设法融入到业务中,或日常工作中,那么站在运维团队或者类似中台团队的视角下,可能会有两个核心的问题:

第一个问题很好解决,OpenAI API 的协议基本已经是标准协议,目前市场面上大多数 LLM 都支持 OpenAI API 协议。但也有例外,比如 AWS Bedrock 上的模型,Gemini 是不遵循 OpenAI API 协议的。另外还有 Embedding 和 Rerank 模型,以及 Cosyvoice 和 SD、Flux 这类多模态模型都不是 OpenAI API 协议。所以对于一个通用 AI Agent 或者一个企业来说,更希望有统一的 Model API,可以统一管理和管控不同类型模型的 API。

目前上述这些类型的模型,AI 网关都支持代理,所以可以在同一个模型 API 管控平台上,统一管理和管控不同类型的模型 API。

对于第二个问题,AI 接口一旦暴露出去,基本上不可能只让一小部分人知道,所以需要对访问 LLM 服务的用户做以限制,只让能访问的人访问,不能访问的人即便知道了接口也无法访问。

所以可以使用 AI 网关具备的消费者认证的能力来解决这个问题。

核心逻辑是将一个人或一个 AI Agent 抽象为消费者的概念,可以对消费者做权限配置,既可以访问哪些模型 API,消费者下可以生成不同类型的 API Key,请求接口时需要带着 API Key,然后基于权限规则去校验 API Key 的合法性。通过这种就可以精细化地管理访问 AI 接口用户了。

消费者认证的核心价值:

典型鉴权场景与 API Key 应用场景:

解决灵活路由模型的问题

灵活路由模型在实际项目中对应着两类问题:

AI 网关支持一个模型 API 下配置多个模型服务的能力,每个模型服务通过 Glob 语法来匹配模型名称,从而实现上述的第一个场景。

除此以外,AI 网关的模型 API 支持基于不同的匹配规则创建不同的路由,可以基于请求 Header 或者请求参数中的参数值做匹配规则。

这样,我们可以通过 Header 中的 x-higress-llm-model 和 x-mse-customer 这两个标识作为路由匹配规则,实现通过消费者和模型名称路由的功能。

然后再配合模型 API 的限流策略,针对同一个消费者做 Token 限流,从而实现上述的基于不同的用户和模型做 Token 配额管理的需求。

再延伸一下模型路由的核心价值:

解决闭源模型&模型托管平台 QPM/TPM 限制的问题

像 ChatGPT,豆包这类闭源 LLM,或者百炼这种托管 LLM 平台,都是以提供 API 的方式供大家使用 LLM 的能力,但是受限底层 GPU 资源的压力,以及整体平台的稳定性,每个用户都有请求 QPS 的最大限制(基于平台的 API Key 的维度),且上调比较困难。所以很多企业都有这个核心问题:如何突破这个限制问题?

这个问题有两类解决方案:

多 API Key 管理

AI 网关在 LLM 服务级别支持多 API Key 管理的能力,每次请求会轮循取一个 API Key 向后端模型服务请求。并且 API Key 可以动态新增和删除,极大减轻了用户自己维护多个 API Key 的问题。

结果缓存

AI 网关提供了结果缓存的预置策略,可以将请求和响应的内容存储到 DashVector 做语义化缓存,或者存储到 Redis 做精确缓存,从而提升推理效率。

语义化缓存

支持用户自己选择用于做 Embedding 的模型,需要用户实现开通 DashVector 服务。并且支持只取最新提问和整合历史提问两种缓存键生成策略。语义化缓存的适用范围更宽泛一些。

精确缓存

精确缓存不涉及到 Embedding,是把用户问题和 LLM 的响应直接存储到 Redis 中。精确匹配的适用范围更窄,只适合非常垂直的一些场景。

解决模型服务高可用的问题

现在 GPU 的资源是昂贵的,所以无论是自购 GPU 部署 LLM 还是模型托管平台都不会基于流量峰值去储备资源,所以才会有上文中的 QPM/TPM 限制的情况。但是站在企业业务健壮性的角度来看,如何在成本、稳定性、健壮性之间找到一个平衡点是更需要考虑的事。比如,当主力模型是 PAI 上部署的 DS R1 671B,但 GPU 资源并不是基于流量峰值储备的,所以当高峰期时,DS 服务会请求失败,有什么办法可以保证业务健壮性?

这类问题可以有两种做法,并且可以搭配使用:

LLM 服务 Fallback

AI 网关在模型 API 维度支持 LLM 服务的 Fallback 机制,并且可以配置多个 Fallback LLM 服务。当主 LLM 服务因为各种原因出现异常,不能提供服务时,AI 网关侧可以快速将请求 Fallback 到配置的其他 LLM 服务,虽然可能推理质量有所下降,但是保证了业务的持续性,争取了排查主 LLM 服务的时间。

Token 维度限流

除了传统的 QPS 限流降级以外,AI 网关支持更贴合 LLM 推理场景的 Token 维度的限流能力。可以针对模型 API 级别配置一个下游 LLM 服务可以承载的请求量级,在一定程度上保证了整体业务的健壮性,至于被限流的请求,可以返回一些人性化的信息,比如之前 DeepSeek 官网的服务器繁忙。

我们可以再延伸一下基于 Token 维度限流的其他核心价值:

解决安全合规问题

AI 应用场景下的内容安全问题是大家都很重视的核心问题,模型托管平台通常都自带好几层内容安全审核机制,但是我们在 IDC 部署或者在 PAI 部署的,如何能方便接入内容安全审核服务?

AI 网关中的模型 API 集成了阿里云的内容安全防护服务和 AI 安全护栏能力,可以一键开启,支持请求内容检测和响应内容检测。不过安全防护的规则还是要在内容安全服务侧配置。比如“树中两条路径之间的距离”这个可以让 LLM 无限推理的问题,从内容安全的常规规则来看,它是合规的,但是它却能对 LLM 服务的稳定性造成隐患,所以在 AI 网关开启了内容安全防护后,便可以快速在内容安全防护服务中添加自定义规则来杜绝这类有潜在风险的请求信息。

延伸到内容安全在 AI 领域的核心价值有五类:

解决大语言模型幻觉的问题

有些个人用户或者企业用户可能会发现部署了 DeepSeek R1 671B 的模型,但推理的结果和 DS 官网推理的结果有差距,似乎不满血?

推理的结果和 DeepSeek 官网推理的结果有差距是因为 DeepSeek 官网开启了联网搜索。DeepSeek R1 671B 的模型推理能力是很强,但训练的数据也是有限的,所以要解决幻觉还是需要在推理前先搜索和处理出比较确切的信息后,再由 DeepSeek R1 推理,所以联网搜索是非常关键的。目前模型托管平台提供的 DeepSeek R1 API 和自己部署的 DeepSeek R1 都需要自己实现联网搜索。

其实不只是 DeepSeek,目前除了百炼上的通义千问 Max 以外,其他的模型在 API 层面都不支持联网搜索,即使 ChatGPT 是最早推出联网搜索功能的,但 OpenAI 的 API 协议目前也还没有支持联网搜索。

AI 网关目前在模型 API 维度支持了夸克的联网搜索能力,提供多种搜索策略,可将搜索结果自动如何进输入 Prompt,无需用户对后端 LLM 服务做额外处理,并且我们对输入的问题也通过 LLM 做了意图识别和问题拆分,避免了很多无效的联网搜索,以及提高搜索内容的精准度。

LLM 服务动态负载

很多使用 PAI 或者 ACK 部署 LLM 的用户,经常会遇到 GPU 服务负载不均的情况,这也是AI领域中比较常见的问题。也有一些企业是自研或魔改 vllm/sglang/trt 推理框架,在模型网关层从推理框架侧获取到 GPU 服务的执行状态以及 GPU 资源的使用情况,从而判断做动态负载。

目前 AI 网关内部已经实现了基于 vLLM 和 SGLang 两个推理框架提供的监控指标来动态负载 LLM 服务的能力,AI 网关可以基于这些指标来决定路由流量到哪个节点,帮助用户提升 GPU 的资源利用率,从而优化成本和提升推理效率。

模型 API 可观测

可观测是任何一个领域都必不可少的需求,但是 AI 场景的可观测和传统场景的可观测是有很大区别的,监控和关注的指标都是不同的,AI 网关结合阿里云日志服务和可观测产品实现了贴合 AI 应用业务语义的可观测模块和 AI 观测大盘,支持比如 Tokens 消费观测,流式/非流式的 RT,首包 RT,缓存命中等可观指标。同时所有的输入输出 Tokens 也都记录在日志服务 SLS 中,可供用户做更详细的分析。

AI 网关模型 API 的可观测核心能力:

AI Agent 使用 LLM 方式总结

将近 3 个月,我们交流了上百家客户,无论是编码方式构建 AI Agent 还是流程方式构建 AI Agent,使用 LLM 时遇到的问题基本上逃不出我上面总结的那些问题,所以使用 LLM 的最佳实践就是通过 AI 网关代理 LLM 这种方式,在 AI 网关的模型 API 上根据业务需求做各类管控,在稳定性、灵活扩展性(适配业务多样性)、成本优化等方面帮 AI Agent 的大脑具有足够的健壮性。

AI Agent 技能 - MCP

上文中解析了 AI Agent 的第二个核心组件是工具,它为 AI Agent 提供外部能力,各类业务服务,数据库服务,存储服务等等。即执行 LLM 做出的决策。

然而,无论是和各种 Tools(各类业务服务接口)交互,还是和各类存储服务接口交互,都是通过 HTTP 协议的,和各类 Tools 的交互都需要逐一了解它们的返回格式进行解析和适配。当一个 AI 应用包含多个 AI Agent 时,或者一个 AI 应用需要和多个业务服务接口和存储服务接口交互时,整体的开发工作量是很大的:

直到 MCP 的出现,让我们看到真正解决 AI Agent 使用和管理工具复杂度的问题。

MCP 是什么

MCP 是模型上下文协议(Model Context Protocol)的简称,是一个开源协议,由 Anthropic(Claude 开发公司)开发,旨在让大型语言模型(LLM)能够以标准化的方式连接到外部数据源和工具。它就像 AI 应用的通用接口,帮助开发者构建更灵活、更具上下文感知能力的 AI 应用,而无需为每个 AI 模型和外部系统组合进行定制集成。MCP 被设计为一个通用接口,类似于 USB-C 端口,允许 LLM 应用以一致的方式连接到各种数据源和工具,如文件、数据库、API 等。

MCP目前一共有 3 个核心概念:

MCP 的运作机制

要真正理解 MCP 是什么,我们需要了解它的运作机制,然后你就能知道 MCP 的调用方式和传统的 HTTP 调用方式有什么不同,可能也能隐约体会到为什么我说 MCP 可以让 AI Agent 进入第二阶段。

如上图所示,一次基于 MCP 的调用,一共有 6 个核心的步骤。我们先拟定一个前提:

调用步骤解析:

在 MCP 的整个调用过程中有一个非常核心的点就是 MCP Server 以及 MCP Tool 的信息。从第一步,第二步可以看出,这个信息非常关键,是它让 LLM 知道了该如何解决用户的问题,这个信息就是 MCP 中最重要的 System Prompt,本质上就是 PE 工程。

MCP System Prompt

MCP 不像传统的协议定义,它没有一个确定的数据结构。它的核心是通过自然语言描述清楚有哪些 MCP Server,承担什么作用,有哪些 MCP Tool,承担什么作用,然后让大语言模型通过推理去选择最合适的 MCP Server 以及 MCP Tool。所以它的核心本质上还是提示词工程。

上面两张图是 Cline(一个 MCP Client)中的 System Prompt,可以清晰的看到它对 MCP Server 和 MCP Tool 都有明确的描述。

上图是流程中的第一步,将用户的问题和 System Prompt 一起发送给 LLM 的内容。

上图是流程中的第二步,LLM 返回了解决用户问题明确的 MCP Server 和 MCP Tool 信息。

MCP 和 Function Calling 之间的区别

看到这,我想大家应该对 MCP 是什么有一定感觉了。MCP 是不是解决了找接口和解析接口的问题?因为这两个工作都交给了 LLM。

那么可能有小伙伴会问,MCP 和 LLM 的 Function Calling 又有什么区别呢?核心区别是是否绑定模型或模型厂商:

如上图所示,LLM Function Calling 需要 LLM 为每个外部函数编写一个 JSON Schema 格式的功能说明,精心设计一个提示词模版,才能提高 Function Calling 响应的准确率,如果一个需求涉及到几十个外部系统,那设计成本是巨大,产品化成本极高。而 MCP 统一了客户端和服务器的运行规范,并且要求 MCP 客户端和服务器之间,也统一按照某个既定的提示词模板进行通信,这样就能通过 MCP 加强全球开发者的协作,复用全球的开发成果。

MCP 的本质和挑战

根据上文的一些列解释,我们可以总结一下 MCP 的本质:模型上下文协议(Model Context Protocol)并不是一个确定的数据格式或数据结构,它是描述 MCP Server/MCP Tool 信息的系统提示词和 MCP Server 与 LLM 之间的协同关系的结合,解决的是找接口和解析接口的问题。

明确了 MCP 本质之后,将其带入到企业级生产应用中,你就会发现,这两个核心点上会有很多挑战,或者说不足。

描述 MCP 信息的系统提示词的挑战
AI Agent(MCP Client)与 MCP Server 之间协同关系的挑战

MCP Registry 定义及特性

Anthropic 对 MCP Registry 的官方定义:The MCP Registry service provides a centralized repository for MCP server entries. It allows discovery and management of various MCP implementations with their associated metadata, configurations, and capabilities.

从官方的定义中可以抽象出两个核心定义:

Anthropic 公布的 MCP Registry 的特性:

使用 MCP Registry 构建 AI Agent 技能池的优势

我们还是将 AI Agent 类比为角色扮演游戏中的角色,目前绝大多数的游戏,无论哪种类型,都有自己的一套技能系统,只是复杂度的差别而已。既然是统一的技能系统,那么意味着无论是低阶技能还是高阶技能,玩家都是在同一个地方去查看技能,游戏角色都是在同一个地方去学习、升级、管理技能,我还没见过哪个游戏学习技能要去不同的地图,在不同的 NPC 处学习。

回到 MCP 范式,目前会有 2 个问题:

所以 Anthropic 定义了 MCP Registry,目的是就期望解决以上两个问题,从而让 AI Agent 在获取 MCP 时,只需要从一个地方找 MCP 服务即可。

从我们和 Anthropic MCP 团队的沟通交流来看,他们的野心是想构建一个类似 Maven 一样的大中心 MCP Registry。

但 Anthropic 在定义 MCP Registry 时又忽略了一些企业级的能力,所以这是需要 MSE Nacos 来补足的,也是 MSE Nacos 作为 MCP Registry 的核心优势。

MSE Nacos 3.0 MCP Registry 的优势

我们团队是中间件开源最多的团队,比如 Nacos,Higress,Sentinel,RocketMQ,Seata 等,并且还维护着 Spring Cloud Alibaba,Spring AI Alibaba,Dubbo 等这些开源开发框架,在微服务架构领域有着丰富的经验。所以在 MCP Server 和 MCP 提示词统一管理这个点上,天然的就想到了微服务领域里基于 Nacos 做服务注册发现和配置统一管理的模式,我们将其转嫁到了 MCP 范式,大家可以想一下以下这些对应关系:

我们拿 MSE Nacos 现有的的功能和 Anthropic 对 MCP Registry 的定义做一下对照:

MSE Nacos 的现有能力 和 Anthropic 对 MCP Registry 的定义几乎完全一致。除此以外,MSE Nacos 作为 MCP Registry 还有其他更贴近企业级的增量价值:

所以在 MSE Nacos 这个产品中,我们做了一系列增强 MCP 的能力,使 MSE Nacos 成为统一管理 MCP Server 的 MCP Register(MCP Server 注册/配置中心),是 AI Agent 技能池的的核心组件。

MSE Nacos 3.0 定义 MCP Registry 超集(企业级 MCP Registry)

Anthropic 对 MCP Registry 虽然有标准,但目前核心只关注在统一公共数据源和定义 MCP 服务元数据规范这两点。官方也明确了有一些问题是不会去解决的,比如:

所以 MSE Nacos 3.0 带来的 MCP Registry 是官方 MCPRegistry 的一个超集,除了兼容官方定义的 MCP 元数据格式、和 API 外,MSE Nacos 3.0 同时提供了结合AI网关,HTTP 转换 MCP 的能力,结合阿里云 KMS 提供 MCP 服务敏感数据加密的能力,同时结合目前开源的 Nacos router 也可以实现智能路由检索的能力,解决多 MCP 服务检索 token 消耗量大的问题。

AI 网关 + MSE Nacos MCP Registry 构建 AI Agent 技能池的优势

通过这种方式构建的技能池,当需要 AI Agent 学习新技能时,不需要 AI Agent 做任何改动,你只需要在 MSE Nacos 中创建新的 MCP 服务,通过 AI 网关同步,编辑组装后的逻辑 MCP 服务,添加新的工具,然后向 AI Agent 对应的消费者里增加新工具的授权。然后你的 AI Agent 就自动学会了新的技能。

Streamable HTTP 的优势

MCP 范式默认的传输协议是 SSE(Server Sent Event),本质上是一种长连接,有状态的传输协议。这种协议在企业级应用中有很多弊端:

好在 MCP 官方也意识到了该问题,所以在 3 月下旬,发布了新的 Streamable HTTP 协议。Streamable HTTP 改变了 MCP 的数据传输方式,让协议变得更灵活、更易用、更兼容:

简单来说,原来的 MCP 传输方式就像是你和客服通话时必须一直保持在线(SSE 需要长连接),而新的方式更像是你随时可以发消息,然后等回复(普通 HTTP 请求,但可以流式传输)。

这里大家可以思考一下:

所以 Streamable HTTP 传输协议是 MCP 服务赋能 AI Agent 的基石。而在上文中,大家应该不难发现,无论是 AI 网关直接转换,还是基于 MSE Nacos MCP Registry 转换,都是支持 Streamable HTTP 的,甚至可以让一个不支持 Streamable HTTP 传输协议的三方 MCP 服务具备 Streamable HTTP 的能力。

对 MCP 服务做灵活的策略管控

AI 网关侧对 MCP 服务的代理,无论是原生 MCP 服务的代理,还是 HTTP 服务转换而来的 MCP 服务,都可以复用 AI 网关内核的插件机制,可以对 MCP 服务灵活的设置预置策略或插件,如果有更贴近业务的需求,还可以开发自定义插件来实现。通常企业会使用插件机制实现 MCP 服务的限流降级,一方面做后端服务安全保障,另一方面是实现 MCP 服务的成本管控(三方原生 MCP 服务)。

MCP 范式下的身份认证和权限管控

身份认证和权限管控在任何架构,任何业务场景下都是刚需,在 MCP 范式下也不例外,这里有三个层面的权限管控:

MCP 服务和工具数量的使用权限

大家设想一下,当传统业务可以 0 代码转换为 MCP 服务后,注册在 Nacos 中的 MCP 服务和工具肯定会有很多,从业务领域来说,可能有和财务相关的 MCP 服务,有和销售相关的 MCP 服务,有和售后服务相关的 MCP 服务。在返回 MCP 服务和工具信息时不可能将所有信息都返回,肯定只能返回 AI Agent(Client)身份有权使用的 MCP 服务信息。

目前 MCP 服务和工具的数量管控,主要通过AI网关的消费者认证体系来实现,每个消费者可以授权 MCP 服务及工具,然后将消费者分配给某 AI Agent(既 AI Agent 从 AI 网关请求 MCP 服务信息时 Header 里需要带着消费者的 API Key),那么该 AI Agent 能获取到哪些 MCP 服务和工具的信息就可以被灵活的管控和配置了。

MCP 服务和工具的鉴权认证

MCP 服务自身的鉴权认证同样分原生 MCP 服务和 HTTP 服务转 MCP 服务两种类型来说:

MCP 服务和工具的数据权限

当 MCP 服务是数据类服务时会比较常见,比如 Mysql MCP Server,Redis MCP Server 等。权限会下探到库级别,表级别。在这种场景下,AI 网关可以通过插件机制,改写或增加 Request Header 的值,结合 MSE 治理将 Header 的值透传下去,然后在服务内部进一步做数据权限管控。

我举例一个通过这种方式实现的数据库读写分离的场景:

如何构建 MCP 服务

Anthropic 提供了各编程语言的 MCP SDK,目前支持 C#,Java,Kotlin,Python,Ruby,Swift,TypeScript 这 7 种语言。如果是一个初创公司,没有基础服务的积累,那么使用 MCP SDK 开发新的 MCP 服务是合理的。但是如果是一个存在了几年甚至十几年的公司,已经积累了很多业务服务,希望这些业务服务的能力能作为 AI Agent 的左膀右臂,那么使用 MCP SDK 将这么多的存量业务重新开发一遍,显然是不可能的,况且 MCP SDK 现在还没有支持 Go 语言。

所以 MCP 服务的类型,从构建的角度,可以分为两类:

基于函数计算 FC 构建原生 MCP 服务

众所周知,AI Agent 里涉及到 LLM 推理的场景,相比传统业务,其实是相对稀疏调用的场景。所以这里可以延伸出两个问题:

在所有的计算产品中,函数计算 FC 这种 Serverless FaaS 类型的计算产品,在资源粒度、弹性策略、弹性效率方面都是最适合稀疏调用场景的。和上文中作为 AI Agent 的运行时的逻辑是一致的。

函数计算 FC 目前支持了 Python、NodeJS 和 Java 三种语言的 MCP 运行环境(其他语言的 MCP 运行环境也马上会支持)。用户选择 MCP 运行环境创建函数后,只需要编写 MCP 工具的业务逻辑即可,不需要考虑如何使用 MCP SDK。并且 AI 网关和函数计算 FC 有深度集成,可以天然适配 AI Agent 开发的新范式。

阿里云百炼平台的 MCP 服务,底层运行时使用的就是函数计算 FC。

在 FunctionAI 的项目中,可以直接创建 MCP 服务。

这里创建的 MCP 服务底层就是基于函数计算 FC 实现的,所以除了 MCP 需要的传输协议类型、认证、语言(目前支持 Java、Python、NodeJS)外,还可以灵活的设置运行该 MCP 服务的资源规格大小,以及弹性策略、网络配置等。

创建好 MCP 服务后,我们只需要填写业务代码即可。

函数计算 FC 构建 MCP 服务的成本优势

基于函数计算 FC 构建的 MCP 服务在弹性效率方面可以从两个维度来看:

函数计算 FC 的实例规格从 0.05C 128MB 到 16C 32GB 不等(也可以支持更大的规格),有几十种规格的组合方式,可以灵活根据不同 MCP 服务承载的业务选择合适的资源规格。另外,在 AI 应用中,尤其是流程式构建的模式中,除了带有 Palnning 的 AI Agent 外,大多数 AI Agent 的职责都相对单一,计算逻辑都不复杂,所以都可以用较小资源规格的函数承载。资源规格小,在资源调度,弹性效率方面自然就会有优势。

再看函数计算 FC 的弹性机制,它是完全按照请求弹性的,有多少 QPS,就拉起对应数量的实例,并且实例可以复用,当 QPS 降下来后,空闲的实例会自动释放,整个过程完全不需要用户介入参与。在默认按请求弹性的基础上,用户还可以自行设置按照时间定时弹,或按照指标阈值扩容的策略,进一步满足复杂多变的业务场景,做到资源成本最优。

除此以外,Serverless 计算产品,不需要用户关注底层 IaaS 资源,几乎没有运维的接入,由研发就可以快速创建函数拉起资源做业务开发和测试,所以大幅度提升了研发运维的效率,映射到成本方面,虽然不好量化,但是人力成本,时间成本也是不容忽视的。

函数计算 FC 构建 MCP 服务的可观测体系

函数计算 FC 有完善的可观测体系,也就意味着,基于函数计算 FC 构建的 MCP 服务同样具备指标、链路、日志三个维度的可观测能力。

通过这套可观测体系,用户可以清晰地了解每个 MCP 服务的各类运行状态。

HTTP 服务转 MCP 服务

在这段时间我们和企业客户的交流来看,几乎所有的企业都认为最有价值的是使用 AI 增强、提升现存业务,使其变成一个 AI 应用或 AI 加持的业务,而不是完全新开发一套 AI 应用。所以开发一个 AI 应用或者做现存业务的 AI 增强,AI Agent 是需要和大量现存业务做交互的,MCP 虽然是统一的协议,但将现存业务重构为 MCP 服务的成本是非常高的,并且目前支持的开发语言有限,像 Go,PHP 都没有对应的 MCP SDK,所以会让很多企业想拥抱 MCP,但又无从下手。

网关最擅长做的事情就是协议转换,所以 AI 网关的第二个核心功能就是 MCP 服务管理,包括:

在这个章节,我们主要讨论如何将普通的 HTTP 服务 0 代码改造的转为 MCP 服务,这种转换有两种方式。

AI 网关直接转换

服务接入

AI 网关支持所有主流的服务来源发现方式,可以将部署在各种计算资源上的传统服务接入进 AI 网关:

创建 MCP 服务

当后端服务接入 AI 网关后,便可以在 MCP 管理中创建 MCP 服务,选择接入的后端服务。

创建好 MCP 服务后,因为普通服务中有的是各个接口或方法,没有工具的概念,所以第二步是需要对该 MCP 服务创建工具,也就是将该 MCP 服务的工具和代理的普通服务的接口做映射关系。

配置好工具后,这个 MCP 服务其实就已经是可用状态了,用户可以通过调试功能对该 MCP 服务做测试。AI 网关负责做普通服务接口和 MCP 服务工具映射关系的协同和转换,并且同时提供 SSE 和 Streamable HTTP 两种传输协议。

除此以外,用户可以基于业务需求对该 MCP 服务添加更丰富的插件和策略,比如对 MCP 服务做限流降级保护、设置超时策略、设置 IP 黑白名单、数据脱敏等等。如果我们预置的策略和插件依然不满足用户需求,那么用户可以开发自定义插件上传到 AI 网关使用。所以,整体灵活性和可扩展性是非常强的。

从整个流程大家应该不难看出,通过AI网关将一个传统的现存服务转换为 MCP 服务不需要修改任何业务代码,只需要在控制台白屏化的操作即可,唯一的工作量就是编写接口和工具映射的那个 Yaml 文件。针对这一唯一工作量,我们也还在持续探索,找到更好的帮用户自动生成 Yaml 的方案。

由 MSE Nacos MCP Reristry 转换,AI 网关动态发现

另一种更加推荐的企业级 HTTP 服务转换 MCP 服务的方式是引入 MSE Nacos 作为 MCP Registry,无论是原生 MCP 服务还是普通服务,都由 MSE Nacos 作为 MCP 注册中心统一管理。普通服务和 MCP 服务之间的映射关系由 MSE Nacos 完成,AI 网关和 MSE Nacos 深度集成,动态发现注册在 MSE Nacos 中的 MCP 服务,然后代理暴露出去。

服务注册

将服务注册进 Nacos 有两种方式:

我们来看看白屏化手动注册的方式,相对比较直观。注册服务这部分和之前使用 Nacos 的方式一样,创建服务,然后在服务中创建实例。

注意:上图的 IP 字段可以填写 IP,也可以填写域名。

创建 MCP 服务

后端服务注册好之后,在 MCP Registry 功能中创建 MCP 服务,这里同样支持 HTTP 服务转 MCP 服务,和直接创建原生 MCP 服务。

选择 HTTP 转化 MCP 服务后,展现出来的基本信息和使用 AI 网关比较类似,MCP 服务的核心元素都一样,但唯一的一个区别是多了服务版本,这就是上文中我说的企业级的特性之一。

然后是给该 MCP 服务添加工具,工具和参数的基本信息做了白屏化的配置方式,工具和后端服务接口的映射关系(requestTemplate)配置还是黑屏化的方式,如上图所示。

至此一个简单的 MCP 服务在 MSE Nacos MCP Registry 中就创建完成了,我们可以回到 Nacos 的配置管理/配置列表模块,可以看到每个 MCP 服务都有三个对应的配置信息。

Nacos 作为主流的注册配置中心,配置信息是支持加密的,所以这也就意味着 MCP 服务工具的 Prompt 也都是加密存储的,这也企业级的特性之一。

MCP 服务版本管理

在我们和企业客户的交流过程中,几乎和所有的客户都能达成一个一致的观点,那就是在 MCP 范式下,发布一个 MCP 服务的新版本,不一定要修改该 MCP 服务后端服务的代码,而大概率只需要调整 MCP 服务工具的描述(Prompt)即可,因为同一个 MCP 服务工具的同一个参数,修改了描述后,对于 LLM 来说,可能就已经变成了服务于另一个领域的 MCP 工具了。并且在我们协助客户的落地过程中,调整测试 MCP 服务工具的描述(Prompt)本质上就是一个 PE 工程,所以 MCP 服务的版本管理至关重要。

我们编辑刚才创建的 MCP 服务,修改其版本号。

然后修改工具参数的描述,将“风控根据项目 wbs 查询开工项目信息,成本跟踪人员信息”,改为“风控根据项目 orderId 查询开工项目信息,成本跟踪人员信息”。

此时,该 MCP 服务就出现了多个版本,可以灵活切换不同的版本。无论是做 MCP 服务的灰度,还是在调试测试阶段都是非常有用的。

AI 网关动态发现

MSE Nacos 作为 MCP Registry 的核心能力是 MCP 服务的统一管理,包括 MCP 服务版本管理和工具 Prompt 加密管理,对外暴露 MCP 服务和针对 MCP 服务添加策略/插件、消费者认证等还是需要通过 AI 网关,所以 AI 网关和 MSE Nacos 做了深度集成来实现这一企业级的链路。

首先在 AI 网关中,需要将 MSE Nacos 对应实例作为服务来源。

然后在 MCP 管理模块中,同步 Nacos MCP 服务。

在 MCP 管理列表中会有明确的标识,方便用户识别每个 MCP 服务的构建方式。

AI 网关中,从 MSE Nacos MCP Retistry 动态发现的 MCP 服务,同样可以对其设置各类策略和配置各种插件、支持 SSE/Streamable HTTP 两种传输协议、消费者认证、查看日志等功能。

构建 MCP 服务总结

综上所述,构建 MCP 服务有两种方式:

在 AI 时代,随着模型和应用侧的快速演化,对于推理过程,成本和性能显得尤为重要,而端到端的 AI 可观测是其中至关重要的一环,下一篇,我们会聊聊 AI 应用可观测体系的建设。

关注阿里云云原生公众号,后台回复“企业AI实践”,即可获得完整的企业级 AI 应用构建的最佳实践 PPT。

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

AI网关 LLM MCP AI Agent MSE Nacos 模型管理 工具集成
相关文章