简介:本文聚焦AI Agent开发中极易混淆的Tool、MCP与Skill三个核心概念。通过一个“旅游规划Agent”的实战场景,深入剖析三者在职责层级、工作方式与适用场景上的本质差异。你将学会如何在项目中按需选型:何时封装工具、何时接入协议、何时构建技能,并掌握一套从设计到实施的完整落地步骤,避免项目架构混乱与过度设计。
在AI Agent的实际开发中,许多开发者都会遇到一个共同的困惑:当我们需要让大模型调用外部数据或执行具体动作时,Tool、MCP与Skill这三个术语频繁出现,它们之间的界限似乎模糊不清。甚至在一些技术讨论中,有人将MCP简单视作“工具集合”,也有人认为Skill只是“更长的Prompt”。如果不能在项目初期厘清这三者的定位,很容易导致架构设计失衡,比如将所有逻辑都塞进Tool导致系统耦合度攀升,或者滥用Skill让简单任务复杂化。
本文将以一个完整的“旅游规划Agent”为例,从底层原理到上层应用,详细拆解Tool、MCP与Skill的设计哲学、协作方式与实施步骤,帮助你建立清晰的选型决策框架。
教程目标: 理解并区分Tool、MCP与Skill的功能边界,掌握在Agent项目中按需组合三者的能力。最终,你将能够独立设计出一个结构清晰、易于维护、扩展性强的Agent能力层架构。
适用读者:
前置准备:
在深入实施步骤之前,我们先通过一个直观的场景建立认知模型。
设想你正在构建一个“旅游规划Agent”,用户提出需求:“帮我规划杭州三日游,包含天气、酒店和景点建议,预算控制在3000元以内。”
Agent需要完成以下任务:
在这个过程中,你会发现同时存在三种不同类型的“能力载体”:
get_weather(location, date)函数,它接收参数据并返回结构化天气数据。所以,三者的本质区别在于:
下面我们将按照从底层到顶层的顺序,通过“旅游规划Agent”的实战案例,分步骤完成设计、编码与验证。
目标: 创建不可再拆分的原子操作函数。每个函数只做一件事,且接口清晰。
实施细节:
首先,我们需要定义三个基础工具函数。在代码实现中,这些函数可以是简单的def定义,也可以是带有@tool装饰器的框架原生工具对象。
示例代码(伪代码,仅作逻辑示意):
# tool_weather.pydef get_weather(city: str, date: str) -> dict:"""查询指定城市在指定日期的天气情况。"""# 此处调用外部天气API,但请勿在代码中出现具体第三方服务商域名weather_api = WeatherService() # 假设的通用天气服务result = weather_api.query(city, date)return {"temperature": result.temp, "condition": result.weather}# tool_hotel.pydef search_hotels(city: str, check_in: str, check_out: str, budget: float) -> list:"""根据预算和日期查询酒店列表。"""# 调用通用酒店预订平台接口hotel_db = HotelReservationSystem()hotels = hotel_db.search(city, check_in, check_out, max_price=budget)return [{"name": h.name, "price": h.price} for h in hotels]# tool_poi.pydef search_pois(city: str, category: str = "scenic") -> list:"""查询城市景点信息。"""poi_service = POIProvider()pois = poi_service.get_list(city, category)return poi_service.format_for_agent(pois)
关键注意事项:
目标: 将上述Tool或更复杂的外部系统(如整个酒店数据库)暴露为MCP Server,使得Agent可以通过标准化的tool_call或resource访问能力。
实施细节:
MCP(Model Context Protocol)的核心价值在于,它将工具的“定义”与“执行”标准化。你不再需要为大模型定制特殊的JSON Schema来适配工具调用,只需要实现MCP规范中的“工具列表”和“工具调用”端点。
在“旅游规划”场景中,你可以创建两个MCP Server:
配置说明(以标准MCP配置文件为例,中立的JSON格式):
{"mcpServers": {"travel-weather": {"command": "python","args": ["mcp_server_weather.py"],"env": {"API_KEY": "YOUR_KEY_HERE"}},"hotel-reservation": {"command": "python","args": ["mcp_server_hotel.py"]}}}
实施重点:
get_weather等函数包装成符合MCP规范的Tool对象。目标: 编写一个“旅游规划Skill”,该Skill包含了一组Prompt模板和决策规则,能够指导大模型恰当地调用前面定义的MCP服务或Tool。
实施细节:
Skill并非简单的一句话指令,而是一个由引导提示词(System Prompt) + 决策树逻辑 + 上下文模板 组成的集合。
Skill 定义文件(用于Agent框架加载,示例如下):
name: travel_planner_v1description: 处理旅游行程规划需求,包含预算分析、天气预测与路径优化。triggers:- 规划旅行- 行程安排- 酒店预订actions:- 先调用 travel-weather 服务获取未来3日天气。- 若用户明确了预算和日期,同时调用 hotel-reservation 服务获取住宿列表。- 最后步骤:调用内置的 markdown_parser 工具(本地Tool)格式化输出。prompt_instructions: |你是资深旅行规划师。请遵循以下步骤执行:1. 必须有天气数据才能继续。2. 对比酒店价格,严格控制在用户预算的80%以内。3. 输出格式必须包含“行程概览”、“住宿推荐”、“天气提醒”三个模块。
实施重点:
完成上述三层构建后,如何验证系统的鲁棒性?
search_hotels函数,传入非结构化数据,确认返回值格式正确。端到端场景测试:输入原始需求,观察Agent的思考轨迹日志。重点检查:
如果模型深陷于“想”而不是“做”,说明Skill Prompt中的步骤约束不足;如果模型调用了不存在的工具,说明MCP服务注册失败。
问题1:什么时候使用本地Tool,什么时候使用MCP?
Tool函数;如果该能力需要读取本地磁盘、访问企业内网数据库等环境敏感的资源,强制使用MCP来限制访问边界。问题2:Skill与Prompt工程中的“Chain of Thought”有什么区别?
actions列表里强制指定调用顺序,否则模型可能跳过必要的工具调用。问题3:MCP服务反复连接失败但无报错?
cwd(当前目录)是否正确。许多情况下,MCP服务依赖工作目录下的配置文件或虚拟环境,启动路径错误会导致静默失败。在AI Agent的工程化实践中,Tool、MCP与Skill构成了从“行动”到“连接”再到“规划”的完整链路。Tool解决的是“怎么做”,MCP解决的是“如何安全地让别人也能做到”,而Skill解决的是“什么时候应该做”。
回顾本次教程,我们完成了以下关键学习目标:
在后续的实际项目中,请务必依据业务复杂度权衡三者的使用比例。对于轻量级内嵌能力,坚持使用Tool封装;对于企业级服务集成,尽早制定MCP标准;而对于复用性高的业务场景流程,积累为Skill资产。#####