简介:本文从 Prompt、Function Call、Agent、Skill、MCP 五个概念的分层关系入手,重点讲解它们之间的区别、演进逻辑与落地方式。读者将能理解如何从简单提示词逐步构建可调用工具、可规划任务、可复用技能、可标准化接入外部能力的 AI 应用,并掌握通用配置思路、验证手段与排查方法。
本教程要帮助开发者、技术负责人以及企业应用设计者完成一件事:把 Prompt、Function Call、Agent、Skill、MCP 这几个容易混淆的概念彻底分清,并理解它们如何从“让 AI 说话”逐步演进到“让 AI 干活、规划、复用技能、标准化接入外部系统”。
读完本文后,你将能够:
本文适合以下读者:
这些概念并不是彼此替代关系,而是面向不同复杂度的能力层级。理解后,你可以在以下场景中做出更合适的设计选择:
在开始学习与实践之前,建议你具备以下基础知识与环境:
如果上述条件暂时不完全具备,也可以先理解概念和设计思路,再结合自身项目逐步实操。
为了不陷入局部细节,先用一个总览图建立认知框架。这五个概念可以按照能力维度由浅入深排列:
可以用一句话概括:
下面逐层拆解。
Prompt 是调用大模型时传入的文本指令。它通常包含:
Prompt 设计的好坏,直接影响回答质量。它是所有上层能力的基础,因为无论 Function Call、Agent 还是 Skill,内部都仍然依赖 Prompt 来传递意图和约束。
在一个 Java 风格的示例中,可以把 Prompt 看作一个组合对象。示例如下:
public class PromptService {private final ModelGateway modelGateway;public PromptService(ModelGateway modelGateway) {this.modelGateway = modelGateway;}public String generateTechnicalExplanation(String question) {String systemPrompt = "你是一名资深技术讲解员,擅长用通俗语言解释复杂概念。";String userPrompt = "请解释:" + question;String fullPrompt = buildPrompt(systemPrompt, userPrompt);return modelGateway.complete(fullPrompt);}private String buildPrompt(String system, String user) {return "【系统指令】\n" + system + "\n\n【用户问题】\n" + user;}}
该示例中的 ModelGateway 是抽象接口,你可以替换为任何支持大模型推理的服务。这样设计的目的是让 Prompt 构造逻辑与底层模型解耦。
纯 Prompt 只能让 AI 生成文本。如果业务需要 AI 查询最新库存、创建工单、检索内部文档或执行计算,仅靠文本输出不够。Function Call 的核心思路是:
模型不直接执行函数,而是根据上下文返回“函数调用请求”,由应用侧负责真实执行,再把执行结果回传给模型。
这种方式避免了模型直接操作生产系统的风险,也便于做权限控制、审计和异常处理。
一个典型的 Function Call 流程如下:
示意代码:
public class FunctionCallService {private final ModelGateway modelGateway;public String handleUserRequest(String userMessage) {List<FunctionDefinition> functions = List.of(new FunctionDefinition("queryInventory","查询指定商品的当前库存",Map.of("sku", "商品编码,字符串类型","warehouse", "仓库编码,字符串类型,可选")));ModelResponse response = modelGateway.completeWithFunctions(buildSystemPrompt(),userMessage,functions);if (response.hasFunctionCall()) {FunctionCall call = response.getFunctionCall();if ("queryInventory".equals(call.getName())) {String sku = call.getArgument("sku");String warehouse = call.getArgument("warehouse");int stock = inventoryService.query(sku, warehouse);return modelGateway.completeWithFunctionResult(buildSystemPrompt(),userMessage,call,stock);}}return response.getText();}}
以上代码仅为通用逻辑演示,不代表任何特定框架 API。
验证 Function Call 是否正常,可以准备如下测试用例:
Function Call 是“一次性”的:模型判断要调用某个函数,应用执行后返回结果。但当任务需要多步骤推理、多次工具调用、根据中间结果调整策略时,就需要 Agent。
Agent 的关键特征如下:
一个简单的 Agent 可以这样设计:
public class SimpleAgent {private final ModelGateway modelGateway;private final ToolRegistry toolRegistry;private final int maxIterations;public String run(String userTask) {List<Message> messages = new ArrayList<>();messages.add(new Message("system", buildAgentSystemPrompt()));messages.add(new Message("user", userTask));for (int i = 0; i < maxIterations; i++) {AgentDecision decision = modelGateway.planNextStep(messages, toolRegistry.listTools());if (decision.shouldFinish()) {return decision.getFinalAnswer();}ToolResult result = toolRegistry.execute(decision.getToolName(), decision.getArguments());messages.add(new Message("tool", result.toJSON()));messages.add(new Message("assistant", "工具执行完成,继续判断下一步。"));}return "任务超过最大执行轮次,已停止。";}}
Agent 解决的是“如何执行某个任务”,而 Skill 解决的是“如何让某个专项能力被稳定复用”。一个 Skill 通常包含以下内容:
以“生成标准周报”为例:
示意配置如下:
{"skillName": "weekly_report_generator","description": "根据工作要点生成标准周报","inputSchema": {"completed": "string","inProgress": "string","risks": "string","nextWeekPlan": "string"},"outputFormat": "markdown","promptTemplate": "你是一名项目管理助手,请根据以下信息生成周报……","tools": ["queryProjectTasks"]}
MCP 不是某种具体工具,而是一种标准化连接思路。它试图解决一个常见问题:每个外部系统都有不同接口格式,导致 AI 应用需要为每个系统写适配器。MCP 的思路类似于 USB:
为了实现“AI 世界的 USB 接口”,通常会抽象以下角色:
通用通信流程如下:
示意伪代码:
能力注册中心├── 工具名称:searchDocuments├── 描述:在企业知识库中搜索文档├── 参数:query, topK, filter└── 返回:文档列表宿主应用启动时:加载所有可用能力描述将能力转换为模型可理解的工具定义用户请求到达时:模型判断是否需要调用工具宿主应用按统一协议调用外部系统返回结果并继续生成回答
在实际工程中,除了代码实现,还需要关注配置管理。
每个工具或能力都应配置:
不同层面对模型能力要求不同:
下面用一个完整场景串联五个概念。
用户向企业助手提问:“华东仓的 SKU 1001 库存还够发本周订单吗?如果不够,请给出补货建议。”
可通过以下方式验证效果:
可能原因:
排查思路:
可能原因:
排查思路:
可能原因:
排查思路:
本文围绕 Prompt、Function Call、Agent、Skill、MCP 五个概念展开,重点不是简单区分定义,而是帮助读者理解它们在不同复杂度场景下的分层价值:
如果你正在设计企业级 AI 应用,不建议一开始就追求完整 Agent 或全面 MCP 接入。更务实的路径是:先做好 Prompt 与 Function Call,再逐步引入 Agent 循环,把高频场景沉淀为 Skill,最后用标准化思路整合多个外部系统。这样可以在可控复杂度下获得稳定收益,同时为后续扩展留出空间。