AI Study Online
AI基础

揭秘AI工程:Function Calling、Skills和MCP的层次架构

5 min read
📅 2026-06-21 📂 AI基础 ⏱️ 7 分钟阅读 ⚡ 中级

在AI工程领域,三个核心概念——Function CallingSkillsMCP——在构建稳健可扩展的AI应用中扮演关键角色。让我们用实战代码逐一拆解。

1. Function Calling:基础机制

Function Calling不是AI模型自己变魔术般地执行代码。把大语言模型(LLM)想象成运行在GPU上的纯文本引擎——它们对你的数据库或API一无所知。

本质上,Function Calling是一种结构化输出机制

  1. 你给模型提供一个定义本地函数结构的 Schema
  2. 模型处理自然语言输入,推理后输出严格遵循 Schema 的JSON对象。
  3. 你的本地代码才是真正执行动作的部分。
# 定义天气查询函数的Schema
weather_function_schema = {
    "name": "get_weather",
    "parameters": {
        "type": "object",
        "properties": {
            "city": {"type": "string"},
            "date": {"type": "string", "format": "yyyy-mm-dd"}
        },
        "required": ["city", "date"]
    }
}

# 将schema发送给LLM,获取结构化JSON响应
llm_response = llm_client.chat.completions.create(
    model="gpt-4o",
    messages=[{"role": "user", "content": "明天东京天气怎么样?"}],
    tools=[{"type": "function", "function": weather_function_schema}]
)

# 提取并执行函数调用
function_call = llm_response.choices[0].message.tool_calls[0].function
weather_data = execute_local_function(function_call.name, function_call.arguments)

Function Calling解决了将自然语言意图转化为代码可理解参数的问题。它像代码库中的单个函数——基础但单独使用时功能有限。

2. Skills:模块化业务能力

Function Calling虽然强大,但把数百个独立函数Schema塞进单个提示词会导致上下文过载,模型崩溃或行为不可预测。这就是Skills的用武之地。

Skills是高内聚的业务能力模块,打包了:

  • 特定提示词(如DevOps指南)。
  • 多个Function Call。
  • 甚至重试逻辑。

DevOps_Skill 模块为例:

class DevOpsSkill:
    def __init__(self):
        self.log_schema = self._define_log_function_schema()
        self.git_schema = self._define_git_function_schema()
        self.monitoring_schema = self._define_monitoring_function_schema()
        self.prompt_template = "你是DevOps助手。使用工具回答:{question}"

    def _define_log_function_schema(self):
        return {
            "name": "query_logs",
            "parameters": {
                "type": "object",
                "properties": {"service": {"type": "string"}, "timeframe": {"type": "string"}},
                "required": ["service", "timeframe"]
            }
        }

    def execute(self, user_question):
        prompt = self.prompt_template.format(question=user_question)
        llm_response = llm_client.chat.completions.create(
            model="gpt-4o",
            messages=[{"role": "user", "content": prompt}],
            tools=[{"type": "function", "function": self._get_relevant_schemas(user_question)}]
        )
        return self._process_llm_response(llm_response)

将相关功能封装为Skill,避免上下文过载,让AI应用更易维护。Skills就像代码中的类或工具包——抽象复杂性,促进复用。

3. MCP:AI生态系统的标准接口

即使有了Function Calling和Skills,一个关键痛点仍然存在:系统级紧耦合。为一个AI平台构建的Skill通常无法复用到另一个——从Python脚本迁移到Claude或Cursor需要重写一切。

MCP(Model Context Protocol)是AI的标准接口。它将LLM的推理"大脑"与外部工具和数据解耦:

  • 你的AI应用作为MCP Client
  • 你的Skills、本地文件或数据库包装为MCP Server
  • 通过标准化协议通信,实现工具和数据资源的动态发现、零适配代码集成(即插即用)。
# MCP Server:暴露天气服务
from mcp import MCPServer, register_tool

class WeatherMCPServer(MCPServer):
    @register_tool(name="get_weather", description="查询城市天气")
    def get_weather(self, city: str, date: str) -> dict:
        return {"city": city, "date": date, "temperature": "25°C", "condition": "晴"}

server = WeatherMCPServer(host="localhost", port=8080)
server.start()

# MCP Client:使用天气服务
from mcp import MCPClient
client = MCPClient()
weather_data = client.call_tool("get_weather", {"city": "东京", "date": "2026-10-31"})
print(weather_data)

MCP消除了"集成地狱",确保为一个平台构建的工具和数据能无缝跨平台工作。

三者关系:AI工程的层次架构

  • Function Calling微观动作层——将意图转化为可执行参数。
  • Skills中观模块层——打包相关能力实现复用。
  • MCP宏观集成层——实现标准化和生态系统互操作。

构建生产级AI应用:

  1. 用Function Calling处理细粒度动作。
  2. 将相关Function Call和逻辑打包为Skills,实现可维护的业务能力。
  3. 采用MCP确保Skills和工具跨平台工作、随AI生态系统扩展。

三者协同使用,你将超越脆弱的一次性AI脚本,构建稳健、可扩展、可互操作的AI解决方案。

常见问题

Function Calling和MCP有什么区别?

Function Calling是单次LLM交互中的机制——你定义Schema,模型输出结构化JSON,你的代码执行。MCP是更广泛的协议,标准化任何AI应用如何跨不同平台和语言发现和调用外部工具。Function Calling像单次API调用,MCP是使这些调用可移植和可互操作的整个服务架构。MCP底层常包装Function Calling,但增加了发现、标准化和跨平台兼容性。

如果只构建简单AI应用,需要MCP吗?

简单单一用途应用,Function Calling就够了。只有当你希望工具能跨不同AI平台(Claude、Cursor、自定义应用)复用,或构建复杂多工具系统时才需要MCP。从Function Calling和Skills开始。当你发现自己在为不同平台重写相同的工具集成时,就是采用MCP的信号。

Skills与Claude Code的插件系统有什么关系?

Claude Code的插件系统本质上就是Skills的实现。每个插件将提示词、工具Schema和执行逻辑打包成可复用模块——正是Skills在架构层面描述的内容。无论构建Claude Code插件、LangChain工具还是自定义Agent框架,原理相同。理解Skill概念有助于设计更好的插件,不限于特定平台。

分享这篇文章

相关文章