一句话定义:Sampling(反向采样请求)是 Model Context Protocol(MCP)中的一种反向调用机制——MCP 服务器(server)在干活的过程中,可以主动请求 MCP 客户端(client)用它背后的模型(LLM)生成一段内容,再把这段结果拿回来自己用。
平时是“你问它答”,Sampling 是“它请你帮忙”
MCP 的常规流程是单向的:客户端(比如某个 AI 应用、IDE 插件)把工具清单和对话发给服务器,服务器执行工具——读文件、查数据库、调接口——然后返回结果。模型在客户端这边,服务器那边没有模型。
Sampling 把方向倒了过来。服务器可以发出一条“请帮我生成点东西”的请求,附上提示词和期望的参数,客户端收到后调用自己的模型,再把模型输出回传给服务器。整个过程里,服务器始终没有模型的访问权,它只能“提议”。
一个生活化的比方
你去银行柜台办事,通常是你提要求、柜员执行。Sampling 相当于柜员反过来问你:“这张表我填不明白,能不能借你的手机打给你们公司会计问一句?”手机是你的,话费算你的,号码也是你拨的,柜员只负责说清楚要问什么。答不答应、怎么问、要不要先给旁边的人过一眼,决定权都在你手上。
这正是设计意图:模型调用要花钱、要过审、要留痕,MCP 把“谁能真正调模型”这件事摁在客户端。服务器想用智能能力,只能提出请求;客户端可以拒绝、可以改写提示词、可以弹窗让人确认。它也解决了一个很实际的问题——以前服务器想用模型,就得自己内置一个 API key,既增加配置负担,也让服务器有机会偷偷调用。
和相邻概念的区别
| 机制 | 谁发起 | 谁执行 | 典型场景 |
|---|---|---|---|
| Tools(工具) | 客户端/模型 | 服务器 | 服务器读文件、查库、发请求 |
| Resources / Prompts | 客户端 | 服务器 | 服务器提供文档、模板 |
| Sampling(反向采样) | 服务器 | 客户端调模型 | 服务器请模型总结、抽取、改写 |
和“服务器自己直连模型 API”的区别也在这里:没有密钥、走客户端、可被人审。
对实际工作的意义
对服务器开发者:不用分发密钥、不用内置模型 SDK,把“需要智能”的那一步外包给客户端。比如一个抓网页的工具,抓到一段杂乱的 HTML,就可以请客户端模型帮忙抽成结构化字段——工具保持轻,智能由宿主提供。
对客户端和平台方:保留了成本控制与审计口子,可以在界面里明确问一句“这个服务器想生成内容,允许吗”。
对普通职场人:第三方工具会变得更“聪明”,但不会因此拿走你的账号和额度;代价是你会更常看到“是否允许”的确认框。
需要说明的是,各家客户端对 Sampling 的支持程度和确认策略并不一致,具体行为以官方页面为准。另外,服务器发来的提示词本质上仍是外部输入,值得当作不可信内容对待。
