一文讲清楚Agent、MCP、Function Call附实操代码示例

随着Manus、DeepSeek等产品的爆火,Agent、MCP、Function Call这三个概念频繁出现在各种技术讨论中。由于三者在能力上存在相似性,很容易被混淆,这也是大家普遍反馈比较困惑的点。本文将帮助你彻底理解这三个概念的区别与联系。

Image

一、Agent:自主决策的AI应用

Image

Agent是一种AI应用,能感知环境、规划任务并调用服务(外部工具、数据库等)完成任务。从定义上看,Agent的范围可以很广泛:

  • 可以调用外部服务 (工具、数据库等)
  • 具备自主决策能力 ,完成复杂任务
  • 可以调用MCP、Function Call等能力

目前市面上的Agent包括:

  • Coze、Dify里的智能体
  • Manus、Devin等AI开发助手
  • Flowith的Oracle模式
  • Cursor、Windsurf的Agent模式

但Agent开发面临的挑战也很明显:由于每家产品的API集成都千差万别,这意味着Agent的开发者需要做非常大量的定制集成工作。这就引出了MCP的重要性。

二、MCP:大模型的"HTTP协议"

Image

MCP全称是Model Context Protocol,是Anthropic提出的一种标准化协议,目的是让AI应用可以更好地连接各种外部数据服务。它相当于大模型的"HTTP协议"。

我们可以打个比方:

  • HTTP协议:使浏览器与服务器 交互标准化
  • MCP:使大模型与外部服务 交互标准化

就像HTTP统一了"快递单格式",让"寄快递"变得非常方便,MCP也在AI世界做着类似的事。

MCP的应用场景很广泛:

  • Fetch MCP:网页内容抓取
  • Google Drive MCP:文件读取
  • 兼容工具:Claude客户端、Cursor、Windsurf

需要特别注意的是:MCP并不绑定任何大模型,这意味着你可以在支持MCP的工具中,用任何大模型调用MCP服务。这点与Function Call有明显区别。

三、Function Call:模型的原生能力扩展

Image

Function Call即函数调用,是大模型调用外部函数或API以获取信息、执行计算或与系统交互的机制。它的特点是:

  • 大模型调用外部函数或API 的机制
  • 增强大模型能力的直接方式
  • 通常与大模型绑定 ,作为模型的一部分

以扣子中的DeepSeek-R1为例,它有原生DeepSeek R1和支持Function Call的版本。Function Call版本可以在Single-Agent模式下调用各类扣子工具(插件、工作流、知识库)。

但Function Call也面临挑战:由于它可以让开发者自由定义函数和API调用方式,不同开发者采用不同方式时,就会出现不通用的问题,导致普及困难且需要重复开发。这再次凸显出MCP标准化的重要性。

四、三者定位对比:工具箱、瑞士军刀与智能工人

Image

MCP Server:被动的工具箱

  • 被动服务,仅响应调用请求
  • 为大模型提供外部数据和能力支持
  • 不参与决策或推理 过程
  • 像工具箱,等待别人挑选使用

Function Call:瑞士军刀

  • 直接扩展模型能力 的机制
  • 允许模型生成请求参数 并整合结果
  • 与模型绑定部署 ,紧密集成
  • 像瑞士军刀,小巧多功能 ,随身携带

Agent:智能工人

  • 具备自主决策能力 的AI实体
  • 感知环境、规划任务 并执行
  • 可调用各种工具 (包括MCP/Function Call)
  • 像熟练工人,选择合适工具 完成复杂任务

五、功能对比:从单一到复杂

Image

Image

六、应用场景案例

Image

Function Call:实时天气查询

适合简单、同步任务。例如,当用户询问"北京今天的天气如何"时,模型可以直接调用get_weather()函数获取结果。

MCP Server:跨平台数据整合

适合复杂、异步任务。例如,企业可以将内部系统(CRM、ERP)封装为MCP Server,供多个Agent安全调用。

Agent:自动化客服

适合端到端复杂任务。例如,在客户服务场景中,Agent可以自动监控用户反馈、分析问题并生成解决方案。

七、三者如何协同工作:知乎AI讨论总结案例

Image

  1. 用户提问:"帮我总结知乎上关于AI的最新讨论 "
  2. LLM解析需求,调用Function Call检测平台类型
  3. Function Call返回"知乎",LLM通过MCP协议请求爬虫服务
  4. MCP Server抓取网页数据 后返回给LLM
  5. LLM生成摘要报告 并返回给用户

八、如何选择合适的技术方案

Image

选择时应考虑以下因素:

任务复杂度

  • 简单低延迟任务:Function Call
  • 复杂数据整合任务:MCP Server
  • 自主决策多步任务:Agent

部署灵活性

  • Function Call:需与模型服务绑定 ,适合小型项目
  • MCP Server:可独立扩展 ,适合企业级应用
  • Agent:需要集成多种模块 ,适合大型复杂系统

协议标准化需求

  • Function Call:无强制协议 ,实现方式因平台而异
  • MCP Server:严格遵循标准 ,便于跨团队协作
  • Agent:依赖底层工具 的协议规范

九、如何使用

Function Call 使用示例

# 定义函数
def get_weather(location):
    # 实际实现会调用天气API
    return {"city": location, "temperature": "22°C", "condition": "晴"}

# 注册函数到模型
functions = [
    {
        "name": "get_weather",
        "description": "获取指定城市的当前天气",
        "parameters": {
            "type": "object",
            "properties": {
                "location": {"type": "string", "description": "城市名称"}
            },
            "required": ["location"]
        }
    }
]

# 使用模型调用函数
response = model.generate(
    prompt="北京今天天气怎么样?",
    functions=functions
)

# 如果模型决定调用函数
if response.function_call:
    function_name = response.function_call.name
    arguments = json.loads(response.function_call.arguments)
    
    # 执行函数调用
    result = get_weather(arguments["location"])
    
    # 将结果返回给模型进行总结
    final_response = model.generate(
        prompt="北京今天天气怎么样?",
        function_results=json.dumps(result)
    )

MCP Server 使用示例

from fastapi import FastAPI
import httpx

app = FastAPI()

@app.post("/fetch")
asyncdeffetch_webpage(request: dict):
    url = request.get("url")
    
    asyncwith httpx.AsyncClient() as client:
        response = await client.get(url)
        content = response.text
    
    # 返回MCP标准格式的响应
    return {
        "status": "success",
        "content": content,
        "metadata": {
            "url": url,
            "timestamp": str(datetime.now())
        }
    }

# 客户端使用MCP
asyncdefuse_mcp_client(url):
    asyncwith httpx.AsyncClient() as client:
        mcp_response = await client.post(
            "http://localhost:8000/fetch",
            json={"url": url}
        )
        
        return mcp_response.json()

Agent 使用示例

class SimpleAgent:
    def__init__(self, llm, tools):
        self.llm = llm
        self.tools = tools
        self.memory = []
    
    defrun(self, user_input):
        # 1. 添加用户输入到记忆
        self.memory.append({"role": "user", "content": user_input})
        
        # 2. 决策:分析需求并选择工具
        planning_prompt = self._create_planning_prompt(user_input)
        plan = self.llm.generate(planning_prompt)
        
        # 3. 执行:调用工具获取结果
        if"get_weather"in plan:
            # 使用Function Call
            weather_data = self.tools["function_call"].get_weather("北京")
            self.memory.append({"role": "tool", "content": weather_data})
        
        if"web_search"in plan:
            # 使用MCP服务
            search_results = self.tools["mcp"].fetch("https://news.com/ai")
            self.memory.append({"role": "tool", "content": search_results})
        
        # 4. 生成最终回复
        final_prompt = self._create_response_prompt()
        response = self.llm.generate(final_prompt)
        
        return response

Image

总结来说:

  • Agent是一种AI应用,能感知环境、规划任务并调用服务(外部工具、数据库等,包括MCP Servers、Function Call)完成任务;如果Agent想要更好地完成任务,一般需要接入足够多的外部工具,而外部工具的接入千差万别;
  • Function Call是大模型本身的一种能力,可以调用外部函数或API以增强大模型能力,但它同样面临着不同开发者自由定义导致的不标准问题;
  • MCP则是给AI应用提供了一套标准化协议,方便AI应用更好地访问外部工具,以提升大模型的响应能力。

那么,如何系统的去学习大模型LLM?

作为一名从业五年的资深大模型算法工程师,我经常会收到一些评论和私信,我是小白,学习大模型该从哪里入手呢?我自学没有方向怎么办?这个地方我不会啊。如果你也有类似的经历,一定要继续看下去!这些问题啊,也不是三言两语啊就能讲明白的。

所以我综合了大模型的所有知识点,给大家带来一套全网最全最细的大模型零基础教程。在做这套教程之前呢,我就曾放空大脑,以一个大模型小白的角度去重新解析它,采用基础知识和实战项目相结合的教学方式,历时3个月,终于完成了这样的课程,让你真正体会到什么是每一秒都在疯狂输出知识点。

由于篇幅有限,⚡️ 朋友们如果有需要全套 《2025全新制作的大模型全套资料》,扫码获取~
在这里插入图片描述

👉大模型学习指南+路线汇总👈

我们这套大模型资料呢,会从基础篇、进阶篇和项目实战篇等三大方面来讲解。
在这里插入图片描述
在这里插入图片描述

👉①.基础篇👈

基础篇里面包括了Python快速入门、AI开发环境搭建及提示词工程,带你学习大模型核心原理、prompt使用技巧、Transformer架构和预训练、SFT、RLHF等一些基础概念,用最易懂的方式带你入门大模型。
在这里插入图片描述

👉②.进阶篇👈

接下来是进阶篇,你将掌握RAG、Agent、Langchain、大模型微调和私有化部署,学习如何构建外挂知识库并和自己的企业相结合,学习如何使用langchain框架提高开发效率和代码质量、学习如何选择合适的基座模型并进行数据集的收集预处理以及具体的模型微调等等。
在这里插入图片描述

👉③.实战篇👈

实战篇会手把手带着大家练习企业级的落地项目(已脱敏),比如RAG医疗问答系统、Agent智能电商客服系统、数字人项目实战、教育行业智能助教等等,从而帮助大家更好的应对大模型时代的挑战。
在这里插入图片描述

👉④.福利篇👈

最后呢,会给大家一个小福利,课程视频中的所有素材,有搭建AI开发环境资料包,还有学习计划表,几十上百G素材、电子书和课件等等,只要你能想到的素材,我这里几乎都有。我已经全部上传到优快云,朋友们如果需要可以微信扫描下方优快云官方认证二维码免费领取【保证100%免费
在这里插入图片描述
相信我,这套大模型系统教程将会是全网最齐全 最易懂的小白专用课!!

<< MCP(Multi-Class Probability)Agent策略并不是标准的Java术语或库中的特定概念,但从上下文推测可能是指涉及多分类概率场景下的某种代理模式或者算法逻辑设计。例如,在机器学习、任务调度或多线程处理等复杂系统中可能会用到类似的概念。 如果我们将这个“MCP Agent”作为一个自定义的设计模式进行介绍,它可以被理解为一种用于管理多个类别决策过程的概率代理机制,常见于以下领域: ### MCP Agent 的基本思想 假设我们需要构建一个多分类预测模型,并且每个类别的输出都有一定的置信度或者说概率值时,“MCP Agent”的角色就是基于这些概率来进行下一步操作的选择和执行。 我们可以使用 Java 来模拟这样一个简单的架构示例: ```java import java.util.Random; public class MCPAgent { // 模拟不同类别的概率分布情况 private double[] probabilities; public MCPAgent(double[] probabilities) { this.probabilities = normalize(probabilities); } // 归一化概率数组确保其总和为1 private static double[] normalize(double[] input){ if(input == null || input.length ==0 ) return new double[0]; double sum=0.0; for (double num : input) sum +=num; double [] normalized=new double[input.length]; if(sum!=0){ for(int i=0;i<input.length;i++) normalized[i]=input[i]/sum; } else{ // 如果所有输入都为零,则平均分配可能性 for(int j=0;j<normalized.length;j++) normalized[j] = 1.0/normalized.length ; } return normalized; } // 根据给定概率选择一个类别索引 public int chooseAction() { Random randomGenerator = new Random(); double randomNumber =randomGenerator.nextDouble(); double cumulativeProbability=0.0; for(int i=0 ;i <probabilities.length;i++){ cumulativeProbability+=probabilities[i]; if(randomNumber<=cumulativeProbability ){ return i;// 返回对应的动作编号(即数组下标) } } return probabilities.length -1; // 最后返回最后一个元素作为默认动作 } // 测试MCPCluster功能 public static void main(String args[]){ double[] probs={0.1,0.5,0.4}; // 假设有三个行动选项及其相应概率 MCPCluster agentClusterExample=new MCPCluster(probs); System.out.println("Selected Action Index:"+agentClust
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值