Prompt、Agent、Function Call、Skill、MCP,傻傻分不清楚?

📅 发布时间:2026/7/10 12:23:14 👁️ 浏览次数:
Prompt、Agent、Function Call、Skill、MCP,傻傻分不清楚?
前言最近AI越来越火了。我发现里面有很多概念有些小伙伴有点分不清楚比如Prompt、Agent、Function Call、Skill、MCP等。今天这篇文章专门跟大家一起聊聊这个话题希望对你会有所帮助。更多项目实战在项目实战网Java突击队核心概念关系图先上干货这张图让你从整体上理解这五个概念是如何分层递进的一句话概括Prompt是你跟AI说的“人话”Function Call让AI能“动手干活”Agent让AI会“思考规划”Skill是AI的“职业技能证书”MCP是AI世界的“USB接口”下面我们一层一层拆开揉碎了讲每层都有Java代码示例。第一层Prompt——和AI对话的“普通话”1.1 什么是PromptPrompt提示词就是你输入给AI的文本指令。它就像你去餐厅点菜时说的“来一份宫保鸡丁”AI就是那个服务员听懂你的话然后给你上菜。在Java里调用AI模型的第一步就是构造Prompt。我用最简单的Spring AI示例来演示importorg.springframework.ai.chat.ChatClient;importorg.springframework.ai.chat.prompt.Prompt;importorg.springframework.ai.chat.prompt.SystemPrompt;importorg.springframework.ai.chat.prompt.UserPrompt;ServicepublicclassAIService{privatefinalChatClientchatClient;publicAIService(ChatClientchatClient){this.chatClientchatClient;}publicStringaskAI(Stringquestion){// 构造Prompt可以包含系统消息和用户消息PromptpromptnewPrompt(newSystemPrompt(你是一个Java架构师擅长用通俗的语言解释技术概念。),newUserPrompt(question));// 调用AI并返回结果returnchatClient.call(prompt).getResult().getOutput().getContent();}}这里的SystemPrompt和UserPrompt就是最基础的Prompt形式。它们决定了AI的身份和你要问的问题。1.2 Prompt的高级玩法光有基础Prompt还不够在实际应用中我们经常需要提示词工程来引导AI做出更好的回答。比如publicStringgenerateJavaCode(Stringrequirement){StringpromptTemplate 你是一个资深的Java开发工程师。 请根据以下需求生成Java代码代码要包含必要的注释并考虑异常处理 需求%s 请输出完整的Java类代码。 ;StringpromptString.format(promptTemplate,requirement);returnchatClient.call(newPrompt(prompt)).getResult().getOutput().getContent();}Prompt的本质它是人类意图与AI能力之间的“翻译官”。Prompt写得好AI才能干得好。第二层Function Calling——让AI从“说话”到“动手”Prompt只能让AI“说话”但AI想干点实事比如查数据库、发邮件、调用第三方API时就无能为力了。Function Calling函数调用就是来解决这个问题的。2.1 什么是Function CallingFunction Calling允许开发者在调用大模型时注册一系列函数工具模型在生成回复时如果判断需要调用外部工具就会返回一个结构化的请求由开发者执行真实的函数再把结果返回给模型生成最终答案。原理图如下2.2 Java实现Function Calling我用LangChain4j来演示因为它对Java开发者很友好。首先定义工具函数importdev.langchain4j.agent.tool.Tool;importjava.time.LocalDateTime;importjava.time.format.DateTimeFormatter;publicclassWeatherTool{Tool(获取指定城市的实时天气)publicStringgetWeather(Stringcity){// 这里应该是真实的API调用为了演示我们模拟数据if(北京.equals(city)){return北京当前天气晴温度25℃湿度40%;}elseif(上海.equals(city)){return上海当前天气小雨温度22℃湿度80%;}else{return抱歉暂不支持该城市天气查询;}}Tool(获取当前时间)publicStringgetCurrentTime(){returnLocalDateTime.now().format(DateTimeFormatter.ofPattern(yyyy-MM-dd HH:mm:ss));}}然后创建AI服务并绑定工具importdev.langchain4j.model.chat.ChatLanguageModel;importdev.langchain4j.model.openai.OpenAiChatModel;importdev.langchain4j.service.AiServices;publicclassWeatherAssistant{interfaceAssistant{Stringchat(StringuserMessage);}publicstaticvoidmain(String[]args){ChatLanguageModelmodelOpenAiChatModel.builder().apiKey(System.getenv(OPENAI_API_KEY)).modelName(gpt-4).build();AssistantassistantAiServices.builder(Assistant.class).chatLanguageModel(model).tools(newWeatherTool())// 注册工具.build();// 用户提问Stringresponseassistant.chat(北京现在天气怎么样);System.out.println(response);responseassistant.chat(现在几点了);System.out.println(response);}}当用户问天气时模型会判断需要调用getWeather函数LangChain4j自动处理了函数调用的整个流程最后把结果整合成自然语言返回。2.3 Function Calling的核心价值让AI从“静态知识”变成“动态能力”。没有Function CallingAI只能回答训练数据里的内容有了它AI可以实时获取最新信息甚至可以操作你的系统。第三层Agent——会思考、会规划的“智能体”Function Calling让AI能调用工具但它还是被动的一问一答。如果遇到复杂任务比如“帮我规划一次杭州三日游”需要查天气、查景点、查酒店、算预算……这时候就需要Agent智能体出场了。3.1 什么是AgentAgent是一个能够感知环境、做出决策并执行动作的自主系统。它不像Function Calling那样只是“单次工具调用”而是具备完整的“思考-行动-观察”闭环能力。通俗说Function Calling是“会用手”Agent是“有大脑”。3.2 ReActAgent的核心决策模式目前主流Agent都采用ReActReasoning Acting框架。它的工作流程是思考Thought分析当前状态决定下一步要做什么行动Action调用某个工具观察Observation获取工具返回的结果循环直到任务完成3.3 Java实现一个简单的ReAct Agent我们用LangChain4j的AiServices结合工具来实现Agent。首先定义多个工具importdev.langchain4j.agent.tool.Tool;publicclassTravelTools{Tool(查询某城市未来一周的天气)publicStringqueryWeather(Stringcity){// 模拟天气查询returncity未来一周天气前三天晴后四天多云气温20-28℃;}Tool(查询某城市的知名景点)publicStringqueryAttractions(Stringcity){// 模拟景点查询if(杭州.equals(city)){return杭州知名景点西湖、灵隐寺、西溪湿地、宋城;}elseif(上海.equals(city)){return上海知名景点外滩、东方明珠、迪士尼乐园;}return暂无该城市景点信息;}Tool(计算预算)publicStringcalculateBudget(Stringcity,intdays){// 模拟预算计算intbase500;inttotalbase*days;returncitydays天游预算约为total元不含大交通;}}然后创建Agentimportdev.langchain4j.model.chat.ChatLanguageModel;importdev.langchain4j.model.openai.OpenAiChatModel;importdev.langchain4j.service.AiServices;importdev.langchain4j.memory.chat.MessageWindowChatMemory;publicclassTravelAgent{interfaceTravelPlanner{StringplanTrip(Stringrequest);}publicstaticvoidmain(String[]args){ChatLanguageModelmodelOpenAiChatModel.builder().apiKey(System.getenv(OPENAI_API_KEY)).modelName(gpt-4).build();TravelPlanneragentAiServices.builder(TravelPlanner.class).chatLanguageModel(model).tools(newTravelTools()).chatMemory(MessageWindowChatMemory.withMaxMessages(20))// 记忆让Agent能记住上下文.build();Stringresultagent.planTrip(帮我规划一个3天的杭州游包括天气、景点和预算);System.out.println(result);}}这个Agent会自己决定先查天气、再查景点、再算预算然后把所有信息整合成一份完整的旅行计划。整个过程是自主的不需要我们写死流程。3.4 Agent与Function Calling的关系Function Calling是Agent的“手”Agent是拥有“大脑”的完整系统。Agent通过Function Calling调用工具但Agent多了“规划”和“记忆”能力能处理更复杂的任务。更多项目实战在项目实战网Java突击队第四层Skill——封装专业知识的“技能包”当Agent需要处理不同领域的任务时如果让一个Agent掌握所有知识和工具会变得臃肿且容易出错。这时候就需要Skill技能的概念。4.1 什么是SkillSkill是一套封装了特定领域知识、最佳实践和工具组合的“技能包”。它就像我们人类的职业资格证书——一个医生有“看病技能”一个程序员有“写代码技能”。Anthropic最早提出Skill概念一个Skill通常包含领域专用的提示词模板一组相关的工具函数特定的工作流逻辑4.2 Java中如何组织Skill我们可以把Skill定义为一个独立的模块包含自己的工具类和提示模板。例如一个“前端开发Skill”// 前端技能专属工具publicclassFrontendTools{Tool(生成React组件代码)publicStringgenerateReactComponent(StringcomponentName,Stringprops){return import React from react; const %s (%s) { return divHello, {props.name}/div; }; export default %s; .formatted(componentName,props,componentName);}Tool(检查CSS命名规范)publicStringcheckCssNaming(StringcssCode){// 模拟CSS检查逻辑returnCSS规范检查通过;}}// 前端技能的提示词模板publicclassFrontendPrompts{publicstaticfinalStringSYSTEM_PROMPT 你是一个资深前端开发工程师精通React、Vue、CSS等前端技术。 请严格按照前端最佳实践生成代码确保代码可维护。 ;}// 创建前端专家AgentpublicclassFrontendAgent{publicstaticvoidmain(String[]args){ChatLanguageModelmodelOpenAiChatModel.builder().apiKey(System.getenv(OPENAI_API_KEY)).modelName(gpt-4).build();DeveloperassistantAiServices.builder(Developer.class).chatLanguageModel(model).tools(newFrontendTools()).systemMessageProvider(ignored-FrontendPrompts.SYSTEM_PROMPT).build();Stringcodeassistant.generateCode(创建一个计数器组件有加一减一按钮);System.out.println(code);}}4.3 Skill与Agent的关系在大型系统中我们通常会有多个Agent每个Agent加载不同的Skill前端Agent加载ReactSkill、CSSSkill后端Agent加载SpringSkill、DatabaseSkill运维Agent加载K8sSkill、MonitoringSkill每个Agent只拥有完成自己领域任务所需的最小知识集既提高了精准度又保障了安全。4.4 Function Call和Skill有什么区别一句话说清本质Function Call 是一种能力让AI能够调用外部函数工具Skill 是一个模块封装了特定领域的知识、最佳实践和一组相关的Function Call用个比喻Function Call 像锤子、螺丝刀、扳手这些具体工具Skill 像木工工具箱里面有锤子、锯子、尺子还附带一本《木工操作手册》下面从代码看看它们的区别。Function Call单个工具publicclassWeatherTool{Tool(获取天气)publicStringgetWeather(Stringcity){// 调用天气APIreturncallWeatherAPI(city);}}这个工具只能干一件事查天气。Skill完整的专业能力包// 前端开发Skill - 包含多个工具 专业知识publicclassFrontendSkill{// 工具1生成React组件Tool(生成React组件)publicStringgenerateComponent(Stringname){returnReact组件代码...;}// 工具2检查CSS规范Tool(检查CSS规范)publicStringcheckCss(Stringcss){return检查结果...;}// 工具3优化性能建议Tool(提供前端性能优化建议)publicStringperformanceAdvice(Stringcode){return优化建议...;}// 还有领域知识不是工具而是提示词模板publicstaticfinalStringSYSTEM_PROMPT你是一个资深前端专家精通React、Vue、CSS优化...;}这个Skill包含了多个工具还带有领域知识。核心区别对比表维度Function CallSkill本质单一能力能力集合 知识粒度原子操作业务模块是否包含工具本身就是工具包含多个工具是否包含知识不包含包含领域知识和最佳实践类比单个螺丝刀电工工具箱 电工手册应用场景查天气、发邮件等单次操作前端开发、运维管理、财务分析等专业领域代码形式单个Tool方法多个Tool方法 系统提示词为什么需要区分这两个概念设计层面的解耦Function Call是底层能力Skill是业务封装。底层能力稳定上层业务可以灵活组合。复用性好的Skill可以跨项目复用就像代码库里的工具包。安全性可以给不同的Agent分配不同的Skill实现权限隔离前端Agent不能调用后端数据库。总结Function CallAI的“手”能干活SkillAI的“职业培训证书”让AI知道怎么干好某个领域的事Function Call 领域知识 最佳实践 Skill下次再有人问这个问题你可以直接甩给他这张表然后说“锤子是Function Call工具箱是Skill懂了吗”更多项目实战在项目实战网Java突击队第五层MCP——统一工具调用的“世界语”随着Agent越来越多每个Agent都要接入不同的工具每个AI模型OpenAI、Claude、文心一言的Function Calling格式还不一样。这就导致开发者要针对每个模型写一套工具适配代码非常痛苦。MCPModel Context Protocol模型上下文协议就是来解决这个问题的。5.1 什么是MCPMCP是Anthropic提出的一个标准化协议它定义了一套统一的接口让AI模型可以像USB设备一样动态发现和调用工具。核心思想工具以Server的形式暴露MCP ServerAI应用作为ClientMCP Client连接ServerServer提供工具清单和调用接口Client统一格式调用无需关心底层工具具体实现5.2 MCP的工作流程更多项目实战在项目实战网Java突击队5.3 Java中使用MCPSpring AI 2.0已经原生支持MCP可以非常方便地构建MCP客户端和服务器。定义MCP Server工具提供方importorg.springframework.ai.mcp.server.McpServer;importorg.springframework.ai.mcp.server.McpServerFeatures;importorg.springframework.ai.mcp.server.McpServerRegistrar;importorg.springframework.ai.mcp.spec.McpSchema;ComponentpublicclassWeatherMcpServer{BeanpublicMcpServerRegistrarweatherServer(){// 定义工具McpSchema.ToolweatherToolnewMcpSchema.Tool(getWeather,获取城市天气,newMcpSchema.JsonSchema(Map.of(type,object,properties,Map.of(city,Map.of(type,string,description,城市名称)),required,List.of(city))));// 创建ServerMcpServerFeatures.AsyncServerSpecserverSpecMcpServerFeatures.async().tool(weatherTool,(request)-{Stringcityrequest.arguments().get(city).asText();// 执行真实逻辑Stringweather北京当前天气晴25℃;returnCompletableFuture.completedFuture(newMcpSchema.CallToolResult(List.of(newMcpSchema.TextContent(weather)),false));});returnMcpServerRegistrar.builder().name(weather-server).server(serverSpec).build();}}MCP Client调用importorg.springframework.ai.mcp.client.McpClient;importorg.springframework.ai.mcp.client.McpClientFeatures;ServicepublicclassAIServiceWithMCP{privatefinalChatClientchatClient;privatefinalMcpClientmcpClient;publicAIServiceWithMCP(ChatClientchatClient){this.chatClientchatClient;// 连接到MCP Serverthis.mcpClientMcpClientFeatures.async().connect(weather-server,http://localhost:8080/mcp);}publicStringaskWeather(Stringcity){// 通过MCP调用工具McpSchema.CallToolResultresultmcpClient.callTool(getWeather,Map.of(city,city)).join();Stringweatherresult.content().get(0).text();// 也可以让AI自动决定是否调用工具PromptpromptnewPrompt(查询city天气);returnchatClient.call(prompt).getResult().getOutput().getContent();}}5.4 MCP与Skill的关系MCP和Skill是互补的MCP解决“怎么连”的问题——标准化工具调用协议Skill解决“连什么”的问题——封装专业知识和工具集合一个典型的架构是Agent通过MCP调用各种Skill暴露的工具。这样无论底层工具如何变化Agent都不需要修改代码只需要通过MCP动态发现即可。一张表彻底分清五个概念概念一句话定义核心作用Java生态代表Prompt给AI的指令告诉AI要做什么Spring AI的Prompt类Function Call让AI能调用外部工具赋予AI行动能力LangChain4j的Tool注解Agent能自主决策的智能系统完成复杂任务的闭环LangChain4j的AiServices 记忆Skill封装专业知识的技能包固化领域知识和最佳实践模块化的工具集合提示模板MCP统一工具调用的标准协议让所有AI用同一套接口Spring AI的MCP支持这五个概念构成了AI应用开发的完整分层Prompt是地基没有它AI听不懂人话Function Call是第一层楼让AI能动手Agent是第二层让AI会思考Skill是装修让AI更专业MCP是连接各层的管道让整个系统灵活可扩展总结有些小伙伴可能会问“我现在应该先学哪个”我的建议是从Prompt开始这是所有AI应用的基础。理解了Prompt再逐步接触Function Call然后尝试搭建简单的Agent。至于Skill和MCP可以先了解概念等你的应用复杂到需要多个Agent协作时再深入学习也不迟。Prompt、Function Call、Agent、Skill、MCP正是AI应用开发的“五层楼”每一层都让我们离业务更近离底层细节更远。开源地址Spring AIhttps://github.com/spring-projects/spring-aiLangChain4jhttps://github.com/langchain4j/langchain4jMCP规范https://github.com/modelcontextprotocol更多项目实战在项目实战网Java突击队