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

引言: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 逻辑,服务端可以决定当前技能是否参与此次对话。

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

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

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

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

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

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

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

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

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

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

java 复制代码
import org.noear.solon.ai.chat.ChatModel;
import org.noear.solon.ai.chat.prompt.Prompt;
import org.noear.solon.ai.mcp.McpChannel;
import org.noear.solon.ai.mcp.client.McpClientProvider;
import org.noear.solon.ai.mcp.client.McpSkillClient;

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

// 3. 注入远程技能代理,框架会自动处理上下文透传
chatModel.prompt(prompt)
         .options(o -> o.skillAdd(new McpSkillClient(mcpClient))) 
         .call();

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

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

java 复制代码
import org.noear.solon.ai.annotation.ToolMapping;
import org.noear.solon.ai.chat.prompt.Prompt;
import org.noear.solon.ai.mcp.McpChannel;
import org.noear.solon.ai.mcp.server.McpSkillServer;
import org.noear.solon.ai.mcp.server.annotation.McpServerEndpoint;

import java.util.ArrayList;
import java.util.List;

@McpServerEndpoint(channel = McpChannel.STREAMABLE, mcpEndpoint = "/skill/order")
public class OrderRemoteSkillServer extends McpSkillServer {
    
    @Override
    public boolean isSupported(Prompt prompt) {
        // 逻辑准入:如果请求没有租户标识,直接拒绝挂载该技能
        return prompt.attr("tenant_id") != null;
    }

    @Override
    public List<String> getToolsName(Prompt prompt) {
        // 动态路由:实现物理级的工具隔离
        List<String> tools = new ArrayList<>();
        tools.add("OrderQuery"); 

        if ("ADMIN".equals(prompt.attr("user_role"))) {
            tools.add("OrderCancel"); // 仅管理员可见
        }
        return tools;
    }

    @ToolMapping(description = "查询订单详情,包含物流状态")
    public String OrderQuery(String id) { ... }

    @ToolMapping(description = "紧急取消订单,此操作不可逆")
    public String OrderCancel(String id) { ... }
}

四、 架构反思:为什么这是企业级 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 开发框架。

相关推荐
Yvonne爱编码2 小时前
Java 接口学习核心难点深度解析
java·开发语言·python
这周也會开心2 小时前
SSM 配置 index 页面的实现方式
java·tomcat·springmvc
黎雁·泠崖2 小时前
Java继承入门:概念+特点+核心继承规则
java·开发语言
CoderJia程序员甲2 小时前
GitHub 热榜项目 - 日榜(2026-01-24)
git·ai·开源·llm·github
sheji34162 小时前
【开题答辩全过程】以 小区物业管理APP为例,包含答辩的问题和答案
java
星辰徐哥2 小时前
Java程序的编译与运行机制
java·开发语言·编译·运行机制
老毛肚2 小时前
Spring 6.0基于JDB手写定制自己的ROM框架
java·数据库·spring
Sylvia-girl2 小时前
线程安全问题
java·开发语言·安全
沛沛老爹3 小时前
Web开发者转型AI安全实战:Agent Skills敏感数据脱敏架构设计
java·开发语言·人工智能·安全·rag·skills