从聊天框到 MCP:agent、prompt、function call 与工具协作的完整梳理
核心结论:system prompt、user prompt、AI agent、agent tool、function call、MCP 与 AI 模型不是彼此取代的关系,而是像齿轮一样,一起构成了 AI 自动化协作的完整体系。
一、背景:被 AI 名词连续冲击的问题
- 这段时间各种 AI 名词一波接一波冲击屏幕:agent、MCP、function 等。
- 有人问:agent 是智能体,那智能体又是什么?
- 有人问:MCP 是 AI 时代的 USB 协议,那么它可以接优盘吗?
- 核心目标:用尽量简单的语言,把 agent、MCP、prompt 以及 function call(原文写作“方身口令”)这几个关键概念串联起来。
- 整篇内容围绕一条主线展开:从最开始的聊天框,到 system prompt,再到 AI agent、agent tool、function call,最后到 MCP,解释它们之间的联系与区别。
二、起点:从聊天框与 user prompt 说起
2.1 2023 年 GPT 刚发布时,AI 看起来只是一个聊天框
2023 年 OpenAI 刚刚发布 GPT 的时候,AI 看起来只是一个聊天框。我们通过聊天框发送一条消息给 AI 模型,然后 AI 模型生成一个回复。
我们发的消息就叫 user prompt,也就是用户提示词,一般就是我们提出的问题或者想说的话。
2.2 现实聊天中,相同的话会因“人设”不同得到不同回答
现实生活中,当我们和不同人聊天时,即便是完全相同的话,对方也会根据自己的经验给出不同答案。
原文例子:
- 我说“我肚子疼”。
- 我妈可能会问我要不要去医院。
- 我爸可能会让我去厕所。
- 我女朋友可能直接就来一句:“滚一边去,老娘也疼。”
但 AI 并没有这样的人设,所以它只能给出一个通用的、四平八稳的回答,显得非常无趣。于是我们就希望给 AI 也加上人设。
2.3 最直接的方法:把人设信息打包进 user prompt
最直接的方法就是把人设信息和用户要说的话打包成一条 user prompt 发过去。
例如:
- 你扮演我的女朋友,我说我肚子疼。
- 然后 AI 就可能回复:“滚一边去,老娘也疼。”
- 这样就对味儿了。
但问题在于,“你扮演我温柔的女朋友”这句话并不是我们真正想说的内容,显得有一点出戏。
2.4 system prompt:把人设信息单独拎出来
于是人们干脆把人设信息单独拎了出来,放到另外一个 prompt 里面,这就是 system prompt,系统提示词。
system prompt 主要用来描述 AI 的角色、性格、背景、信息、语气等等。总之,只要不是用户直接说出来的内容,都可以放进 system prompt 里面。
每次用户发送 user prompt 的时候,系统会自动把 system prompt 也一起发给 AI 模型,这样整个对话就显得更加自然。
2.5 网页端聊天机器人中的 system prompt
在网页端的聊天机器人中,system prompt 往往是系统预设的,用户不能随便更改。
但通常来讲,网站会提供一些设置。比如 ChatGPT 里面有一个叫做 customize ChatGPT 的功能,用户可以在里面写下自己的偏好,这些偏好就会自动变成 system prompt 的一部分。
三、AI agent:让 AI 从“回答”走向“动手”
3.1 聊天机器人的限制
即使人设设定得再完美,说到底 AI 还是个聊天机器人。
你问一个问题,它最多给你答案或者告诉你怎么做,但实际动手的还是你自己。那么能不能让 AI 自己去完成任务呢?
3.2 AutoGPT:第一个做出尝试的开源项目
第一个做出尝试的是一个开源项目,叫做 AutoGPT。它是本地运行的一个小程序。
如果你想让 AutoGPT 帮你管理电脑里的文件,那你得先写好一些文件管理函数,比如:
- list file:用来列目录。
- read file:用来读文件。
- 等等。
然后你把这些函数以及它们的功能描述、使用方法注册到 AutoGPT 中。
3.3 AutoGPT 的工作流程
AutoGPT 会根据这些信息生成一个 system prompt,告诉 AI 模型:
- 用户给了你哪些工具。
- 它们都是干什么的。
- AI 如果想要使用它们,应该返回什么样的格式。
最后把这个 system prompt 连同用户的请求,比如“帮我找一找原神的安装目录”,一起发给 AI 模型。
如果 AI 模型足够聪明,就会按照要求的格式返回一个调用某个函数的消息。AutoGPT 进行解析之后就可以调用对应的函数了,然后再把结果丢回给 AI。AI 再根据函数调用的结果决定下一步应该做什么操作。这个过程就这样反复,直到任务完成为止。
3.4 AI agent 与 agent tool 的定义
人们把 AutoGPT 这种负责在模型、工具和最终用户之间传话的程序就叫做 AI agent。
而这些提供给 AI 调用的函数或者服务就叫做 agent tool。
3.5 早期架构的问题:AI 是概率模型,可能返回错误格式
不过这个架构有一个小问题:
- 虽然我们在 system prompt 里面写清楚了 AI 应该用什么格式返回。
- 但 AI 模型说到底是一个概率模型,还是有可能返回格式不对的内容。
为了处理这些不听话的情况,很多 AI agent 会在发现 AI 返回的格式不对时自动进行重试:一次不行我们就来第二次。
原文提到,现在市面上很多知名的 agent,比如 client,仍然采用的是这种方式。但这种反复的重试总归让人觉得不太靠谱。
四、function call:统一格式、规范描述
4.1 大模型厂商出手
于是,大模型厂商开始出手了。原文提到“chat、GPT cloud 等等”纷纷推出了一个叫做 function call 的新功能。
这个功能的核心思想就是:统一格式,规范描述。
4.2 回到“原神”的例子:从自然语言描述到 JSON 标准化
回到之前原神的例子:
- 我们通过 system prompt 告诉 AI 有哪些工具以及返回的格式。
- 但是这些描述是用自然语言随意写的,只要 AI 看得懂就行。
function call 则对这些描述进行了标准化:
- 每个 tool 都用一个 JSON 对象来定义。
- 工具名写在 name 字段。
- 功能说明写在 description 字段。
- 所需要的参数写在 parameters 里面。
- 等等。
然后这些 JSON 对象也从 system prompt 中被剥离了出来,单独放到了一个字段里面。
最后 function call 也规定了 AI 使用工具时应该返回的格式,所以 system prompt 中的格式定义也可以删掉了。
4.3 function call 带来的好处
这样一来:
- 所有工具描述都放在相同的地方。
- 所有工具描述也都依照相同的格式。
- AI 使用工具时的回复也都依照相同的格式。
于是人们就能更加有针对性地训练 AI 模型,让它理解这种调用的场景。
甚至在这种情况下,如果 AI 依然生成了错误的回复,因为回复的格式是固定的,AI 服务器端自己就可以检测到并且进行重试,用户根本感觉不到。
这样一来:
- 不仅降低了用户端的开发难度。
- 也节省了用户端重试带来的 token 开销。
正是由于这些好处,现在越来越多的 AI agent 开始从 system prompt 转向 function call。
4.4 function call 的局限与并存状态
function call 也有自己的问题:
- 没有统一的标准。
- 每家大厂的 API 定义都不一样。
- 很多开源模型还不支持 function call。
- 所以真的要写一个跨模型通用的 AI agent 其实还挺麻烦。
因此,system prompt 和 function 这两种方式现在在市面上是并存的。
五、MCP:agent 与 tool 服务之间的通信协议
以上讲的都是 AI agent 和 AI 模型之间的通信方式。接下来看另一边:AI agent 是怎么跟 agent tool 来进行通信的?
5.1 最简单做法:把 AI agent 和 agent tool 写在同一个程序里
最简单的做法是把 AI agent 和 agent tool 写在同一个程序里面,直接函数调用,搞定。
这也是现在大多数 AI agent 的做法。
5.2 问题:通用工具会被多个 agent 重复需要
但是后来人们逐渐发现,有些 tool 的功能其实挺通用的。
比如说一个浏览网页的工具,可能多个 agent 都需要。但我总不能在每个 agent 里面都拷贝一份相同的代码吧,太麻烦了,也不优雅。
于是大家想到了一个办法:把 tool 变成服务,统一托管,让所有的 agent 都来调用。这就是 MCP。
5.3 MCP 是什么:通信协议、MCP server、MCP client
MCP 是一个通信协议,专门用来规范 agent 和 tool 服务之间是怎么交互的。
- 运行 tool 的服务叫做 MCP server。
- 调用它的 agent 叫做 MCP client。
MCP 规定了 MCP server 如何和 MCP client 通信,以及 MCP server 要提供哪些接口。
比如用来查询 MCP server 中有哪些 tool、tool 的功能描述、需要的参数格式等等的接口。
5.4 MCP server 不只提供 tool,还可以提供 resource 和 prompt
除了普通的 tool 这种函数调用的形式,MCP server 也可以:
- 直接提供数据。
- 提供类似文件读写的服务,叫做 resource。
- 或者为 agent 提供提示词的模板,叫做 prompt。
5.5 MCP 的通信方式
MCP server 既可以和 agent 跑在同一台机器上,通过标准输入输出进行通讯,也可以被部署在网络上,通过 HTTP 进行通信。
5.6 关键澄清:MCP 本身和 AI 模型没有关系
这里需要注意的是,虽然 MCP 是为了 AI 而定制出来的标准,但实际上 MCP 本身却和 AI 模型没有关系。
它并不关心 agent 用的是哪个模型,它只负责帮 agent 管理工具、资源和提示词。
六、完整流程:女朋友肚子疼的端到端案例
原文用一个完整例子梳理整个流程:
- 我听说女朋友肚子疼,于是问 AI agent,或者说 client:“我女朋友肚子疼应该怎么办?”
- Agent 会把问题包装在 user prompt 中。
- 然后 agent 通过 MCP 协议从 MCP server 里面获取所有 tool 的信息。
- AI agent 会把这些 tool 的信息或者转化成 system prompt,或者转化成 function call 的格式。
- 然后和用户请求 user prompt 一起打包发送给 AI 模型。
- AI 模型发现有一个叫做 web browse 的网页浏览工具,于是通过普通回复或者 function call 格式产生一个调用这个 tool 的请求,希望去网上搜索答案。
- Agent 收到了这个请求之后,通过 MCP 协议去调用 MCP server 里的 web browse 工具。
- web browse 访问指定的网站之后,将内容返还给 agent。
- agent 再转发给 AI 模型。
- AI 模型再根据网页内容和自己的头脑风暴生成最终的答案:“多喝热水。”
- 最后由 agent 把结果展示给用户。
- 之后我的女朋友是如何夸我贴心的,这里就不细说了。
总之,这就是 system prompt、user prompt、AI agent、agent tool、function call、MCP、AI 模型之间的联系与区别。
它们不是彼此取代的关系,而是像齿轮一样,一起构成了 AI 自动化协作的完整体系。
七、概念关系总表
| 概念 | 在流程中的位置/角色 | 原文中的定义或作用 | 关键细节与例子 |
|---|---|---|---|
| user prompt | 用户发给 AI 模型的消息 | 用户提示词,一般就是我们提出的问题或者想说的话 | 2023 年 GPT 刚发布时,AI 看起来只是聊天框;用户发送 user prompt 时,系统会自动把 system prompt 一起发给 AI 模型 |
| system prompt | 与 user prompt 一起发送给模型的另一类 prompt | 描述 AI 的角色、性格、背景、信息、语气等 | 只要不是用户直接说出来的内容,都可以放进 system prompt;网页端往往系统预设,用户不能随便更改;ChatGPT 的 customize ChatGPT 可写偏好,偏好会自动变成 system prompt 的一部分 |
| AI agent | 模型、工具和最终用户之间的传话程序 | 负责让 AI 自己完成任务 | AutoGPT 是第一个做出尝试的开源项目;解析模型返回、调用函数、把结果丢回模型,反复直到任务完成 |
| agent tool | 提供给 AI 调用的函数或服务 | 如 list file、read file、web browse 等 | 可以写在同一程序里直接函数调用;也可以变成服务统一托管,供所有 agent 调用 |
| function call | 大模型厂商推出的新功能 | 核心思想是统一格式、规范描述 | 每个 tool 用一个 JSON 对象定义:name、description、parameters 等;JSON 对象从 system prompt 剥离;AI 使用工具时的返回格式也被规定;服务器端可检测并重试 |
| MCP | agent 与 tool 服务之间的通信协议 | 规范 agent 和 tool 服务之间怎么交互 | MCP server 运行 tool 服务;MCP client 是调用它的 agent;MCP 规定 server 如何和 client 通信,以及 server 要提供哪些接口 |
| MCP server | 运行 tool 的服务 | 提供 tool、resource、prompt | 可被查询有哪些 tool、功能描述、参数格式;也可提供数据、文件读写服务 resource、提示词模板 prompt;可同机标准输入输出,也可网络 HTTP |
| MCP client | 调用 MCP server 的 agent | 通过 MCP 协议调用 tool 服务 | MCP 不关心 agent 用的是哪个模型,只负责帮 agent 管理工具、资源和提示词 |
| AI 模型 | 最终生成回复或工具调用请求的模型 | 概率模型 | 可能返回格式不对;在 function call 下格式固定,服务器端可检测重试;最终根据网页内容和自己的头脑风暴生成答案 |
八、限制、不确定性与待确认问题
- AI 模型是概率模型,即使 system prompt 写清楚返回格式,仍可能返回格式不对的内容。
- 早期 AI agent 通过自动重试处理格式错误:一次不行就来第二次;但原文认为反复重试总归让人觉得不太靠谱。
- function call 虽然统一了格式、规范了描述,但没有统一标准,每家大厂 API 定义都不一样。
- 很多开源模型还不支持 function call,因此写跨模型通用的 AI agent 挺麻烦。
- 因此 system prompt 和 function 两种方式现在在市面上并存,并不是一种完全取代另一种。
- MCP 虽然是为 AI 定制出来的标准,但实际上 MCP 本身和 AI 模型没有关系;它不关心 agent 用的是哪个模型,只负责帮 agent 管理工具、资源和提示词。
- 网页端聊天机器人中,system prompt 往往是系统预设的,用户不能随便更改;但网站通常提供设置,例如 ChatGPT 的 customize ChatGPT,可让偏好自动变成 system prompt 的一部分。
- 未来 AI 会不会真的让人类被取代,原文明确表示“我不知道”,没有给出确定结论。
- 原文中部分术语以口播/转写形式出现,例如 function col、方coding、方、方身口令、client 等;本文按上下文将其归入 function call、AI agent 等概念,但具体名称和指代在原文中没有进一步展开。
九、作者态度与收束
很多人说 AI 的进步让人焦虑,说人类最终会被 AI 取代。
未来会不会真的变成那样,作者不知道。但作者心里更常浮现的并不是恐惧,而是一种隐约的激动。
因为每个人都很渺小,活在时代的缝隙里。大多数时候,我们只能眼睁睁看着洪流呼啸而过。过去我们所发生的每一次科技巨变,普通人也只是被推着往前走。也许他们换了一种工作或者生活的方式,但是却始终站在了改变之外。
作者不想自己被这样裹挟着前行。
如果说注定要与时代装个满怀的话,那这次想清醒地迎上去,也许就从了解一个小小的 agent 开始。
这里是程序员老王,我们下期再见。