MCP协议学习笔记
MCP协议学习笔记
|2025-5-9|最后更新: 2025-5-9
type
status
date
slug
summary
tags
category
icon
password
随着大模型的普及,以大模型为基础的应用百花齐放,为了更好地开发大模型相关的产品,一个统一的协议是必要的。于是,MCP(模型上下文协议 Model Context Protocol)应运而生。
顾名思义,MCP规定了给大模型提供上下文的一系列规范。

一、背景知识

1、prompt

现在的大模型应用大部分是作为一个“聊天机器人”,你给他输入,它向你输出一些和输入相关的数据。
具体而言,你传给大模型 prompt(提示词),大模型根据你的提示词来进行回答。
  • 细分一点,提示词又可以分为 user prompt system prompt
    • system prompt :主要是给大模型“你在扮演什么角色”的提示词。比如“you are a helpful assistant”等
    • user prompt : 用户具体输入的提示词。
在诸如chatgpt、gemini、deepseek等产品中,为了产品的稳定性,system prompt往往是固定的。
 

2、Agent,Agent Tools

但是在这种模式下,大模型就只是像一本百科全书,你问什么,它就答什么。我们能否让大模型能够自己使用工具呢,去帮助我们完成一些任务呢?
 
最早的尝试是github中一个名为 AutoGPT 的项目。
AutoGPT是在本地运行的一个程序。它是在用户和LLM之间进行沟通的桥梁。
具体来说:
1、首先,你在本地实现了一些功能函数,比如列出所有文件 list_files,和读取某个文件的内容 read_files,你把这些功能函数的调用方法、功能注册到AutoGPT这个程序中。AutoGPT会把这些注册好的功能函数转化成能输入给 LLM 的 System Prompt(包括我有哪些工具,每个工具能做什么,如果你想要使用某个工具,你应该输入给我什么样的参数)
2、随后,你向AutoGPT输入一些提示词,即 user prompt,AutoGPT接收到之后会把你的 user prompt 连同已经转化好的 System Prompt 一起输入给大模型,这样大模型就可以选择工具来进行调用了。
3、大模型产生相应的输出之后,AutoGPT就可以识别并调用相应的功能函数,并把功能函数的输出结果再返回给 LLM
4、如此反复,直到任务完成,AutoGPT把内容返回给用户
 
我们把起到 AutoGPT 这样作用的工具称为 Agent , 而那些功能函数称为 Agent tools。
当然,大模型经常会出现幻觉,有时候会胡言乱语,所以我们也就不能保证 LLM 返回的调用对应函数的格式是正确的,在这种情况下,Agent 往往会自动进行识别并进行重试。
 

3、Function calling

但是这种不断重试的策略总让人觉得不太靠谱,于是各个大模型厂商推出了名为 Function calling 的功能,它对我们对于 Agent Tools的描述和返回的 LLM 调用函数的指令格式进行了统一的规范。
比如对于 Agent Tools 的描述都以 JSON 的格式,每个字段都有特定的设置等等,而且不再放到System Prompt中,而是给大模型的输入新开一个字段,所有工具描述都按照相同的格式放在该字段中。
在具体训练时,大模型厂商便会根据这种使用情境进行专门的微调,使得模型具备这种格式化输出的能力。
而且在这种情况下,AI服务器可以对模型输出的格式进行格式检查,如果格式不正确,那么AI服务器自己就会进行重试。
 
但是Function calling也带来了一些问题,就是各大厂商的标准定义的不一样,提供的API也不一样,很多开源模型甚至都不支持 Function calling。所以目前而言,很难写一个通用的AI Agent。而且当下使用 System Prompt 和 Function calling 两种方式是并存的。
 

4、MCP

Function calling 规定了 AI Agent 如何和 AI模型打交道,而MCP协议主要负责的范围是 AI Agent 如何与 Agent Tools 打交道。
MCP规定了 AI Agent (MCP Clinet) 和 Agent Tools (MCP Server) 之间是如何进行通信的。需要注意的是 MCP Server 除了保存有 Agent Tools 相关信息外,还可以保存一些图文资源(resources)和一些提示词模板(Prompt)。
具体的流程如下:
notion image
MCP Server 和 MCP Clinet 不仅可以部署在同一台机器上,通过stdio进行通信,也可以部署在网络上,通过http进行通信。
需要注意的是,MCP是一个“模型无关的协议”,也就是说,它不关心 Agent 用的是哪个模型,它只关心 MCP Server 和 MCP Clinet之间是如何进行通信的。
强化学习自学笔记操作系统
Loading...