大数跨境

AI Agent 的手脚、接口和操作手册:一篇讲透 Tools、MCP 与 Skills

AI Agent 的手脚、接口和操作手册:一篇讲透 Tools、MCP 与 Skills 智能体AI
2026-10-27
22
导读:从手写代码到企业落地:彻底讲透 AI Agent 的 Tools、MCP 与 Skills(万字实战)

构建企业级 AI Agent 时,最大的误区往往不是工具接入不足,而是未理清 Tools、MCP、Skills 三者的职责边界。若架构设计混乱,不仅系统复杂度飙升,业务效果也难以提升。

许多开发者在初期常陷入这样的路径依赖:先接入大模型实现问答,再添加数据库查询等基础工具,随后为解决复用性问题引入 MCP,最后为规范执行流程引入 Skills。然而,若概念不清,极易导致两种困境:一是架构臃肿但业务价值有限;二是 Demo 华丽却难以适应生产环境的灵活性与稳定性要求。


本文将以“企业销售分析 Agent”为例,通过实现“分析本月销售额下降原因并生成报告”这一具体任务,串联解析 Tools、MCP 与 Skills 的核心作用及协作机制。


01

核心概念辨析:Agent 究竟缺什么?

最基础的 Agent 仅具备文本生成能力。当面临查询真实数据的需求时,模型缺乏执行权限与数据访问途径。为此,需引入以下三层能力:

架构示意

1. Tools(工具):解决“具体动作如何执行”。赋予 Agent 调用外部代码的能力,如查询数据库或计算指标。

2. MCP(模型上下文协议):解决“外部能力如何统一连接”。标准化 AI 应用与外部系统的通信接口,避免每个 Agent 重复编写连接代码。

3. Skills(技能):解决“专业任务如何完成”。将业务步骤、规则、参考文档封装成可复用的方法论,指导 Agent 按专业规范执行复杂任务。

三者并非替代关系,而是分别作用于执行层、连接层与方法论层。


02

Tools 实现真相:从请求到执行

理解 Tools 需从 Function Calling 机制入手。模型生成的仅是结构化的调用请求,真正的执行由应用程序完成。

Function Calling 本质

模型返回如下的 JSON 调用请求:

...json

{

"name": "query_sales",

"arguments": {

"month": "2026-09"

}

}

应用程序解析该请求,执行对应函数并将结果返回模型。此机制确保了模型不直接拥有执行权限,保障了安全性。

工具定义的关键性

工具描述(Description)和参数约束(JSON Schema)直接决定模型的调用准确率。描述应明确业务用途、参数格式及限制条件。需注意,Schema 约束不等于安全校验,服务端仍需进行严格的参数验证。

Python 实现示例

以下代码展示了如何通过 OpenAI SDK 实现简单的工具调用循环:

...python

import json

import os

from openai import OpenAI


client = OpenAI()

MODEL = os.environ["OPENAI_MODEL"]


# 模拟数据

SALES_DATA = {

"2026-09": {"sales": 820000, "orders": 1260, "customers": 486},

"2026-10": {"sales": 690000, "orders": 1080, "customers": 421},

}


def query_sales(month: str) -> dict:

if month not in SALES_DATA:

raise ValueError(f"无 {month} 数据")

return {"month": month, **SALES_DATA[month]}


TOOL_DEFINITIONS = [{

"type": "function",

"function": {

"name": "query_sales",

"description": "查询指定月份销售数据",

"parameters": {

"type": "object",

"properties": {"month": {"type": "string"}},

"required": ["month"],

},

},

}]


TOOL_FUNCTIONS = {"query_sales": query_sales}


def run_agent(user_input: str) -> str:

messages = [{"role": "user", "content": user_input}]

for _ in range(8):

response = client.chat.completions.create(

model=MODEL, messages=messages, tools=TOOL_DEFINITIONS, tool_choice="auto"

)

message = response.choices[0].message

messages.append(message)

if not message.tool_calls:

return message.content or ""

for tool_call in message.tool_calls:

name = tool_call.function.name

try:

arguments = json.loads(tool_call.function.arguments)

result = TOOL_FUNCTIONS[name](**arguments)

tool_output = {"ok": True, "data": result}

except Exception as exc:

tool_output = {"ok": False, "error": str(exc)}

messages.append({

"role": "tool",

"tool_call_id": tool_call.id,

"content": json.dumps(tool_output, ensure_ascii=False),

})

raise RuntimeError("调用次数超限")

关键点在于:模型仅获取工具定义而非执行权限;程序通过映射表执行具体函数;设置最大调用次数防止死循环。生产环境还需补充参数白名单、异常处理及审计日志。


03

MCP:解耦工具与 Agent

随着 Agent 数量增加,硬编码工具连接方式导致维护困难。MCP(Model Context Protocol)通过标准化协议,实现 Host(宿主应用)、Client(客户端)与 Server(能力提供方)的解耦。

MCP 核心角色与能力

架构示意

MCP 不仅支持 Tools(执行动作),还包含 Resources(提供上下文资源,如文档)和 Prompts(提供提示模板)。Host 负责协调这些能力的组合使用。

能力 作用 例子
Tools 执行动作 查询订单、创建工单
Resources 提供可读上下文 业务文档、配置资料
Prompts 提供提示模板 标准分析模板

04

实战:构建 MCP Server 与 Client

编写 Server

使用 Python MCP SDK 快速注册工具。SDK 自动处理协议细节,通过装饰器将普通函数暴露为 MCP 工具。

...python

from mcp.server.fastmcp import FastMCP

mcp = FastMCP("Sales Data Server")


@mcp.tool()

def query_sales(month: str) -> dict:

"""查询指定月份销售统计数据"""

# 逻辑实现...

return {"month": month, "sales": 820000}


@mcp.tool()

def calculate_change(previous: float, current: float) -> dict:

"""计算变化额与变化率"""

# 逻辑实现...

return {"change": current - previous}


if __name__ == "__main__":

mcp.run(transport="stdio")

注意:Server 端不应向标准输出打印调试日志,以免干扰协议通信。

编写 Client

Client 通过 stdio 连接 Server,发现可用工具并发起调用。关键在于 Client 无需导入 Server 代码,仅通过协议交互。

...python

import asyncio

from mcp import ClientSession, StdioServerParameters

from mcp.client.stdio import stdio_client


async def main():

server_params = StdioServerParameters(command="python", args=["server.py"])

async with stdio_client(server_params) as (read_stream, write_stream):

async with ClientSession(read_stream, write_stream) as session:

await session.initialize()

tools = await session.list_tools()

print([t.name for t in tools.tools])

result = await session.call_tool("query_sales", {"month": "2026-10"})

print(result.content)


asyncio.run(main())

走向企业服务

本地 stdio 适合开发调试。生产环境中,MCP Server 可通过 Streamable HTTP 部署,需重点考虑认证、授权、限流及监控等治理问题,确保其成为受控的业务能力入口。


05

自动化调度:整合 MCP 与 Function Calling

为实现 Agent 自动选择 MCP 工具,需建立适配层:

架构示意

工具桥接

将 MCP 获取的工具元数据转换为模型 API 所需的格式(如 OpenAI Function Definition)。需注意 Schema 兼容性校验。

统一执行封装

封装异步调用函数,处理 MCP 协议响应及错误类型,屏蔽底层通信细节。

执行循环

Agent 流程调整为:LLM 决策 -> MCP Client 调用 -> MCP Server 执行 -> 结果回填 LLM。此架构实现了决策与执行的彻底分离。


06

Skills:沉淀专业任务方法论

仅有工具不足以应对复杂业务。例如销售分析,需遵循特定步骤:确认口径、对比数据、定位异常、验证假设。Skills 旨在封装此类专业知识。

Skill 结构示例

以文件夹形式组织 Skill,包含入口文件、参考文档、脚本及模板。

...markdown

---

name: sales-analysis

description: 分析月度销售表现并生成报告

---


## 执行步骤

1. 确认分析月份与统计口径

2. 查询本期与上期数据

3. 计算关键指标变化

4. 定位异常区域或产品

5. 生成标准化报告


## 约束

- 禁止编造数据

- 区分相关性与因果关系

渐进式加载

为避免 Token 浪费,Agent 应根据意图动态加载 Skill。先读取 SKILL.md 理解框架,按需加载参考文献或执行脚本。这构建了可维护的任务知识体系。


07

协同运作:三者如何配合?

完整链路中,Skills 指导任务流程,Tools 提供原子能力,MCP 负责连接传输,Agent Runtime 负责统筹调度。

架构示意

需注意,关键业务规则(如权限校验、前置条件检查)必须在代码或服务端强制执行,不能仅依赖 Skill 中的提示词约束。


08

企业级治理:超越功能实现

权限边界

遵循最小权限原则,限制数据库账号权限,对写操作实施独立授权及人工审批。

服务治理

MCP Server 需具备超时控制、分页返回、并发限制及容错机制,以应对分布式系统挑战。

版本管理与测试

Skills 应纳入版本控制,并构建固定测试集验证分析逻辑的正确性及口径一致性。

可观测性

记录任务 ID、Skill 版本、工具调用参数、耗时及状态,做好数据脱敏,确保问题可追溯。


09

演进路线:何时引入 Workflow 与 Multi-Agent?

不同机制解决不同维度问题,建议按需引入:

业务需求 更适合的机制
执行明确动作 Tool
统一接入外部能力 MCP
复用专业任务方法 Skill
强制约束执行顺序/回滚 Workflow / 状态机
多领域独立推理协作 Multi-Agent

稳妥的演进路线是:先完善工具,再标准化连接(MCP),接着沉淀专业技能(Skills),最后在必要时引入工作流或多智能体协作。


∞

结语:聚焦业务价值

Tools、MCP 与 Skills 的组合,本质上是为了解决 Agent “能否执行、能否连接、能否专业完成任务”三大核心问题。企业级 Agent 的成功,不在于技术组件的堆砌,而在于是否能在明确的权限边界内,稳定、可追溯地完成真实业务任务。

建议开发顺序:

1

明确单一真实业务任务的输入输出标准。

2

实现少量高可靠性的 Python Tools。

3

在多应用共享需求下,封装 MCP Server。

4

针对高频复杂任务,沉淀 Skills。

5

最后完善工作流、治理与测试体系。

循序渐进,方能构建出既智能又可靠的企业级 AI 助手。

「企业真正需要的不是一个看起来无所不能的 AI,而是一个知道该做什么、能够调用正确的能力、按照规则完成任务,并且出了问题能够查清原因的系统。」


END

【声明】内容源于网络
0
0
智能体AI
1234
内容 532
粉丝 0
智能体AI 1234
总阅读25.0k
粉丝0
内容532