ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

用 ModelEngine 五步打造 12306 智能车票查询助手:从 Prompt 到 MCP 一键部署

用 ModelEngine 五步打造 12306 智能车票查询助手:从 Prompt 到 MCP 一键部署 1. 为什么我要把 12306 查票做成智能体每逢节假日帮家里人查票我都要在 12306 里反复切换出发地、到达地、日期再一列列翻车次遇到中转方案还得自己拼。查一次票花十分钟查十次就是一百分钟。后来我想这种「固定参数 固定接口 固定输出格式」的活儿天生就该交给智能体来做。ModelEngine 这个平台吸引我的地方在于它把智能体开发、MCP 技能管理、在线调试和发布放在了一个控制台里。你不需要自己写 FastAPI 封装 12306 接口也不需要处理车站三字码映射、相对日期换算这些琐碎逻辑只要把 MCP 服务挂上去再用一段系统 Prompt 把行为规则讲清楚就能得到一个能实时查票的对话助手。这篇内容适合三类人一是想入门智能体开发但不想碰后端代码的产品/运营同学二是想了解 MCP 协议怎么落地到真实业务场景的开发者三是单纯想给自己做一个查票小工具的效率党。我会按「创建应用 → 接入 MCP → 写 Prompt → 在线调试 → 一键发布」五步走每一步都给可复制的配置和验证方法。整个流程实测下来从空白应用到能查票半小时以内能跑通。需要提前说明的是MCP 服务本身负责和 12306 数据源通信ModelEngine 负责编排和对话两者职责分离。你不需要在本地装任何运行时浏览器打开控制台就能操作。2. 前置准备TaoToken 账号与 MCP 服务地址在动手之前先把两样东西准备好一个能登录 ModelEngine 的账号以及一个可用的 12306 MCP 服务地址。ModelEngine 的注册和登录流程很直接进入控制台后左侧菜单能看到「智能体开发」入口。如果你还没有账号可以先到官网了解平台能力再决定要不要深入官网入口https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentMCP 服务地址这块我建议用魔塔社区上已经部署好的 12306 MCP。操作路径是在魔塔社区搜索 12306 MCP点击「立即部署」部署完成后会得到一个 URL。这个 URL 就是后面要填进 ModelEngine 的 MCP 地址。注意这个 URL 是服务端点不是网页地址复制的时候别带多余空格。如果你后续要自己管理 API 调用配额、查看请求日志可以到控制台里操作控制台https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_contentconsoleutm_campaignrewrite需要生成独立的 API Key 用于程序化调用时走这个入口API Keyshttps://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keysutm_campaignrewrite接入文档里有 MCP 协议字段说明和请求示例配置卡住的时候翻一翻比瞎试快接入文档https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite这里有个容易踩的坑MCP 服务部署后需要几十秒初始化如果你刚点完「立即部署」就复制 URL 去 ModelEngine 里添加可能会报连接超时。等状态变成「运行中」再操作能省掉一轮排查。3. 第一步到第三步创建应用、接入 MCP、写系统 Prompt3.1 创建空白智能体应用进入 ModelEngine 控制台点击左侧「智能体开发」然后新建一个空白应用。命名建议用英文加下划线比如train_ticket_assistant简介写「12306 车票查询助手」。创建过程几秒钟完成不需要选模型、不需要配环境。创建完成后你会看到一个编排界面左边是技能/工具区中间是 Prompt 编辑区右边是调试面板。这个布局后面会一直用到。3.2 接入 12306 MCP 技能点击「MCP 配置」弹出配置窗口。把刚才从魔塔社区拿到的 MCP URL 粘贴进去点击「立即添加」。添加成功后技能列表里会出现一组可用函数常见的包括函数名作用关键参数get_current_date获取当前日期无get_station_code_of_citys按城市名查车站三字码citysget_station_code_by_names按具体站名查三字码stationNamesget_tickets查询直达车票date、fromStation、toStation、trainFilterFlagsget_interline_tickets查询中转票date、fromStation、toStationget_train_route_stations查列车经停站车次号、日期把这些函数全部勾选上。ModelEngine 会自动解析每个函数的入参结构和返回格式你不需要手写 JSON Schema。这一步是它比传统接口封装省事的地方——参数绑定和返回解析都自动完成了。3.3 写系统 Prompt把查票逻辑讲清楚技能挂好了但模型不知道什么时候该调哪个函数。系统 Prompt 的作用就是给模型立规矩。下面是我实测可用的 Prompt 模板你可以直接复制后微调你是一个火车票查询助手专门负责查询12306的车票信息并为用户提供反馈。 你能够解析用户的查询需求获取准确的出发地、到达地和日期信息并调用相应的工具来查询余票和中转票信息。 规则 1. get_current_date 仅用于获取当前日期不支持其他日期的直接查询。 2. get_station_code_of_citys 与 get_station_code_by_names 均需提供准确的城市名或站名否则无法返回正确结果。 3. get_station_code_by_names 要求输入具体车站名称站名不存在或拼写错误则无法获得 station_code。 4. 使用 get_tickets 和 get_interline_tickets 查询车票时必须先确定出发地和目的地的 station_code 或城市名。 5. 用户提供相对日期如明天下周三时必须先调用 get_current_date 计算实际查询日期。 6. get_interline_tickets 目前只支持查询前十条中转余票信息。 7. 查询特定列车经停站时必须提供确切车次编号及出发日期。 输出格式 - 先给出车次、出发站-到达站、出发时间-到达时间、历时 - 再列出各席别余票和票价 - 最后用一句话总结这段 Prompt 的关键在于把「相对日期必须先换算」「站名和城市名走不同函数」这两条写死。我试过不写这两条模型会直接拿「明天」去调get_tickets结果返回空。4. 第四步在线调试与请求验证Prompt 写完后直接在右侧调试面板输入测试语句。我用的第一条验证请求是明天最早一班从杭州到上海的高铁车次信息预期执行链路是get_current_date→get_station_code_of_citys(杭州)和get_station_code_of_citys(上海)→get_tickets(date明天, fromStationHZH, toStationSHH, trainFilterFlagsG)。返回结果节选如下明天最早一班从杭州到上海的高铁 车次G896 出发站 - 到达站杭州东 - 上海虹桥 出发时间 - 到达时间06:07 - 06:58 历时00:51 特等座剩余3张票价79元 二等座剩余15张票价70元再测一条带具体站名的查询今天从杭州东到南京南的动车票这条会走get_station_code_by_names因为输入的是「杭州东」「南京南」而不是城市名。如果 Prompt 里没写清楚站名和城市名的区别模型可能错误调用get_station_code_of_citys返回的是城市下所有车站的代码导致查询范围不对。调试面板的响应速度很快改完 Prompt 保存后几乎秒级返回。建议至少测这四类请求城市到城市、具体站到具体站、相对日期、中转查询。四类都通过基本可以发布。5. 第五步一键发布与结果核对调试通过后点击右下角「发布」填写版本号和简介确认即可。不需要配服务器、不需要传模型文件发布后应用就在云端可访问了。发布后我用一条真实请求做了核对帮我查询明早从武汉到杭州最早的一班高铁信息返回结果里车次、出发到达时间、席别票价都列得清清楚楚。我拿着车次号去 12306 官网比对最早班次一致。这里要提醒一句MCP 服务返回的是查询时刻的余票快照实际购票时余票会变动助手给的是参考信息下单还是走官方渠道。如果你后续要做长期编码或把查票能力接进自己的 Agent 工作流可以了解 Coding PlanCoding Planhttps://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding-planutm_campaignrewrite想直接体验模型对话效果走这个入口模型对话https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_contentmodel-chatutm_campaignrewrite6. 本篇常见报错排查MCP 添加后技能列表为空。大概率是 MCP 服务还没初始化完成。回魔塔社区看部署状态等变成「运行中」再重新添加。如果状态正常但列表仍为空检查 URL 是否复制完整末尾有没有多余斜杠。查询返回「无法识别出发地」。检查 Prompt 里有没有写「城市名走get_station_code_of_citys站名走get_station_code_by_names」。模型分不清这两个函数时会把「杭州东」当城市名传进去返回空结果。相对日期查询返回空。确认 Prompt 里有没有强制「先调get_current_date」。没有这条规则模型可能直接把「明天」当字符串传给get_tickets的date参数接口解析失败。中转查询只返回几条。这是get_interline_tickets的已知限制只返回前十条。如果用户要更多方案可以在 Prompt 里让模型说明「当前仅展示前十条可缩小日期范围获取更精确结果」。发布后对话无响应。先看调试面板是否正常如果调试正常但发布后异常检查发布版本是否选对了 Prompt 版本。ModelEngine 支持多版本管理发布时选错版本会用到旧 Prompt。车站三字码对不上。比如「北京」可能返回 BJP北京站而不是 BXP北京西站。这是城市多站的情况Prompt 里可以加一条当城市有多个车站时先列出所有车站让用户确认再查询具体车次。
返回列表