0

0

Solon AI Remote Skills(Mcp Skill):开启分布式技能的“感知”时代

聖光之護

聖光之護

发布时间:2026-01-26 19:51:15

|

227人浏览过

|

来源于php中文网

原创

solon ai remote skills(mcp skill):开启分布式技能的“感知”时代

引言:AI Agent 的“最后一公里”挑战

在 AI Agent 的工程实践中,我们正在经历一场从“本地集成”到“云端插件化”的变革。过去一年,行业见证了 Model Context Protocol (MCP) 的崛起,它成功解决了大模型与外部工具跨进程连接的“协议标准化”问题。然而,随着企业级场景的深入,开发者们发现:仅仅实现连接是不够的。

今天,Solon AI 3.9.0 正式提出 Remote Skills(远程技能) 的概念。这一特性并非对 MCP 的简单封装,而是将原本静态的、被动触发的 MCP 工具集,进化为具备业务感知力、生命周期管理和动态路由能力的分布式智能单元。

一、 从 MCP Tools 到 Remote Skills 的跨越

传统的 MCP 交互模式本质上是一种“静态广播”。服务端一旦启动,便会将所有工具(Tools)全量暴露给大模型。这种模式在单机实验环境下运行良好,但在复杂的多租户、高安全要求的企业级业务中,会引发三个致命的工程痛点:

1. 上下文噪音(Context Noise)与 Token 膨胀:

大模型的上下文窗口是昂贵且有限的。如果一个系统拥有 500 个工具,即使是简单的闲聊或基础查询,传统的 MCP 也会将 500 个工具的 JSON Schema 全部塞进 System Prompt。这不仅白白浪费了大量 Token 成本,更严重的是,过多的干扰信息会导致模型产生“注意力分散”,降低推理的准确性。

2. 权限真空(Security Risks)与越权调用:

在 MCP 的原生架构中,模型对工具的可见性是“全量”的。模型无法自发地根据当前用户的角色动态隐藏敏感操作。例如,一个实习生询问订单信息,模型可能会在推理过程中尝试调用 OrderCancel(取消订单)工具。虽然执行层可以拦截,但这种“可见即可试”的模式本身就是巨大的安全隐患。

3. 行为失控(Instruction Gap):

工具(Tools)描述了“能做什么”,却无法告知模型在特定背景下“该怎么做”。例如,同一个“查询利率”工具,在深圳分行和上海分行的业务逻辑中可能有着截然不同的前置约束,静态的 MCP 协议无法传递这种动态的“行为准则”。

Remote Skills 的核心思想是: 将远程工具包装在 Skill 生命周期之中,使其具备感知当前 Prompt 上下文的能力,从而实现从“静态描述”到“动态契约”的跃迁。

二、 核心机制:感知、挂载与动态路由

Solon AI 通过在 McpSkillClient(客户端代理)与 McpSkillServer(服务端实现)之间建立一套上下文协商机制,赋予了远程技能“思考”的能力。这主要体现在以下三个层面:

1. 智能准入 (isSupported): 从“全量加载”到“按需激活”

Remote Skill 不再是盲目激活。在会话开始前,服务端会解析当前的 Prompt 属性(如租户 ID、用户画像、当前意图属性)。通过执行 isSupported 逻辑,服务端可以决定当前技能是否参与此次对话。

Cliclic AI
Cliclic AI

Cliclic商品背景图编辑器是一款功能强大的AI工具,帮助用户快速生成具有吸引力的商品图背景。

下载
  • 工程价值:只有当对话涉及“财务报表”且用户具备“审计员”权限时,财务技能才会被挂载到内存图中。这从物理层面消除了非相关工具的干扰。

2. 动态指令注入 (getInstruction): 赋予工具“业务灵魂”

技能不再仅仅是 API。挂载时,服务端会通过 getInstruction 根据上下文动态下发指令约束。这种机制允许开发者在不修改模型提示词的情况下,实时调整 Agent 的行为逻辑。

  • 示例:当感知到请求来自移动端,服务端注入:“回复请保持简洁,尽量使用 Markdown 表格,不要输出超过 200 字。”

3. 三态能力路由 (getToolsName): 精细化权限隔离

这是 Remote Skills 最具突破性的功能。服务端可以根据请求者的身份,动态决定下发哪些工具名称,实现“工具级的 RBAC”:

  • 全量授权:针对超级管理员暴露所有调试和管理工具。
  • 精准过滤:针对普通业务员,隐藏 Delete  BatchUpdate 类的高危工具。
  • 完全拦截:当检测到异常请求(如 IP 属地异常)时,即便技能已激活,也可瞬间关闭所有工具访问权限。

三、 实战:构建具备“自省”能力的远程技能

1. 客户端:极致简化的集成体验

在 Solon AI 框架中,McpSkillClient 将复杂的远程通信和协议转换透明化了。开发者只需关注业务属性(Attrs)的注入。

<span style="color:#a626a4">import</span> org.noear.solon.ai.chat.ChatModel;
<span style="color:#a626a4">import</span> org.noear.solon.ai.chat.prompt.Prompt;
<span style="color:#a626a4">import</span> org.noear.solon.ai.mcp.McpChannel;
<span style="color:#a626a4">import</span> org.noear.solon.ai.mcp.client.McpClientProvider;
<span style="color:#a626a4">import</span> org.noear.solon.ai.mcp.client.McpSkillClient;

<em>// 1. 构建 mcp 客户端</em>
<span style="color:#986801">McpClientProvider</span> <span style="color:#986801">mcpClient</span> <span>=</span> McpClientProvider.builder()
                .channel(McpChannel.STREAMABLE)
                .url(<span style="color:#50a14f">"http://localhost:8081//skill/order"</span>)
                .build();
                
<em>// 2. 构建带有深度业务属性的提示词</em>
<span style="color:#986801">Prompt</span> <span style="color:#986801">prompt</span> <span>=</span> Prompt.of(<span style="color:#50a14f">"帮我处理 A001 订单"</span>)
                .attrPut(<span style="color:#50a14f">"tenant_id"</span>, <span style="color:#50a14f">"solon_cloud"</span>)
                .attrPut(<span style="color:#50a14f">"user_role"</span>, <span style="color:#50a14f">"ADMIN"</span>)
                .attrPut(<span style="color:#50a14f">"client_ip"</span>, <span style="color:#50a14f">"10.0.0.1"</span>);

<em>// 3. 注入远程技能代理,框架会自动处理上下文透传</em>
chatModel.prompt(prompt)
         .options(o -> o.skillAdd(<span style="color:#a626a4">new</span> <span style="color:#c18401">McpSkillClient</span>(mcpClient))) 
         .call();

2. 服务端:声明式的安全能力导出

通过继承 McpSkillServer,你可以轻松实现具备动态防御能力的远程服务。注意这里是如何通过代码逻辑控制工具暴露的。

<span style="color:#a626a4">import</span> org.noear.solon.ai.annotation.ToolMapping;
<span style="color:#a626a4">import</span> org.noear.solon.ai.chat.prompt.Prompt;
<span style="color:#a626a4">import</span> org.noear.solon.ai.mcp.McpChannel;
<span style="color:#a626a4">import</span> org.noear.solon.ai.mcp.server.McpSkillServer;
<span style="color:#a626a4">import</span> org.noear.solon.ai.mcp.server.annotation.McpServerEndpoint;

<span style="color:#a626a4">import</span> java.util.ArrayList;
<span style="color:#a626a4">import</span> java.util.List;

<span style="color:#4078f2">@McpServerEndpoint(channel = McpChannel.STREAMABLE, mcpEndpoint = "/skill/order")</span>
<span style="color:#a626a4">public</span> <span style="color:#a626a4">class</span> <span style="color:#c18401">OrderRemoteSkillServer</span> <span style="color:#a626a4">extends</span> <span style="color:#c18401">McpSkillServer</span> {
    
    <span style="color:#4078f2">@Override</span>
    <span style="color:#a626a4">public</span> <span style="color:#986801">boolean</span> <span style="color:#4078f2">isSupported</span><span>(Prompt prompt)</span> {
        <em>// 逻辑准入:如果请求没有租户标识,直接拒绝挂载该技能</em>
        <span style="color:#a626a4">return</span> prompt.attr(<span style="color:#50a14f">"tenant_id"</span>) != <span style="color:#0184bb">null</span>;
    }

    <span style="color:#4078f2">@Override</span>
    <span style="color:#a626a4">public</span> List<String> <span style="color:#4078f2">getToolsName</span><span>(Prompt prompt)</span> {
        <em>// 动态路由:实现物理级的工具隔离</em>
        List<String> tools = <span style="color:#a626a4">new</span> <span style="color:#c18401">ArrayList</span><>();
        tools.add(<span style="color:#50a14f">"OrderQuery"</span>); 

        <span style="color:#a626a4">if</span> (<span style="color:#50a14f">"ADMIN"</span>.equals(prompt.attr(<span style="color:#50a14f">"user_role"</span>))) {
            tools.add(<span style="color:#50a14f">"OrderCancel"</span>); <em>// 仅管理员可见</em>
        }
        <span style="color:#a626a4">return</span> tools;
    }

    <span style="color:#4078f2">@ToolMapping(description = "查询订单详情,包含物流状态")</span>
    <span style="color:#a626a4">public</span> String <span style="color:#4078f2">OrderQuery</span><span>(String id)</span> { ... }

    <span style="color:#4078f2">@ToolMapping(description = "紧急取消订单,此操作不可逆")</span>
    <span style="color:#a626a4">public</span> String <span style="color:#4078f2">OrderCancel</span><span>(String id)</span> { ... }
}

四、 架构反思:为什么这是企业级 Agent 的必然选择?

将 MCP 进化为 Remote Skills 之后,AI 系统的架构质量获得了质的飞跃:

  • 极致的上下文纯净度(Purity): 通过动态过滤,模型只看到“此时此刻、此人此权”下该看到的工具。这种“最小化信息原则”极大提升了推理成功率,并显著降低了 Token 损耗,对于大规模并发系统而言,这直接关系到运营成本。
  • 硬核安全模型(Hardened Security): 在过去,我们试图通过“提示词(Prompt Injection)”来防御非法调用。但在 Remote Skills 架构下,权限控制从“约束模型”提升到了“服务端物理过滤”。即便大模型尝试攻击未授权工具,由于工具定义根本未曾下发,攻击将无从谈起。
  • 能力的热更新与治理(Governance): 在分布式环境下,业务逻辑、工具列表和行为准则全部收敛于远程服务端。这意味着,当业务调整(如增加一个退款限制逻辑)时,开发者只需更新 McpSkillServer 的代码,成百上千个正在运行的客户端 Agent 即可瞬间获得能力升级,无需重新发布。

Solon AI Remote Skills 不仅仅是一套协议的实现,它更是一种关于“如何管理分布式智能体能力”的深度思考。它让 AI 插件从此告别了“静态广播”的时代,步入了“按需分配、智能感知”的新阶段。

五、 展望未来:迈向“技能即服务”

Solon AI Remote Skills 不仅仅是一套协议的实现,它更是一种关于 “如何像管理微服务一样管理 AI 能力” 的深度思考。在未来的 AI 架构中,大模型将不再是一个臃肿的“万能盒子”,而是一个精简的“推理枢纽”,通过 Remote Skills 协议,按需连接全球各地的分布式专家单元。

通过让 AI 插件告别“静态广播”,步入“按需分配、智能感知”的新阶段,Solon AI 正在为开发者提供更稳健、更可控、更具商业价值的 Agent 开发框架。

源码地址:点击下载

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
什么是分布式
什么是分布式

分布式是一种计算和数据处理的方式,将计算任务或数据分散到多个计算机或节点中进行处理。本专题为大家提供分布式相关的文章、下载、课程内容,供大家免费下载体验。

411

2023.08.11

分布式和微服务的区别
分布式和微服务的区别

分布式和微服务的区别在定义和概念、设计思想、粒度和复杂性、服务边界和自治性、技术栈和部署方式等。本专题为大家提供分布式和微服务相关的文章、下载、课程内容,供大家免费下载体验。

251

2023.10.07

json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

457

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

549

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

337

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

82

2025.09.10

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

1031

2023.08.02

java中boolean的用法
java中boolean的用法

在Java中,boolean是一种基本数据类型,它只有两个可能的值:true和false。boolean类型经常用于条件测试,比如进行比较或者检查某个条件是否满足。想了解更多java中boolean的相关内容,可以阅读本专题下面的文章。

367

2023.11.13

TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

26

2026.03.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Kotlin 教程
Kotlin 教程

共23课时 | 4.4万人学习

C# 教程
C# 教程

共94课时 | 11.3万人学习

Java 教程
Java 教程

共578课时 | 81.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号