AI Skills 的发展经历了从简单工具到复杂框架的转变过程。最初,AI Skills 仅仅被视为增强智能体功能的辅助工具,类似于给机器人安装新的螺丝刀或扳手。但随着应用场景的复杂化,这种"工具级"的思维已经无法满足需求。
工具级的 AI Skills 主要解决执行层面的问题。比如:
这类技能就像工人的工具箱,每个工具都有明确且单一的功能。它们的特点是:
而框架级的 AI Skills 则完全不同,它们更像是给智能体安装了一个"大脑插件"。以 Solon AI 框架为例,框架级技能包含三大核心组件:
这种架构使得技能具备了自主决策和上下文感知能力,能够根据环境变化调整行为。
一个成熟的 AI Skill 必须具备以下核心特性:
智能准入(isSupported):
指令注入(getInstruction):
工具路由(getTools):
高度自治:
提示:在设计 AI Skills 时,应该遵循"单一职责原则",每个技能只专注于解决一个特定领域的问题,这样可以提高复用性和维护性。
MCP(Model Context Protocol)之于 AI 系统,就如同 HTTP 之于万维网。它解决了几个关键问题:
| 特性 | 传统 Tool | MCP Tool |
|---|---|---|
| 部署方式 | 本地单体 | 分布式 |
| 调用方式 | 进程内调用 | 远程调用 |
| 语言支持 | 单一语言 | 多语言 |
| 扩展性 | 有限 | 高 |
| 维护成本 | 高 | 低 |
这种转变使得 AI 能力可以像微服务一样独立开发、部署和扩展,大大提高了系统的灵活性和可维护性。
McpSkillClient 作为远程技能的本地代理,主要完成以下工作:
java复制McpClientProvider mcpClient = McpClientProvider.builder()
.channel(McpChannel.STREAMABLE)
.url("http://localhost:8081/skill/order")
.build();
服务端需要实现技能的核心逻辑:
java复制@Override
public String description() {
return "提供订单查询与取消的专业技能";
}
java复制@Override
public boolean isSupported(Prompt prompt) {
boolean isOrderTask = prompt.getUserContent().contains("订单");
boolean hasTenant = prompt.attr("tenant_id") != null;
return isOrderTask && hasTenant;
}
java复制@Override
public String getInstruction(Prompt prompt) {
String tenantName = prompt.attrOrDefault("tenant_name", "未知租户");
return "你现在是[" + tenantName + "]的订单主管。请只处理该租户下的订单数据,禁止跨租户查询。";
}
java复制@Override
public List<String> getToolsName(Prompt prompt) {
List<String> tools = new ArrayList<>();
tools.add("OrderQueryTool");
if ("ADMIN".equals(prompt.attr("user_role"))) {
tools.add("OrderCancelTool");
}
return tools;
}
可能原因:
解决方案:
可能原因:
解决方案:
可能原因:
解决方案:
在实际项目中,我们发现分布式 AI Skills 架构确实能够显著提高系统的灵活性和扩展性。特别是在需要集成多种异构系统的场景下,MCP 协议提供的标准化接口大大降低了集成难度。一个实用的建议是,在初期设计时就考虑好技能的版本管理和兼容性策略,这会为后续的升级和维护带来很大便利。