1. 项目背景:一家饺子馆的AI探索
在北京海淀区杏坛路,距离北京邮电大学不到500米的地方,有一家经营了近20年的老店——金谷园饺子馆。这家看似普通的餐饮小店,最近却因为一个技术举动在开发者圈子里引发了热议:他们在GitHub上开源了自己开发的AI Skill。
作为北邮学子们最常光顾的餐厅之一,金谷园以其独特的饺子配方和稳定的出品质量,长期占据大众点评北京饺子类榜单前列。但真正让它出圈的,是老板对技术的前瞻性理解。当大多数餐饮从业者还在思考如何优化美团、饿了么平台上的店铺展示时,金谷园已经率先为AI时代做好了准备。
2. 技术实现解析
2.1 MCP协议与Streamable HTTP
这个开源项目的核心是一个基于MCP(Machine Communication Protocol)协议的服务端实现。MCP是一种专为AI Agent设计的轻量级通信协议,它定义了AI助手与第三方服务之间的标准交互方式。与传统的REST API不同,MCP更注重于:
- 语义化查询支持(如自然语言"最近的营业分店在哪")
- 多轮对话上下文保持
- 结构化数据与富媒体响应混合返回
项目采用Streamable HTTP作为传输层,这种设计带来了两个关键优势:
- 低延迟:响应可以分块传输,AI助手能即时开始处理
- 兼容性好:无需特殊端口或协议,能穿透大多数防火墙
2.2 技能功能拆解
开源仓库中主要包含6个核心功能模块:
-
餐厅信息服务
处理包括地址、营业时间、联系方式等基础查询。特别的是,它支持语义化查询如"离北邮最近的饺子馆"、"晚上10点还营业吗"。 -
排队取号系统
与店内叫号系统对接,提供实时排队情况查询和远程取号功能。数据结构设计示例:json复制{ "waiting_number": 15, "estimated_time": 35, "qr_code": "https://.../queue/123" } -
生饺子打包服务
不仅提供库存查询,还能根据用户烹饪经验水平返回不同的煮饺子指南(新手版/进阶版)。 -
Wi-Fi自助服务
通过动态Token机制保障网络安全,每2小时自动更新的密码发放系统。
3. 开发细节与架构设计
3.1 项目结构分析
仓库采用典型的Node.js项目结构,但针对AI技能做了特殊优化:
code复制/jinguyuan-dumpling-skill
├── /mcp-server # MCP协议主服务
│ ├── skills.js # 技能路由
│ └── parser.js # 自然语言理解模块
├── /data # 结构化数据存储
│ ├── menu.json # 动态更新的菜单数据
│ └── locations.json
├── config.yml # 服务配置
└── README.md # 中文详细文档
3.2 关键技术实现
自然语言理解层没有使用复杂的NLP模型,而是基于规则引擎+关键词提取的轻量级方案。例如处理"怎么煮饺子"这类问题时:
javascript复制function handleCookingQuery(query) {
const level = query.includes('新手') ? 'beginner' :
query.includes('大师') ? 'expert' : 'normal';
return loadGuide(level);
}
数据更新机制设计尤为巧妙,老板通过简单的微信公众号消息即可触发菜单更新:
- 公众号特定关键词消息触发Webhook
- 服务端拉取最新图文消息
- 自动解析图片中的菜单变更
- 更新data/menu.json并触发CDN刷新
4. 部署与使用指南
4.1 本地开发环境搭建
建议使用Docker快速部署测试环境:
bash复制docker run -p 3000:3000 -v $(pwd)/data:/app/data jgy/mcp-server
配置文件中需要特别注意的几个参数:
yaml复制logging:
level: debug # 生产环境建议改为info
security:
api_keys: # 建议配置访问白名单
- YOUR_AGENT_KEY
4.2 客户端接入方案
对于不同类型的AI客户端,接入方式有所差异:
1. OpenClaw等标准MCP客户端
json复制{
"mcpServers": {
"jgy-dumpling": {
"type": "streamable-http",
"url": "https://your-domain.com/mcp",
"auth": "Bearer YOUR_TOKEN"
}
}
}
2. 自定义Agent集成
可以通过简单的HTTP请求与技能交互:
bash复制curl -X POST https://mcp.jgy.com/query \
-H "Content-Type: application/json" \
-d '{"query":"现在要等位多久"}'
5. 行业启示与扩展思考
5.1 对餐饮行业的示范效应
金谷园的这个项目揭示了一个趋势:在AI普及时代,服务业的"数字接口"正在从人类可读转向AI可读。这带来了几个关键变化:
- 信息结构化程度要求更高
- 服务边界从物理场所扩展到AI生态
- 用户触点从主动搜索变为被动响应
5.2 技术可扩展性
这套架构可以轻松复用到其他场景:
-
连锁店管理
通过location参数区分不同分店javascript复制app.get('/menu', (req, res) => { const branch = req.query.location || 'default'; //... }); -
动态定价系统
结合客流数据实现智能折扣json复制{ "discount_strategy": { "peak_hours": 0.95, "off_peak": 1.1, "special_items": ["三鲜饺子"] } } -
食材溯源
为每个饺子批次生成区块链存证python复制def log_ingredient(batch): block = { 'timestamp': datetime.now(), 'supplier': batch.supplier, 'qc_report': batch.qc_data } chain.add_block(block)
6. 常见问题排查
在实际部署过程中,可能会遇到以下典型问题:
Q1: 服务响应超时
- 检查防火墙规则,确保3000端口开放
- 验证Streamable HTTP分块传输是否被中间件拦截
- 监控data目录权限,确保服务有写入权限
Q2: 中文查询解析异常
- 确认请求头包含
Accept-Language: zh-CN - 检查系统locale设置
- 测试基础编码:
echo -n 饺子 | hexdump
Q3: 微信对接失败
- 验证公众号后台配置的IP白名单
- 检查消息加解密模式是否为兼容模式
- 抓包检查微信服务器与你的服务通信
调试技巧:启用DEBUG日志级别后,所有入站请求会记录到./logs/mcp.log,包含原始查询和响应时间等关键指标。
7. 项目演进路线
根据仓库的issue讨论和老板在公众号透露的信息,项目未来可能朝这些方向发展:
-
多语言支持
正在收集北邮留学生的点餐常用语,计划增加英语、韩语基础查询支持 -
预测系统
基于历史数据开发排队时间预测算法:python复制def predict_wait_time(day_of_week, weather, hour): # 使用3个月历史数据训练的简单模型 return model.predict(...) -
IoT集成
与店内智能设备联动,实现"远程查看后厨监控"等创新功能(需严格隐私保护)
这个看似简单的项目,实际上为中小型服务业如何拥抱AI时代提供了一个可复制的蓝本。当技术从业者在讨论大模型应用时,一家饺子馆用200行代码给出了更落地的答案——不是等待平台赋能,而是主动成为AI生态的一部分。
