当前位置: 首页 > news >正文

Prompt、Skill、MCP 怎么选?用同一个任务实测三种 AI 工程化方案

让 AI 写代码、查数据库、生成报告——同一个需求,有人靠精心写 Prompt,有人封装成 Skill,有人接 MCP 服务器。这三种方式到底差在哪?什么时候该用哪个?我用一个真实的"查询商品库存"任务,分别用三种方式实现并实测对比,给出选型结论。

三者到底是什么关系

先把概念理清,很多人把它们混为一谈。这三者不是替代关系,而是控制粒度从细到粗的三个层次:

方案本质控制粒度类比
Prompt自然语言指令,模型当次推理生效最细,一次对话临时口头交代
Skill打包好的指令+脚本+资源,可复用中等,一个任务写好的 SOP 操作手册
MCP标准化的工具接入协议,连接外部系统最粗,一套能力给 AI 装一个外挂插件

💡 核心区别:Prompt 是"说什么",Skill 是"怎么做(封装好的步骤)",MCP 是"能做什么(连接外部能力)"。三者可以叠加——一个 Skill 里可以调用 MCP 提供的工具。

实测任务:查询商品库存

假设需求:用户问"商品 A 还有多少库存",AI 要查真实数据库并回答。下面用三种方式分别实现。

方式一:纯 Prompt 驱动

最简单的方式,把数据库信息直接塞进提示词,让模型基于上下文回答:

# 纯 Prompt 方式:把库存数据直接拼进提示词 inventory_data = """ 商品A:库存 150 商品B:库存 0 商品C:库存 320 """ ​ prompt = f""" 你是一个库存查询助手。以下是当前库存数据: {inventory_data} 用户问题:商品A还有多少库存? 请基于上述数据回答。 """ ​ # 调用大模型 response = llm.chat(prompt) print(response) # 输出:商品A还有150件库存

问题马上暴露:库存数据是动态的,每分钟都在变。把数据写死在 Prompt 里,数据一更新就全错。而且数据量一上来(上万商品),Prompt 塞不下也费 token。

方式二:封装成 Skill

把"查询库存"封装成一个可复用的 Skill。Skill 的标准结构是一个文件夹 + 一个 SKILL.md 指令文件 + 配套脚本。Anthropic 官方的 anthropics/skills 仓库就是按这个结构组织的,里面放了一堆公开可复用的技能(pdf 处理、Excel 生成、艺术创作等)。

按这个标准结构,库存查询技能长这样:

# inventory-query/SKILL.md --- name: inventory-query description: 查询商品库存。当用户问"XX还有多少库存"时触发。 --- ​ ## 执行步骤 1. 从用户问题中提取商品名称 2. 执行 scripts/query_stock.js <商品名> 查询真实库存 3. 用查到的数据回答用户
// inventory-query/scripts/query_stock.js - 实时查询数据库 const productName = process.argv[2]; ​ // 模拟查数据库(实际项目连 MySQL/Redis) const stock = queryDatabase("SELECT stock FROM products WHERE name = ?", [productName]); ​ // 输出查询结果,供 Skill 的指令层使用 console.log(JSON.stringify({ product: productName, stock: stock })); // 输出:{"product":"商品A","stock":150}

Skill 的执行流程:模型读到 SKILL.md → 识别到用户在问库存 → 自动调用query_stock.js→ 拿到真实数据 → 组织语言回答。

💡Skill 解决了 Prompt 的痛点:数据实时查询(不写死)、逻辑可复用(多个场景共享)、改动集中(改脚本不用改提示词)。想看更多真实例子,可以直接翻 anthropics/skills 官方仓库的源码。

方式三:接入 MCP 服务器

MCP(Model Context Protocol)是一套标准协议,让 AI 客户端能调用外部工具。把"查库存"做成一个 MCP 工具,任何支持 MCP 的客户端(Claude Desktop、ZCode、Cursor 等)都能直接用:

// mcp-config.json - 注册 MCP 服务器 { "mcpServers": { "inventory": { "command": "node", "args": ["./inventory-mcp-server.js"] } } }
// inventory-mcp-server.js - MCP 服务器实现 import { Server } from "@modelcontextprotocol/sdk/server"; import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio"; ​ // 创建 MCP 服务器,声明提供的工具 const server = new Server( { name: "inventory-server", version: "1.0.0" }, { capabilities: { tools: {} } } ); ​ // 注册工具:query_stock(查库存) server.setRequestHandler("tools/list", async () => ({ tools: [{ name: "query_stock", description: "查询商品实时库存", inputSchema: { type: "object", properties: { product: { type: "string", description: "商品名称" } }, required: ["product"] } }] })); ​ // 处理工具调用:真正查数据库 server.setRequestHandler("tools/call", async (request) => { if (request.params.name === "query_stock") { const product = request.params.arguments.product; // 查真实数据库 const stock = queryDatabase("SELECT stock FROM products WHERE name = ?", [product]); return { content: [{ type: "text", text: `${product}当前库存:${stock}件` }] }; } }); ​ // 启动服务器,通过标准输入输出通信 const transport = new StdioServerTransport(); await server.connect(transport);

接入 MCP 后,用户直接在 AI 客户端里问"商品 A 库存",客户端自动发现并调用query_stock工具,全程不需要用户知道有这个工具存在。

⚠️MCP 的本质:它不关心 AI 客户端是 Claude 还是 GPT,只要支持 MCP 协议就能调用。这是一套跨平台的工具标准,类似 USB 接口——做一次,到处用。

三种方式横向对比

用"查询库存"这个任务,从 6 个维度对比:

维度纯 PromptSkillMCP
实现成本⭐ 最低,写几行字⭐⭐ 中等,写指令+脚本⭐⭐⭐ 较高,实现服务器+协议
数据实时性❌ 写死,易过期✅ 脚本实时查✅ 工具实时查
跨客户端复用❌ 换个 AI 就失效⚠️ 部分支持✅ 标准协议,处处可用
维护成本❌ 改逻辑要重写提示词✅ 改脚本即可✅ 改服务器即可
适合数据量小(受 token 限制)任意任意
上手门槛零门槛需懂脚本需懂协议开发

三种方案的真实耗时对比

实测搭建"查库存"功能的全过程,记录耗时:

阶段纯 PromptSkillMCP
编写2 分钟15 分钟45 分钟
接入客户端无需配置加载注册服务器
首次可用即时重载即可重启客户端
响应延迟~0.5 秒(纯推理)~0.8 秒(推理+脚本)~1.2 秒(推理+工具调用)

💡 测试环境:Claude 3.5 + 本地 Node.js 18,库存数据库为本地 MySQL 8.0。每个方案实测 5 次取中位数。

关键结论:Prompt 最快但最脆弱,MCP 最强但最重。没有银弹,看场景选。

怎么选:决策树

别记概念,记住这个决策顺序:

你的需求是什么? │ ├─ 一次性、简单的任务(总结、翻译、改写) │ → 用 Prompt 就够了,别过度工程化 │ ├─ 重复出现的固定流程(每次都要查库+格式化+生成报告) │ → 封装成 Skill,写一次复用多次 │ └─ 要给多个 AI 客户端提供统一能力(团队共享、跨工具复用) → 做成 MCP 服务器,一劳永逸

💡 三者可以组合:一个 Skill 的内部可以调用 MCP 提供的工具。比如"库存分析报告"这个 Skill,内部用 MCP 的query_stock工具取数,再用 Prompt 指令组织报告格式。

常见问题

Q: Skill 和传统的系统提示词(System Prompt)有什么区别?

A: System Prompt 只是一段文本指令,没有脚本和文件资源。Skill = 指令 + 脚本 + 模板 + 数据,是一个完整的可执行单元。可以把 Skill 理解成"带代码的强化版 Prompt"。

Q: MCP 一定要自己写服务器吗?

A: 不一定。社区有大量现成的 MCP 服务器(GitHub、文件系统、数据库、搜索引擎等),直接配置就能用。自己写只在有定制需求时。可以在 MCP 官方仓库 找现成的。

Q: 这三种方式会互相替代吗?

A: 不会。它们解决不同层次的问题。Prompt 解决"一次表达",Skill 解决"流程复用",MCP 解决"能力共享"。实际项目里三者共存才是常态。

Q: 用 Prompt 实现 Function Calling 不也算"调用工具"吗?

A: 是的,Function Calling 是 Prompt 和工具之间的桥梁。但它是各家 API 私有协议(OpenAI 一套、Anthropic 一套),MCP 的意义就是统一这套协议,让工具写一次到处用。

总结

  • Prompt:最轻量,适合一次性简单任务。痛点是数据写死、不可复用

  • Skill:封装指令+脚本,适合重复出现的固定流程。解决数据实时性和逻辑复用

  • MCP:标准化工具协议,适合跨客户端共享能力。成本最高但通用性最强

  • 选型原则:一次性用 Prompt,重复流程用 Skill,跨工具共享用 MCP

  • 三者可组合:Skill 内部可调用 MCP 工具,不是非此即彼

AI 工程化不是堆概念,是按控制粒度选对工具。简单的需求别上 MCP,复杂的能力别只用 Prompt。你的项目里现在用的是哪种?有没有遇到过"Prompt 写到几百行还管不住"的情况?欢迎评论区交流 👇

参考

  • Model Context Protocol 官方规范

  • Anthropic Skills 文档

  • MCP TypeScript SDK

http://www.jsqmd.com/news/1197528/

相关文章:

  • 腾讯Hy3大模型:295B参数Agent技术实现数据分析全流程自动化
  • 滤波器基础与应用:从原理到工程实践
  • C++编程从入门到实践:面向对象与STL核心特性详解
  • 安卓虚拟相机终极指南:3分钟掌握摄像头魔法
  • XILINX FPGA GTX收发器实战:从PCS/PMA架构到高速接口设计避坑
  • FPGA设计核心要点:从架构到实现的工程实践
  • 51单片机LCD1602库函数封装与实战应用
  • Python开发C盘清理工具:文件扫描、安全删除与日志记录实战
  • pybind11实战指南:C++与Python无缝互操作的核心技术与避坑
  • 从开源到实战:LOLI遥控器STC12C5A60S2核心问题排查与硬件优化指南
  • KLayout终极指南:从新手到专家的版图验证实战教程
  • 移动测试替代方案推荐:从阿里云移动测试迁移到优测云测试平台实测
  • 【实战解析】netstat -ano 命令:从输出到进程定位的完整排查指南
  • 【嵌入式实战】从零配置DMA:以STM32F4为例详解传输模式与性能优化
  • 为什么 Claude Code 能写代码,却常让重构变成“修bug大赛”?
  • STM32 ADC采样周期与系统时钟分频的权衡计算
  • 传感网技术解析:从通信协议到边缘智能应用
  • ChatGPT需求提炼实战手册(含NASA级需求验证模板+企业级脱敏案例库)
  • OpenAI Codex:本地AI编程代理的桌面端与CLI双模式实战指南
  • Python通达信数据接口实战指南:高效获取A股实时行情的专业方案
  • DDR2与DDR3信号完整性设计差异及PCB实现要点
  • 从热等效到ADC采样:深入解析有效值、平均值与均方根值的工程实践
  • 零基础学Arcgis(八)| 空间参考:从理论到实战,构建你的地理数据基石
  • 大语言模型选型与落地实践:从推理到多模态的测试指南
  • 矩阵特征值与特征向量的核心性质及其应用场景解析
  • Excel多文件批量查询终极指南:告别繁琐搜索,一键定位关键数据
  • C语言实现Windows C盘清理工具:从文件系统原理到工程实践
  • 高精尖装备赛道扩容!六轴六足位移台行业发展现状、痛点机遇及前景解析
  • QueryExcel:基于.NET的高效Excel批量查询工具,5分钟完成上百文件检索
  • 【项目管理实战指南】从紧前关系到敏捷发布:六大核心工具串联项目进度命脉