AI Agent技术栈深度解析:Function Calling、MCP、Skills与Agent的关系与实现
本文解析了AI Agent的四大核心技术:Function Calling作为工具调用基础,MCP作为标准化接口协议,Skills用于复杂Prompt定义,以及具备自主决策能力的Agent。这些技术旨在平衡大模型的不确定性与传统程序的可预测性,通过工具约束使AI输出更可靠。文章详细介绍了各技术的实现原理和调用流程,包括Function Calling的交互步骤、MCP的工作机制,并提供了代码示例,
本文解析了AI Agent的四大核心技术:Function Calling作为调用工具的基础,MCP作为标准化接口协议,Skills作为复杂Prompt的定义方式,以及具备自主决策能力的Agent。这些技术旨在平衡大模型的不确定性与传统程序的可预测性,使AI输出更加可靠稳定。文章详细阐述了各技术的实现原理、调用流程及代码示例,帮助读者理解AI Agent的工作机制和各组件间的关系。
前言
在当前的人工智能时代,面对层出不穷的的概念,你已经充分了解他们了吗?AI Agent 的工具能力是什么?Function Calling、MCP 和 Skills 这三者有什么区别?它们背后的核心原理是什么?
一句话总结:
- • Function Calling:AI Agent 调用工具的基座,MCP和Skills也是基于它去实现的。
- • MCP (Model Context Protocol):由 Anthropic 推动的开放标准,为 LLM 应用提供标准化接口以连接和交互外部数据源和工具,通用的 USB 接口标准(实现工具的可插拔)。
- • Skills:Anthropic Claude的一个新的尝试,可以允许用户更细致地用文字定义指令、脚本和资源。相比MCP里面简单的prompt定义,Skills可以定义更加复杂的Prompt并且Prompt可以和代码解耦。
- • Agent:具备自主决策能力的AI实体,能够感知环境、规划任务并调用工具(包括MCP Server、Function Call、Skills)完成目标。
为什么要搞出这么多东西呢?
当前大模型是一个黑盒,每次相同的输入内容,输出的结果都是不确定的,但传统的程序设计是可预测的执行结果。但是有时候人们又需要这种不确定性(不确定代表自由度,可以容纳更多东西),所以就搞出了这些工具/架构来约束不确定性,使得确定和不确定达到一个平衡。
这让我想起了太极这个图,黑代表大模型,白代表常规代码逻辑

好了回到正题,下面将对function call 、mcp、skills、agent逐一进行分析
什么是function call
Function Call 是大模型在对话过程中调用外部函数的能力,它允许模型在无法直接回答问题时,返回一个函数调用请求,而不是生成文本。开发者需要手动解析这个请求,执行对应的函数,并将结果传回给模型,以生成最终答案。
function call的实现和LLM交互的调用流程
-
- 定义工具列表: 描述所有可用的函数及其参数。
-
- 初始化聊天上下文: 创建初始的对话记录。
-
- 发送请求给 LLM 使用 OpenAI API 发送带工具定义的请求。
-
- 解析 Response Message: 处理来自模型的响应,区分普通文本和函数调用指令。
-
- 模拟函数调用: 根据模型的要求执行相应函数,并将结果反馈回去。
下面是一个完整的function call的代码实现:
import jsonfrom openai import OpenAI# 1. 初始化 DeepSeek 客户端client = OpenAI( api_key="你的_DEEPSEEK_API_KEY", base_url="https://api.deepseek.com")# 2. 定义工具 Schema (与 OpenAI 格式完全一致)tools = [ { "type": "function", "function": { "name": "get_current_weather", "description": "获取给定位置的当前天气情况", "parameters": { "type": "object", "properties": { "location": { "type": "string", "description": "城市或地区名称,例如:Beijing", }, "unit": { "type": "string", "enum": ["celsius", "fahrenheit"], }, }, "required": ["location"], }, } }]# 3. 发起对话messages = [ {"role": "system", "content": "你是一个乐于助人的天气助手。"}, {"role": "user", "content": "帮我查一下杭州现在的天气,要用摄氏度。"}]print(">>> 正在发送请求给 DeepSeek...")response = client.chat.completions.create( model="deepseek-chat", messages=messages, tools=tools, tool_choice="auto"# 让模型自己决定是否调用工具)response_message = response.choices[0].message# 4. 检查模型是否决定调用工具if response_message.tool_calls: print("\n>>> DeepSeek 决定调用工具!") # 获取第一个工具调用请求 tool_call = response_message.tool_calls[0] function_name = tool_call.function.name arguments = tool_call.function.arguments print(f"函数名称: {function_name}") print(f"提取参数: {arguments}") # --- 实际应用中的后续步骤 --- # 1. 使用 json.loads(arguments) 解析参数 # 2. 执行你的本地 Python 函数 get_current_weather() # 3. 将结果构造成一个新的 message (role='tool') 发回给 DeepSeek # 4. DeepSeek 结合结果生成最终的自然语言回复else: print(">>> 模型直接回复了内容 (未调用工具):") print(response_message.content)
什么是MCP
MCP(Model Context Protocol,模型上下文协议)是 Anthropic 公司于 2024 年底推出的一种开放标准协议,旨在解决大型语言模型(LLM)与外部工具、数据源之间的交互壁垒。
mcp的实现和LLM交互的调用流程
当用户在mcp客户端发起一个问题时:
-
- 客户端(Claude Desktop / Cursor)将问题发送给 LLM。
-
- LLM 分析可用的工具,并决定使用哪一个(或多个)。
-
- 客户端通过 MCP Server 执行所选的工具。
-
- 工具的执行结果被送回给 LLM。
-
- LLM 结合执行结果,归纳总结后得到prompt并生成自然语言展示给用户!
代码实现
MCP client端的示例代码
async defstart(self): # 初始化配置的 mcp server for server inself.servers: await server.initialize() # 获取配置的每一个mcp server的 tools 命名为 all_tools all_tools = [] for server inself.servers: tools = await server.list_tools() all_tools.extend(tools) # 获取tool上的提示词并提供 给LLM 使用 tools_description = "\n".join( [tool.format_for_llm() for tool in all_tools] ) # 询问 LLM(Claude) 应该使用哪些工具。 system_message = ( "You are a helpful assistant with access to these tools:\n\n" f"{tools_description}\n" "Choose the appropriate tool based on the user's question. " "If no tool is needed, reply directly.\n\n" "IMPORTANT: When you need to use a tool, you must ONLY respond with " "the exact JSON object format below, nothing else:\n" "{\n" ' "tool": "tool-name",\n' ' "arguments": {\n' ' "argument-name": "value"\n' " }\n" "}\n\n" "After receiving a tool's response:\n" "1. Transform the raw data into a natural, conversational response\n" "2. Keep responses concise but informative\n" "3. Focus on the most relevant information\n" "4. Use appropriate context from the user's question\n" "5. Avoid simply repeating the raw data\n\n" "Please use only the tools that are explicitly defined above." ) messages = [{"role": "system", "content": system_message}] whileTrue: #追加用户消息输入. messages.append({"role": "user", "content": user_input}) # 将 system_message(针对mcp调用的提示词) 和用户消息输入一起发送给 LLM llm_response = self.llm_client.get_response(messages) ... # 后面和确定使用哪些工具无关classTool: """Represents a tool with its properties and formatting.""" def__init__( self, name: str, description: str, input_schema: dict[str, Any] ) -> None: self.name: str = name self.description: str = description self.input_schema: dict[str, Any] = input_schema # 把工具的名字 / 工具的用途(description)和工具所需要的参数(args_desc)转化为文本 defformat_for_llm(self) -> str: """Format tool information for LLM. Returns: A formatted string describing the tool. """ args_desc = [] if"properties"inself.input_schema: for param_name, param_info inself.input_schema["properties"].items(): arg_desc = ( f"- {param_name}: {param_info.get('description', 'No description')}" ) if param_name inself.input_schema.get("required", []): arg_desc += " (required)" args_desc.append(arg_desc) return f"""
什么是skills
Skills 文件夹包含指令、脚本和资源,Claude 会动态加载这些文件夹来提升特定任务的执行效率。Skills 教会 Claude 如何以可重复的方式完成特定任务。
说人话:通过skills可以解决Prompt 太大、角色太多、版本太乱的问题。
我们来看看Skill的文件夹结构
skill-name/├── SKILL.md (必需)│ ├── YAML 前置元数据 (必需)│ │ ├── name: (必需)│ │ └── description: (必需)│ └── Markdown 指令 (必需)├── scripts/ - 可执行代码(可选)├── references/ - 上下文文档(可选)└── assets/ - 输出文件(模板等)(可选)
Skills渐进式披露的三个优先级加载
第一级:元数据发现
只加载SKILL.md文件的两个关键字段:name(名称)和 description(描述)
第二级:核心指令加载
如果LLM判断当前的任务满足name和description,它会读取 SKILL.md 文件的正文内容,将其加载到上下文中。
第三级:按需加载资源
先加载references内容,再加载scripts进行具体的Action。
AI大模型从0到精通全套学习大礼包
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
只要你是真心想学AI大模型,我这份资料就可以无偿共享给你学习。大模型行业确实也需要更多的有志之士加入进来,我也真心希望帮助大家学好这门技术,如果日后有什么学习上的问题,欢迎找我交流,有技术上面的问题,我是很愿意去帮助大家的!
如果你也想通过学大模型技术去帮助就业和转行,可以扫描下方链接👇👇
大模型重磅福利:入门进阶全套104G学习资源包免费分享!

01.从入门到精通的全套视频教程
包含提示词工程、RAG、Agent等技术点
02.AI大模型学习路线图(还有视频解说)
全过程AI大模型学习路线


03.学习电子书籍和技术文档
市面上的大模型书籍确实太多了,这些是我精选出来的


04.大模型面试题目详解


05.这些资料真的有用吗?
这份资料由我和鲁为民博士共同整理,鲁为民博士先后获得了北京清华大学学士和美国加州理工学院博士学位,在包括IEEE Transactions等学术期刊和诸多国际会议上发表了超过50篇学术论文、取得了多项美国和中国发明专利,同时还斩获了吴文俊人工智能科学技术奖。目前我正在和鲁博士共同进行人工智能的研究。
所有的视频由智泊AI老师录制,且资料与智泊AI共享,相互补充。这份学习大礼包应该算是现在最全面的大模型学习资料了。
资料内容涵盖了从入门到进阶的各类视频教程和实战项目,无论你是小白还是有些技术基础的,这份资料都绝对能帮助你提升薪资待遇,转行大模型岗位。


智泊AI始终秉持着“让每个人平等享受到优质教育资源”的育人理念,通过动态追踪大模型开发、数据标注伦理等前沿技术趋势,构建起"前沿课程+智能实训+精准就业"的高效培养体系。
课堂上不光教理论,还带着学员做了十多个真实项目。学员要亲自上手搞数据清洗、模型调优这些硬核操作,把课本知识变成真本事!

如果说你是以下人群中的其中一类,都可以来智泊AI学习人工智能,找到高薪工作,一次小小的“投资”换来的是终身受益!
应届毕业生:无工作经验但想要系统学习AI大模型技术,期待通过实战项目掌握核心技术。
零基础转型:非技术背景但关注AI应用场景,计划通过低代码工具实现“AI+行业”跨界。
业务赋能 突破瓶颈:传统开发者(Java/前端等)学习Transformer架构与LangChain框架,向AI全栈工程师转型。
👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓
更多推荐
所有评论(0)