学习资源:小林 coding:https://www.xiaolincoding.com/
Function Calling
Function Calling 我的理解是这样一套机制:开发者用 JSON schema 把工具描述好传给模型,模型判断需要调工具的时候不输出自然语言,而是直接输出一段结构化的 tool_calls JSON,告诉你:我要调哪个函数、参数是什么,你的代码拿到这段 JSON 去真正执行,把结果塞回对话,模型再生成最终答案。
整个流程本质上是两轮对话:第一轮模型说「我需要调这个工具」,你去执行,第二轮模型拿到执行结果说「答案是这个」。
它解决了使用自然语言输出脆弱的问题。
MCP
MCP 是 Anthropic 在 2024 年底推出的开放协议,我理解它主要解决的是「模型接工具太碎片化」的问题。
在 MCP 出现之前,每接一个新工具都要单独写集成代码、处理认证、适配格式,而且这套代码和具体模型强绑定,换个模型就得重写,非常繁琐。
MCP 的思路是把这件事标准化:工具提供方按协议实现一个 Server,任何支持 MCP 的 AI 客户端就能直接接进来,一次实现到处复用。
协议定义了三类能力:Tools 用于执行有副作用的操作,Resources 是只读数据,Prompts 是提示词模板,底层通信用 JSON-RPC 2.0。我把它理解成给AI 接工具这件事定了一套行业标准。

先说 Tools(工具),这是最核心的能力,对应 Function Calling 里的「函数」。Tools 的本质是「有副作用的操作」,什么叫有副作用?就是执行之后会改变外部世界的状态。创建文件、提交代码、发送 Slack 消息、调用第三方 API,这些都属于 Tools,因为执行完之后环境发生了变化,而且往往不可逆。正因为如此,Tools 通常需要用户授权确认才能执行,不能让模型想调就调。
再说 Resources(资源),它和 Tools 最本质的区别就一个字:只「读」。Resources 不会改变任何东西,只是把数据提供给模型看。读取日志文件、查询数据库记录、获取文档内容,都属于 Resources 的范畴。你可以把 Resources 理解成「工具的资料室」,模型可以进去查资料,但不能修改里面的东西。正因为只读、无副作用,Resources 可以更宽松地暴露给模型,不需要像 Tools 那样谨慎授权。
最后是 Prompts(提示模板),这个能力很多人容易忽略,但在团队协作场景下特别有用。Prompts 就是预定义的提示词模板,带参数占位符,解决的是「每次都要手写重复 prompt」的问题。举个例子,你的团队有一套固定的代码审查标准 prompt,接受「编程语言」和「代码内容」两个参数,调用时只需传入参数值,就能自动展开成完整的提示词,不用每次从头写。把公司积累的优质 prompt 封装成 MCP Prompts,所有人都能复用,统一标准,这在实际工程中很实用。