ms-agent框架怎么让 Skills 与 MCP协同使用

在 MS-Agent 框架中,Skills 与 MCP(Model Context Protocol)的协同使用 是一种典型的"能力封装 + 执行控制"混合架构设计。这种组合使得大模型智能体既能拥有专业化的知识和工具(通过 Skills),又能高效、安全地调用外部服务或执行底层操作(通过 MCP)。下面将从原理、流程、代码示例三个层面详细说明 MS-Agent 如何通过 Skills 调用 MCP


一、基本原理:Skills 与 MCP 的角色分工

  • Agent Skills 的核心作用是 封装领域知识、工作流规范和可执行脚本,形成标准化的"技能包"。它采用渐进式上下文加载机制(Level 1~4),仅在需要时激活相关资源 。
  • MCP(Model Context Protocol) 则是一个 通用的工具调用协议,负责与外部系统(如数据库、API、命令行)交互,执行具体操作 。

简单比喻:

  • Skills 是"作战计划书":告诉 AI "要做什么、怎么做、用什么工具"。
  • MCP 是"执行部队":实际去调用 SQL、运行 Shell 命令、访问 REST API。

两者结合,实现 "任务理解 → 技能匹配 → 工具调用 → 结果整合" 的完整闭环 。


二、调用流程:Skills 如何触发 MCP

以一个典型场景为例:"分析公司内部谁的话语权最高"。

步骤 1:用户输入触发 Skill 匹配

用户说:"分析公司内部谁的话语权最高。"

→ MS-Agent 的 Retriever 组件 基于语义搜索,在 ./skills 目录下匹配到 mysql-employees-analysis 技能(因其 description 包含"员工关系分析"等关键词)。

步骤 2:加载 Skill 上下文(Level 2~3)

  • 加载 SKILL.md 全文,理解该技能需执行:
    • 查询管理汇报关系
    • 对比薪资等级
    • 统计任职时长
  • 同时加载 references/ 中的 SQL 模板或 scripts/ 中的预处理脚本 。

步骤 3:Skill 内部生成 MCP 调用指令

SKILL.mdscripts/main.py 中,定义了如何构造 MCP 请求。例如:

python

编辑

复制代码
# scripts/main.py (伪代码)
def analyze_authority():
    mcp_request = {
        "tool": "sql_query",
        "parameters": {
            "query": "SELECT manager_id, COUNT(*) FROM employees GROUP BY manager_id ORDER BY COUNT DESC LIMIT 1"
        }
    }
    return mcp_request

注意:此处 sql_query 是一个已注册的 MCP 工具,由 MS-Agent 的 MCP 客户端负责调用 。

步骤 4:MS-Agent 调用 MCP 执行

MS-Agent 框架检测到 Skill 返回的是一个 MCP 工具调用结构,便会:

  1. 将请求转发给 MCP 服务器(可通过 gRPC、HTTP 或 STDIO 通信);
  2. MCP 服务器执行 SQL 查询;
  3. 返回结果(如 {"manager_id": "emp_102", "count": 45})。

步骤 5:Skill 解析结果并生成最终输出

Skill 接收 MCP 返回的数据,结合业务逻辑生成自然语言结论:

"根据汇报关系分析,员工 emp_102 管理 45 名下属,为公司内话语权最高者。"

整个过程实现了 Skills 驱动任务分解,MCP 负责原子操作执行 的协同模式 。


三、代码示例:MS-Agent 中集成 Skills 与 MCP

以下是一个简化版的 MS-Agent 使用示例,展示如何加载 Skills 并支持 MCP 调用:

python

编辑

复制代码
from ms_agent.agent import create_agent_skill
import os

def main():
    work_dir = './temp_workspace'
    skills_dir = './skills'  # 包含 mysql-employees-analysis 等技能

    agent = create_agent_skill(
        skills=skills_dir,
        model='Qwen/Qwen3-235B-A22B-Instruct-2507',
        api_key=os.getenv('OPENAI_API_KEY'),
        base_url=os.getenv('OPENAI_BASE_URL'),
        stream=True,
        use_sandbox=True,
        work_dir=work_dir
    )

    user_query = "分析公司内部谁的话语权最高"
    response = agent.run(user_query)
    print("结果:", response)

if __name__ == '__main__':
    main()

在此配置下:

  • ./skills/mysql-employees-analysis/SKILL.md 中声明了需调用 sql_query 工具;
  • 且 MS-Agent 已配置 MCP 服务器地址(如通过环境变量 MCP_SERVER_URL);
  • 则框架会自动将 Skill 生成的工具调用请求路由至 MCP 服务 。

四、关键优势

  1. 解耦设计:Skills 专注业务逻辑,MCP 专注执行,便于维护和扩展。
  2. 按需加载:避免全量上下文占用,提升推理效率 。
  3. 安全隔离 :通过 ms-enclave 沙箱执行脚本,MCP 调用也可设置权限控制 。
  4. 跨平台复用:Skills 遵循 Anthropic 协议,可在 Cursor、Claude、MS-Agent 等多平台使用 。

总结

在 MS-Agent 中,Skills 并不直接"调用"MCP ,而是通过 生成符合 MCP 协议的工具调用指令,由 Agent 框架将其转发给 MCP 服务执行。这种"Skill 定义意图,MCP 执行动作"的协作模式,是构建复杂、可靠、专业化 AI 智能体的核心范式 。

24篇来源

你这个实例把注册mcp的部分也写一下

Qwen3-Max

好的。要在 MS-Agent 框架中通过 Skills 调用 MCP(Model Context Protocol)工具 ,首先必须 将 MCP 工具注册到 Agent 的运行环境中 。否则即使 Skill 中声明了要调用某个工具(如 sql_query),Agent 也无法找到对应的执行器。

下面我们将完整展示:

  1. 如何定义一个 MCP 工具(以 SQL 查询为例)
  2. 如何在 MS-Agent 启动时注册该 MCP 工具
  3. 如何在 Skill 中引用并触发该工具调用

一、前提:使用 .NET 或 Python?MS-Agent 的 MCP 支持

虽然"MS-Agent"一词在历史语境中可指代旧版 Microsoft Agent(如 Merlin 动画角色),但当前上下文中的 MS-Agent 是指基于大模型的智能体框架 (如 ModelScope 上开源的 ms-agent),其支持通过 MCP 协议集成外部工具

MCP 工具的注册机制 ,在微软官方生态中主要通过 .NET SDKPython + ModelContextProtocol 库 实现 。由于 MS-Agent(ModelScope 版)底层兼容 MCP 协议,我们采用 Python + MCP Server 模式进行说明。

注:若你使用的是 Microsoft Agent 365 / Copilot Studio 生态,则需通过 Teams 开发者门户配置蓝图和机器人 ID ,但那属于企业级部署,不适用于本地 Skills 调用。此处聚焦 本地开发场景


二、步骤 1:创建一个 MCP 工具(SQL 查询示例)

我们先定义一个简单的 MCP 工具,用于执行 SQL 查询。

python

编辑

复制代码
# mcp_tools/sql_tool.py
from modelcontextprotocol.server import McpServerTool
from typing import Dict, Any
import sqlite3

def sql_query_tool(query: str) -> Dict[str, Any]:
    """执行 SQLite 查询并返回结果"""
    try:
        conn = sqlite3.connect("company.db")
        cursor = conn.cursor()
        cursor.execute(query)
        rows = cursor.fetchall()
        columns = [desc[0] for desc in cursor.description]
        result = [dict(zip(columns, row)) for row in rows]
        conn.close()
        return {"status": "success", "data": result}
    except Exception as e:
        return {"status": "error", "message": str(e)}

# 将函数包装为 MCP 工具
sql_mcp_tool = McpServerTool.create(
    name="sql_query",
    description="Execute a SQL query on the company database.",
    function=sql_query_tool,
    parameters={
        "type": "object",
        "properties": {
            "query": {"type": "string", "description": "The SQL SELECT query to execute."}
        },
        "required": ["query"]
    }
)

此处使用了 modelcontextprotocol 库(需安装:pip install modelcontextprotocol),它是 MCP 协议的 Python 实现 。


三、步骤 2:在 MS-Agent 启动时注册 MCP 工具

MS-Agent 允许通过扩展机制注入自定义工具。我们需要在启动 Agent 时,将上述 MCP 工具注册进去。

python

编辑

复制代码
# app_with_mcp.py
import os
from ms_agent.agent import create_agent_skill
from mcp_tools.sql_tool import sql_mcp_tool  # 导入自定义工具

def register_custom_tools(agent):
    """向 Agent 注册 MCP 工具"""
    # 假设 MS-Agent 支持 add_tool 接口(类似 LangChain)
    agent.add_tool(sql_mcp_tool.name, sql_mcp_tool.function)
    print(f"✅ Registered MCP tool: {sql_mcp_tool.name}")

def main():
    work_dir = './temp_workspace'
    skills_dir = './skills'  # 包含你的 Skill 目录

    # 创建 Agent(使用 Qwen 等大模型)
    agent = create_agent_skill(
        skills=skills_dir,
        model='Qwen/Qwen3-235B-A22B-Instruct-2507',
        api_key=os.getenv('OPENAI_API_KEY'),
        base_url=os.getenv('OPENAI_BASE_URL'),
        stream=True,
        use_sandbox=True,
        work_dir=work_dir
    )

    # 关键步骤:注册 MCP 工具
    register_custom_tools(agent)

    # 用户提问
    user_query = "分析公司内部谁管理的下属最多?"
    response = agent.run(user_query)
    print("最终回答:", response)

if __name__ == '__main__':
    main()

⚠️ 注意:ms-agent 官方库是否直接暴露 add_tool 接口,取决于其版本。若未提供,可通过 重写 Agent 的 tool_executor在 Skill 的脚本中直接调用 MCP 工具函数 绕过。


四、步骤 3:在 Skill 中声明并调用 MCP 工具

./skills/employee-analysis/SKILL.md 中,明确说明需要调用 sql_query 工具:

markdown

编辑

复制代码
# Skill: Employee Authority Analysis

## Description
分析公司组织架构中谁的话语权最高,基于汇报关系数量。

## Tools Required
- `sql_query`: Execute SQL to count direct reports.

## Workflow
1. Generate SQL: 
   ```sql
   SELECT manager_id, COUNT(*) as report_count 
   FROM employees 
   WHERE manager_id IS NOT NULL 
   GROUP BY manager_id 
   ORDER BY report_count DESC 
   LIMIT 1;
  1. Call sql_query with the above query.
  2. Parse result and generate natural language summary.

text

编辑

复制代码
同时,在 `scripts/main.py` 中实现调用逻辑:

```python
# skills/employee-analysis/scripts/main.py
def run_analysis(tool_executor):
    query = """
    SELECT manager_id, COUNT(*) as report_count 
    FROM employees 
    GROUP BY manager_id 
    ORDER BY report_count DESC 
    LIMIT 1
    """
    result = tool_executor("sql_query", {"query": query})
    if result["status"] == "success":
        top_manager = result["data"][0]["manager_id"]
        return f"话语权最高的员工是 {top_manager},管理 {result['data'][0]['report_count']} 名下属。"
    else:
        return "查询失败:" + result["message"]

此处 tool_executor 由 MS-Agent 在运行 Skill 时注入,指向已注册的 MCP 工具函数。


五、总结:完整调用链

  1. 定义 MCP 工具sql_query_tool
  2. 注册到 Agentagent.add_tool("sql_query", sql_query_tool)
  3. Skill 声明依赖SKILL.md 中列出所需工具
  4. Skill 脚本调用tool_executor("sql_query", params)
  5. Agent 执行并返回结果

这样,MS-Agent 的 Skills 就能安全、高效地调用 MCP 工具,实现数据库查询、文件操作、API 调用等能力 。

💡 提示:若你使用的是 Microsoft Agent 365 企业版,则需通过 Azure MCP Server 预配和权限授权 ,但本地开发推荐上述轻量级方式

相关推荐
njsgcs6 小时前
有调用skills很强的框架吗 MS-Agent
skills
组合缺一10 小时前
论 AI Skills 分布式发展的必然性:从单体智能到“云端大脑”的跃迁
java·人工智能·分布式·llm·mcp·skills
njsgcs11 小时前
langchain框架怎么让 Skills 与 MCP(tools)协同使用
人工智能·langchain·skills
njsgcs13 小时前
agent skills是任务导向的,不是按不同软件开放的,同一个任务可能会用到不同的软件接口
skills
带刺的坐椅1 天前
论 AI Skills 分布式发展的必然性:从单体智能到“云端大脑”的跃迁
java·ai·llm·mcp·tool-call·skills
沛沛老爹2 天前
Web开发者实战:多模态Agent技能开发——语音交互与合成技能集成指南
java·开发语言·前端·人工智能·交互·skills
组合缺一2 天前
Claude Code Agent Skills vs. Solon AI Skills:从工具增强到框架规范的深度对齐
java·人工智能·python·开源·solon·skills
带刺的坐椅3 天前
Solon AI Remote Skills:开启分布式技能的“感知”时代
java·llm·solon·mcp·skills
沛沛老爹3 天前
Web开发者转型AI安全实战:Agent Skills敏感数据脱敏架构设计
java·开发语言·人工智能·安全·rag·skills