零代码构建AI文旅管家:WorkBuddy与腾讯地图Skills的MCP协议实践

📅 2026/8/7 1:59:53
零代码构建AI文旅管家:WorkBuddy与腾讯地图Skills的MCP协议实践
1. 项目概述当AI助手遇上地图服务文旅规划可以如此简单最近在折腾AI工具链的时候我发现了一个特别有意思的组合WorkBuddy、腾讯地图的Skills再加上MCP协议。这个组合让我在没有写一行代码的情况下捣鼓出了一个能对话、能规划、能查信息的“文旅管家”。听起来有点玄乎其实原理并不复杂核心就是让几个现成的、能力强大的工具“说上话”然后我来当那个“总指挥”。简单来说WorkBuddy是一个功能强大的AI智能体工作台你可以把它理解为一个“AI指挥官”的操作界面。腾讯地图Skills则是腾讯地图开放出来的一系列标准化、可被调用的地图服务能力比如地点搜索、路线规划、周边查询等。而MCP全称是Model Context Protocol你可以把它看作是AI模型比如Claude、GPT和外部工具、数据源之间的一种“通用接线标准”。有了MCPAI模型就能安全、规范地去调用像腾讯地图Skills这样的外部服务。我这个“文旅管家”项目就是利用WorkBuddy作为操作中枢通过配置MCP连接让AI助手比如Claude获得了调用腾讯地图各项技能的能力。最终实现的效果是我只需要在聊天窗口里用自然语言提出需求比如“帮我规划一个从广州塔出发包含陈家祠和沙面岛的半日游路线要避开拥堵”AI就能理解我的意图自动调用地图服务进行搜索、路径计算并生成一份图文并茂、考虑实况的游览方案。整个过程我确实没有打开IDE写任何Python或JavaScript代码全部通过图形化界面配置和对话完成。这非常适合那些有文旅内容策划、本地生活服务运营或者单纯是喜欢自己规划深度游的朋友。你不需要是程序员只要对AI工具有基本的好奇心和动手能力就能搭建一个属于自己的、7x24小时在线的智能旅行顾问。接下来我就把这个从零到一的搭建过程、核心配置的“避坑指南”以及我摸索出来的一些高阶玩法毫无保留地分享给你。2. 核心工具拆解为什么是这三个“齿轮”在动手组装之前我们得先搞清楚手里的这几个核心“齿轮”到底是什么以及它们为什么能严丝合缝地咬合在一起。理解了这个后续配置就会顺畅很多遇到问题也知道该从哪个环节排查。2.1 WorkBuddy你的AI智能体指挥中心WorkBuddy并不是一个单一的AI模型而是一个智能体Agent的集成开发与运行环境。你可以把它想象成一个高度可视化的“任务调度中控台”。它的核心价值在于将复杂的AI工作流、工具调用、记忆存储等能力封装成了拖拽式的节点和清晰的配置面板。在这个项目中我主要用到它的几个关键特性多模型支持它可以后端连接诸如Claude、GPT、国内大模型等多种AI我本次选择的是Claude 3.5 Sonnet因其在复杂指令理解和长文本规划方面表现优异。Skills技能管理这是核心。WorkBuddy允许你以“技能包”的形式为AI智能体扩展能力。一个Skill可以是一个简单的提示词模板也可以是一个能调用外部API的复杂函数。MCP Server集成这是实现“零代码”调用腾讯地图的关键。WorkBuddy原生支持将MCP Server作为技能来源。你只需要提供MCP Server的连接信息WorkBuddy就能自动发现该Server提供的所有工具Tools并将其转化为AI可用的技能。对话界面与记忆它提供了友好的聊天界面并且能管理对话历史上下文让AI能基于之前的对话进行更连贯的规划。注意WorkBuddy有云端版本和可能需要自行部署的版本。对于个人轻量使用关注其提供的公开或易于部署的版本即可。它的设计理念就是降低AI智能体的构建门槛。2.2 腾讯地图Skills藏在API背后的“场景化能力”我们平时开发调用腾讯地图通常使用的是它的Web Service API或JavaScript API需要自己处理鉴权、参数拼接、结果解析。而腾讯地图Skills可以理解为官方预制的、更贴近最终业务场景的“能力模块”。举个例子标准的“地点搜索API”你需要传入关键词、城市、返回数量等参数。而一个“旅游景点搜索Skill”可能已经内置了过滤条件只搜A级景区、排序逻辑按热度返回的字段也更贴近文旅需求如门票价格、开放时间、特色标签。虽然目前公开的、完全封装好的“Skills”可能还在演进中但我们可以通过MCP协议将最核心的地图API“包装”成类似Skill的标准化工具。对于本项目我们最需要调用的几个核心API能力包括地点搜索Place Search根据关键词如“广州塔”、“必吃早茶”查找具体POI兴趣点并获取其坐标、详情。路线规划Direction提供起点、终点、途经点获取驾车、步行、公交等多种方式的路线、距离、时间和实时路况。逆地址解析Regeocoder将经纬度坐标转换为具体的省市区和街道地址用于确认位置。周边搜索Nearby Search给定一个中心点搜索其周边特定类型如美食、酒店、停车场的POI。这些能力通过MCP协议暴露给AIAI就能像使用自己的“内置函数”一样去使用它们。2.3 MCP协议让AI与外部世界安全“握手”的桥梁MCP是Anthropic公司推出的一种开放协议全称是Model Context Protocol。它的诞生就是为了解决一个大问题如何让大语言模型安全、可控、标准化地使用外部工具和数据在没有MCP之前让AI调用API通常需要在提示词里详细描述API的用法。或者为特定模型如GPT编写专门的“插件”或“Function Calling”定义。 这种方式耦合度高换一个模型或工具就得重写一遍而且工具权限管理比较粗糙。MCP的巧妙之处在于它定义了一套标准的“通信语言”。任何工具或数据源只要按照MCP的标准实现一个“MCP Server”就能被任何支持MCP协议的“MCP Client”比如WorkBuddy、Claude Desktop、Cursor IDE所发现和调用。在这个项目里腾讯地图API需要被包装成一个MCP Server。这个Server负责处理鉴权API Key、接收标准化指令、调用真实的地图API、并将结果格式化成MCP标准格式返回。WorkBuddy则扮演了MCP Client的角色。它向这个地图Server发起连接获取到Server提供的“工具列表”例如search_place,calculate_route然后在AI需要时代为调用这些工具。这样一来AI模型本身不需要知道腾讯地图API的具体细节它只需要对WorkBuddy说“请调用‘路线规划’工具参数是起点A、终点B。” WorkBuddy作为Client就会把标准化的请求转发给地图MCP ServerServer执行后再把结果通过WorkBuddy返回给AI。整个过程安全、解耦、标准化。3. 零代码搭建全流程从API Key到智能对话理解了核心组件我们就可以开始动手搭建了。整个过程可以分为三个大阶段准备“粮草”API Key、搭建“桥梁”MCP Server、配置“指挥中心”WorkBuddy。3.1 第一步获取并保管好你的“通行证”——API Key任何对腾讯地图服务的正式调用都需要一个API Key这是身份验证和计费的凭证。这一步是后续所有工作的基础。注册与登录访问腾讯位置服务官网使用你的账号登录。如果没有账号需要先完成注册和实名认证。创建应用在控制台点击“创建应用”。应用名称可以填写“文旅管家智能体”应用类型根据情况选择“浏览器端”或“服务端”。这里因为我们的MCP Server是跑在服务器环境的通常选择“服务端”更合适。获取Key应用创建成功后你会在应用详情页看到你的API Key一串以字母数字组成的字符串。同时请注意Secret Key如果提供某些签名验证方式可能需要。启用服务为确保相关API可用你需要为这个Key“启用产品”。在应用设置中找到“WebService API”和“JavaScript API”等将其勾选启用。路线规划、地点搜索等服务通常包含在WebService API中。设置安全限制强烈建议为了安全务必配置“密钥设置”。你可以添加HTTP referer白名单如果你的MCP Server有固定域名或者更常见的是配置服务器IP白名单。找到你的MCP Server将要运行的服务器的公网IP地址将其添加到IP白名单中。这样只有来自这个IP的请求才会被腾讯地图服务认可即使Key不慎泄露风险也大大降低。实操心得将API Key直接保存在即将编写的MCP Server代码中不是好习惯。我推荐使用环境变量来管理。在服务器上你可以创建一个名为.env的文件里面写TENCENT_MAP_API_KEY你的实际Key。然后在代码中通过process.env.TENCENT_MAP_API_KEY来读取。这样既安全也方便在不同环境开发、生产间切换。3.2 第二步构建核心桥梁——地图MCP Server这是整个项目唯一需要接触“代码”概念的地方但别担心我们不需要从零编写。我们可以利用现有的开源MCP Server模板进行修改。这里我以使用Node.js环境为例。环境准备确保你的服务器或本地开发环境安装了Node.js和npm。初始化项目创建一个新目录例如tencent-map-mcp-server进入并初始化npm init -y。安装依赖我们需要安装MCP的核心SDK和腾讯地图的官方SDK或直接使用axios发起HTTP请求。npm install modelcontextprotocol/sdk axios dotenvdotenv用于读取我们上一步创建的.env文件中的环境变量。编写Server核心代码创建一个index.js文件。以下是一个高度简化的框架展示了如何定义一个“地点搜索”工具// index.js require(dotenv).config(); // 加载环境变量 const { Server } require(modelcontextprotocol/sdk/server/index.js); const { StdioServerTransport } require(modelcontextprotocol/sdk/server/stdio.js); const axios require(axios); const API_KEY process.env.TENCENT_MAP_API_KEY; const BASE_URL https://apis.map.qq.com/ws/place/v1/search; const server new Server( { name: tencent-map-server, version: 0.1.0, }, { capabilities: { tools: {}, // 声明本Server提供工具 }, } ); // 1. 定义“地点搜索”工具 server.setRequestHandler(tools/list, async () { return { tools: [ { name: search_place, description: 根据关键词和城市搜索地点POI例如搜索“广州塔”或“附近的咖啡馆”。, inputSchema: { type: object, properties: { keyword: { type: string, description: 搜索关键词如“广州塔”、“星巴克”。 }, region: { type: string, description: 城市名称如“北京”、“深圳市”。优先在此区域搜索。 }, page_size: { type: number, description: 返回结果数量默认10。 } }, required: [keyword] } }, // 2. 可以继续在这里定义第二个工具例如“路线规划” { name: get_route, description: 获取从起点到终点的驾车路线规划支持途经点。, inputSchema: { type: object, properties: { from: { type: string, description: 起点地址或坐标如“北京市海淀区”或“39.908,116.397”。 }, to: { type: string, description: 终点地址或坐标。 }, waypoints: { type: string, description: 可选途经点用“;”分隔如“A地点;B地点”。 }, policy: { type: string, description: 可选策略如“LEAST_TIME”最小时长, “LEAST_DISTANCE”最短距离。 } }, required: [from, to] } } ] }; }); // 3. 处理工具调用请求 server.setRequestHandler(tools/call, async (request) { const { name, arguments: args } request.params; if (name search_place) { const { keyword, region 全国, page_size 10 } args; try { const response await axios.get(BASE_URL, { params: { keyword: keyword, boundary: region(${region},0), page_size: page_size, key: API_KEY, output: json } }); const data response.data; if (data.status 0) { const places data.data.map(p ({ name: p.title, address: p.address, location: ${p.location.lat}, ${p.location.lng}, tel: p.tel || 无 })); return { content: [{ type: text, text: 找到以下地点\n${places.map(p - ${p.name} (${p.address}) 坐标${p.location}).join(\n)} }] }; } else { return { content: [{ type: text, text: 搜索失败${data.message} }] }; } } catch (error) { return { content: [{ type: text, text: 请求出错${error.message} }] }; } } // 4. 可以在这里添加对“get_route”等其他工具的处理逻辑 // else if (name get_route) { ... } return { content: [{ type: text, text: 未知工具${name} }] }; }); // 启动Server使用标准输入输出通信 async function runServer() { const transport new StdioServerTransport(); await server.connect(transport); console.error(腾讯地图MCP Server 已启动 (stdio)); } runServer().catch(console.error);运行与测试在终端运行node index.js这个Server就会启动并通过标准输入输出等待连接。你可以使用一些MCP客户端测试工具如modelcontextprotocol/sdk自带的工具进行简单测试但更直接的方式是将其接入WorkBuddy。注意事项以上代码仅为演示核心逻辑的极简版本。一个生产可用的Server需要添加更完善的错误处理、参数校验、结果格式化并且需要实现路线规划、周边搜索等其他工具。你可以根据腾讯地图官方API文档丰富这些功能。关键是要确保tools/list返回的工具定义清晰tools/call中的处理逻辑能正确调用对应API并返回AI易于理解的文本。3.3 第三步在WorkBuddy中完成最终组装现在我们有了地图服务API Key和连接器MCP Server最后一步就是在WorkBuddy这个指挥中心里把它们组装起来并赋予AI智能体生命。启动MCP Server确保你的地图MCP Server在后台持续运行。如果是本地测试在终端保持node index.js运行即可。如果是服务器可能需要使用pm2或systemd将其作为守护进程运行。配置WorkBuddy连接MCP进入WorkBuddy的工作台找到“技能”或“集成”管理页面。选择“添加MCP Server”或类似选项。在连接配置中关键的一步是选择连接方式。对于上述我们编写的Node.js Server它使用的是stdio标准输入输出传输方式。这意味着WorkBuddy需要以子进程的方式启动我们的Server脚本。在配置界面你通常需要提供名称例如“腾讯地图服务”。命令填写启动Server的命令如node。参数填写Server脚本的绝对路径如/home/user/tencent-map-mcp-server/index.js。环境变量可选如果Server需要读取环境变量可以在这里配置如TENCENT_MAP_API_KEY你的key。保存配置。WorkBuddy会尝试运行你指定的命令来启动Server并建立连接。验证与发现工具连接成功后WorkBuddy会自动向MCP Server发送tools/list请求。如果一切正常你会在技能列表里看到刚刚在代码中定义的search_place和get_route等工具。创建或配置智能体创建一个新的智能体或者编辑一个已有的。在智能体的“技能”配置部分将刚刚添加的“腾讯地图服务”下的工具勾选赋予给这个智能体。系统提示词设计这是让智能体真正理解自己是个“文旅管家”的灵魂一步。你需要编辑智能体的系统指令例如“你是一个专业的文旅行程规划助手擅长利用地图工具为用户规划旅行路线、搜索景点、美食和住宿。当用户提出地点、路线相关需求时你应该主动调用地图搜索和路线规划工具来获取准确信息。规划路线时请综合考虑用户的兴趣点、时间安排并给出合理的顺序建议。输出结果时请将地图工具返回的信息整理成清晰、易读的格式例如列出景点名称、地址、预估停留时间并用步骤形式描述路线。”开始对话测试保存所有配置打开与这个智能体的对话窗口。尝试输入“我想去深圳玩一天上午去世界之窗下午去深圳湾公园晚上找一家地道的潮汕牛肉火锅请帮我规划一下行程并告诉我怎么坐车方便。”AI应该会理解你的需求首先调用search_place工具搜索“世界之窗”、“深圳湾公园”、“潮汕牛肉火锅 深圳”。获取到具体地点和坐标后再调用get_route工具计算从世界之窗到深圳湾公园再到火锅店的公共交通或驾车路线。最后结合所有信息生成一份包含时间安排、交通方式、地点简介的完整方案。4. 高阶技巧与场景深化让你的管家更“懂行”基础功能跑通后这个文旅管家已经能解决大部分“去哪、怎么去”的问题。但要想让它从“导航仪”升级为真正的“管家”还需要注入一些行业知识和场景化设计。4.1 技能增强封装复合型文旅技能基础的搜索和规划是原子能力。我们可以通过WorkBuddy的“组合技能”或“工作流”功能将多个原子操作打包成一个更智能的复合技能。“一日游路线生成”技能输入城市名、主要兴趣标签如“历史人文”、“自然风光”、“亲子”、出发地点。内部逻辑调用search_place根据城市和标签搜索该城市经典的、高评分的景点可通过关键词组合实现如“北京 历史 博物馆 必去”。对搜索结果进行初步筛选和排序可在MCP Server端或AI端通过提示词逻辑实现。调用get_route以出发地为起点将筛选出的景点按地理位置逻辑串联计算出一条顺路的游览路线。调用search_place在路线沿途或终点搜索符合用户口味的餐厅。输出一份包含景点介绍、路线图、餐饮建议、时间预算的完整一日游计划书。“特惠酒店发现”技能输入目标区域、入住日期、价格区间。内部逻辑调用search_place搜索“酒店”。进阶可以尝试将结果与某个聚合平台需其提供API的实时价格接口进行二次查询这需要另一个MCP Server或Skill。按价格、评分等维度进行排序和推荐。输出列出符合条件的高性价比酒店列表包含地址、参考价格和用户评价摘要。实现这些复合技能不一定需要修改MCP Server。可以在WorkBuddy中利用其“工作流”编辑器通过串联多个工具调用节点并加入AI判断节点来实现逻辑编排。4.2 提示词工程塑造管家的“性格”与“专业性”系统提示词决定了AI的“角色设定”而对话中的用户提问和上下文则提供了具体任务。要让管家更出色需要在提示词上下功夫。角色细化不要只说“你是文旅助手”。可以尝试“你是一位在深圳生活了10年的资深旅行策划师对粤港澳大湾区的隐藏景点、小众美食和节庆活动了如指掌。你擅长为不同预算和兴趣的游客量身定制行程尤其精通亲子游和文化深度游。你的回答总是热情、细致并会主动提醒当地天气、交通卡购买、必备APP等实用信息。”输出格式化要求AI以固定的、清晰的格式输出提升可读性。例如“请按以下结构组织你的回答行程概览[一句话总结]详细安排[时段][活动名称]地点[名称] ([地址])亮点[一两句话介绍]交通从[上一地点]出发建议[交通方式]约[时间]。贴士[如门票信息、游玩时长、注意事项]预算参考[粗略估算]”主动询问在提示词中教导AI当信息不足时应主动提问。例如“如果用户没有说明出行人数、预算、对餐饮的偏好如是否忌口、交通偏好自驾/公交/打车你应在给出具体建议前先友好地询问这些关键信息。”4.3 记忆与个性化实现跨会话的专属服务一个真正的管家应该记得“老主人”的喜好。WorkBuddy通常具备对话记忆功能但我们可以利用它来提供更个性化的服务。用户偏好档案在系统提示词开头可以维护一个简单的“用户档案”变量虽然WorkBuddy的长期记忆可能有限但可以在单次长对话中模拟。例如“当前服务用户偏好记录偏爱自然风光和博物馆对美食要求高喜欢辣味出行通常以公共交通为主。”基于历史的推荐当用户再次咨询时AI可以引用之前的记录“根据您上次表示喜欢山水这次我为您推荐了几个新的国家森林公园路线...”行程收藏与回顾可以教导AI在生成完整行程后主动询问“是否需要我将这份行程保存为‘深圳经典一日游’您下次可以问我‘调出深圳经典一日游’来查看或修改。” 虽然WorkBuddy本身可能没有数据库但可以通过让AI输出结构化的数据如JSON并提示用户自行保存来实现类似效果。5. 常见问题与排查实录在实际搭建和使用的过程中我踩过不少坑。这里把一些典型问题和解决方法记录下来希望能帮你节省时间。5.1 MCP Server连接失败问题现象WorkBuddy中显示MCP Server连接失败或超时。排查步骤检查Server进程首先确认你的Node.js MCP Server是否在正常运行。在终端运行ps aux | grep node查看进程或直接尝试在Server所在目录运行node index.js看是否有错误输出。检查命令与路径核对WorkBuddy中配置的MCP Server启动“命令”和“参数”脚本路径是否正确。路径建议使用绝对路径。检查环境变量如果Server依赖环境变量如API Key确保在WorkBuddy的MCP Server配置里正确设置了这些变量或者在你的系统环境中已全局配置。查看日志WorkBuddy通常会有连接日志。查看日志中具体的错误信息是“命令未找到”还是“权限拒绝”或是脚本本身有语法错误。5.2 地图API调用返回错误问题现象AI调用工具后返回“搜索失败”或直接报错。排查步骤验证API Key首先确认你的腾讯地图API Key是有效的且已启用了所需的产品如WebService API。可以打开浏览器手动拼接一个最简单的测试URL访问例如https://apis.map.qq.com/ws/place/v1/search?keyword腾讯大厦®ion深圳key你的KEY看是否能返回正确JSON。检查配额与计费在腾讯位置服务控制台检查该Key的调用量是否已超出免费配额或套餐限制。核对IP白名单如果你设置了IP白名单请确保当前运行MCP Server的服务器公网IP在白名单内。一个常见错误是服务器使用了弹性IP或处于NAT后实际对外的IP与设想的不同。审查请求参数在MCP Server的代码中打印出最终发向腾讯地图API的完整请求URL检查参数特别是boundary、key的格式是否正确。region参数最好使用城市全称如“北京市”而非缩写“BJ”。5.3 AI不理解或错误调用工具问题现象AI要么不调用地图工具要么调用的参数牛头不对马嘴。排查步骤优化工具描述回顾你在MCP Server中tools/list里为每个工具写的description和inputSchema中的description。这些描述是AI理解工具用途和参数的唯一依据。务必用清晰、无歧义的自然语言描述并举例说明。例如region参数的描述写成“城市名称如‘北京’、‘广州市’。优先在此区域范围内搜索。”就比“地区”要好得多。强化系统提示词在智能体的系统提示词中明确指令它在何种场景下应调用何种工具。例如“当用户询问某个具体地点在哪里、或搜索某类场所时使用search_place工具。当用户询问如何从A地去B地、或规划包含多个地点的路线时使用get_route工具。”检查工具发现在WorkBuddy的智能体技能配置页面确认所需的地图工具已经被成功勾选并添加到了该智能体的技能列表中。5.4 性能与响应延迟问题现象AI回复速度慢尤其是进行多步骤复杂规划时。优化建议减少串行调用如果“一日游规划”需要搜索多个景点再规划路线这些搜索之间如果没有依赖关系可以尝试在MCP Server端实现批量搜索如果API支持或探索WorkBuddy是否支持并行执行多个工具调用。设置超时与重试在MCP Server的HTTP请求代码中为axios设置合理的超时时间如10秒并考虑加入简单的重试逻辑对偶发性网络错误有效。结果缓存对于静态信息如景点地址、坐标可以考虑在MCP Server层添加一个简单的内存缓存如使用node-cache在一定时间内相同的搜索直接返回缓存结果减少对地图API的调用。但需注意缓存过期策略。整个搭建过程最妙的体验就在于那种“连接”成功的时刻——当你对AI说出一句复杂的旅行需求而它开始有条不紊地调用背后的地图工具并最终给你一个结构清晰的方案时你会感觉真的创造了一个有用的数字伙伴。它不再只是空谈而是真正拥有了感知和操作现实世界信息的能力。这个框架的潜力远不止文旅任何需要结合AI决策与外部数据/服务的场景都可以尝试用“WorkBuddy 专项Skills MCP”这个模式来快速原型验证。