Yang's blog Yang's blog
首页
后端开发
密码学
机器学习
命令手册
关于
友链
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

xiaoyang

尽人事,听天命
首页
后端开发
密码学
机器学习
命令手册
关于
友链
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • SpringCloud

    • 微服务架构介绍
    • SpringCloud介绍
    • Spring Cloud:生产者与消费者
    • Spring Cloud Eureka:构建可靠的服务注册与发现
    • Spring Cloud Ribbon:负载均衡
    • Spring Cloud Fegin:服务调用
    • Spring Cloud Hystrix:熔断器
    • Spring Cloud Zuul:统一网关路由
    • Spring Cloud Config:配置中心
  • Java后端框架

    • LangChain4j

      • 介绍
      • 快速开始
      • Chat and Language Models
      • Chat Memory
      • Model Parameters
      • Response Streaming
      • AI Services
      • Agent
      • Tools (Function Calling)
      • RAG
      • Structured Outputs
      • Classification
      • Embedding (Vector) Stores
      • Image Models
      • Quarkus Integration
      • Spring Boot Integration
      • Kotlin Support
      • Logging
      • Observability
      • Testing and Evaluation
      • Model Context Protocol
  • 八股文

    • 操作系统
    • JVM介绍
    • Java多线程
    • Java集合框架
    • Java反射
    • JavaIO
    • Mybatis介绍
    • Spring介绍
    • SpringBoot介绍
    • Mysql
    • Redis
    • 数据结构
    • 云计算
    • 设计模式
    • 计算机网络
    • 锁核心类AQS
    • Nginx
  • 前端技术

    • 初识Vue3
    • Vue3数据双向绑定
    • Vue3生命周期
    • Vue-Router 组件
    • Pinia 集中式状态存储
  • 中间件

    • RocketMQ
  • 开发知识

    • 请求参数注解
    • 时间复杂度和空间复杂度
    • JSON序列化与反序列化
    • Timestamp vs Datetime
    • Java开发中必备能力单元测试
    • 正向代理和反向代理
    • 什么是VPN
    • 后端服务端主动推送消息的常见方式
    • 正则表达式
    • SseEmitter vs Flux 的本质区别与底层原理解析
    • Function Calling与MCP区别
      • 1. Function Calling 详解
        • 关键特性
        • 调用流程图
        • 示例代码(使用OpenAI GPT)
      • 2. MCP(Model Context Protocol)详解
        • 核心设计理念
        • MCP 的核心组件
        • MCP 架构图
        • MCP 本地工具代码示例(使用 mcp-tools)
      • 3. Function Calling 与 MCP 的关系与区别
        • 本质关系
        • MCP如何与模型进行交互的
        • 模式1:将 MCP 工具转为 Function Calling 工具(仅适配支持fc的模型)
        • 模式2:将工具信息写入提示词中(适配所有模型)
      • 4. 参考资料
  • 后端开发
  • 开发知识
xiaoyang
2025-06-25
目录

Function Calling与MCP区别

# Function Calling与MCP区别

随着大语言模型(LLM)的广泛应用,模型本身的推理能力已不再是瓶颈,如何让模型“调用外部工具”变得尤为重要。从天气查询到数据库检索,模型只有具备与外界交互的能力,才能走向真正的“智能体(Agent)”。

目前,两种主流方案正在被广泛采纳:

  • Function Calling:让模型以结构化方式调用本地注册函数。
  • MCP(Model Context Protocol):一个标准协议,使模型可以通过统一的通信机制调用远程工具、访问资源和提示模板。

# 1. Function Calling 详解

Function Calling 是由 OpenAI 首创的一种能力,允许开发者向模型注册一组函数(通过 JSON Schema 定义),当模型判断需要执行某个工具时,会返回结构化的调用请求,由用户代码来处理和执行该调用。

它的核心是:让语言模型成为“函数调用的指挥者”,而不是执行者。


# 关键特性

  1. 结构化输出:模型输出包含 function_call 字段,表示调用哪个函数、传哪些参数。
  2. 参数自动提取:无需正则提取,模型能直接从用户自然语言中提取结构化参数。
  3. 函数筛选能力:模型根据上下文和描述,自动判断调用哪个函数。
  4. 与自然语言无缝整合:调用结果可嵌入后续回复中,自然流畅。

# 调用流程图

image-20250625103518321


# 示例代码(使用OpenAI GPT)

import openai

tools = [
    {
        "type": "function",
        "function": {
            "name": "get_weather",
            "description": "获取指定城市的天气",
            "parameters": {
                "type": "object",
                "properties": {
                    "city": {
                        "type": "string",
                        "description": "城市名,如:北京"
                    }
                },
                "required": ["city"]
            }
        }
    }
]

response = openai.chat.completions.create(
    model="gpt-4o",
    messages=[
        {"role": "user", "content": "帮我查一下上海的天气"}
    ],
    tools=tools,
)

tool_call = response.choices[0].message.tool_calls[0]
print("模型调用的函数:", tool_call.function.name)
print("调用参数:", tool_call.function.arguments)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33

# 2. MCP(Model Context Protocol)详解

MCP 是由 Anthropic 提出的一个开放协议,旨在为所有语言模型提供 统一的工具调用、资源访问与提示词管理接口。它更像是 AI 世界的“操作系统层协议”,让模型、工具、资源彼此解耦,并可以通过标准通信方式连接。

# 核心设计理念

MCP 不仅仅关注“调用某个函数”,而是构建“工具+资源+提示”的生态系统,并支持模型间复用。


# MCP 的核心组件

  • MCP 主机(MCP Hosts):如 Claude Desktop、集成开发环境(IDE)或其他希望通过 MCP 协议访问数据的 AI 应用程序。
  • MCP 客户端(MCP Clients):实现 MCP 协议的客户端组件,用于与 MCP 服务器保持一对一连接。
  • MCP 服务器(MCP Servers):轻量级程序,通过标准化的 Model Context Protocol(模型上下文协议)对外暴露特定功能或服务。
  • 本地数据源(Local Data Sources):如本机文件、数据库或本地服务,MCP 服务器可在安全前提下访问这些资源。
  • 远程服务(Remote Services):可通过互联网访问的外部系统(例如公开 API),MCP 服务器可以连接并调用这些远程服务。

# MCP 架构图

image-20250625102928318


# MCP 本地工具代码示例(使用 mcp-tools)

编写一个mcpserver,并在本地支持mcp的客户端中进行配置

from mcp_tools import stdio_json_rpc, mcp

@mcp.tool(name="get_time", desc="返回当前时间")
def get_time():
    import datetime
    return {"now": datetime.datetime.now().isoformat()}

if __name__ == "__main__":
    stdio_json_rpc.serve()
1
2
3
4
5
6
7
8
9

# 3. Function Calling 与 MCP 的关系与区别

# 本质关系

内容 Function Calling MCP
核心角色 一种“模型能力” 一种“交互协议”
使用方式 向模型传 tools 与 MCP Server 通信

MCP 本质是将工具描述与调用请求封装为标准格式,通过多种通信方式对外提供,客户端可将其转换为 Function Calling 所需格式。

image-20250625103356401


# MCP如何与模型进行交互的

# 模式1:将 MCP 工具转为 Function Calling 工具(仅适配支持fc的模型)

def convert_mcp_tool_to_fc(tool):
    return {
        "type": "function",
        "function": {
            "name": tool["name"],
            "description": tool["description"],
            "parameters": tool["input_schema"]
        }
    }
1
2
3
4
5
6
7
8
9

# 模式2:将工具信息写入提示词中(适配所有模型)

system_prompt = f"""
你可以调用以下工具:
- 工具名称:{tool["name"]}
- 描述:{tool["description"]}
请在回答中使用该工具。
"""
1
2
3
4
5
6

Function Calling 是执行力强但封闭的调用方式,适合快速构建任务导向型AI;
MCP 是协议化、可扩展的通用工具层,为未来构建多模型、跨平台、长生命周期智能体系统提供标准支持。


# 4. 参考资料

  • 🧠 OpenAI Function Calling 官方文档 (opens new window)
  • 📘 Model Context Protocol Specification (opens new window)
  • 🔧 MCP GitHub 实现工具 (opens new window)
  • 📦 知乎mcp介绍 (opens new window)
编辑 (opens new window)
上次更新: 2025/06/25, 02:50:05

← SseEmitter vs Flux 的本质区别与底层原理解析

最近更新
01
SseEmitter vs Flux 的本质区别与底层原理解析
05-12
02
操作系统
03-18
03
Nginx
03-17
更多文章>
Theme by Vdoing | Copyright © 2023-2025 xiaoyang | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式