AI外卖运营配置实操:从零搭建智能接单与出餐流程
AI外卖运营配置的核心目标,是让系统根据历史订单和菜品库存自动给出推荐排序、自动接单并触发后厨打印,减少人工盯屏和错单。
本文按一台已装好 Linux 的云服务器来演示,使用开源工具组合:Nginx 做反向代理、Redis 存菜品特征、Python 脚本模拟 AI 推荐服务、MySQL 存订单。
适合刚接触外卖系统的商家技术负责人或运维新手照着操作。
先确认环境和数据是否到位
开始配置前,需要满足三个前提:服务器能通过 SSH 登录,已安装 docker 和 docker-compose,并且拿到外卖平台开放接口的 app_key 和 app_secret。
推荐使用 Ubuntu 22.04 或 CentOS 7 以上版本,内存不低于 2GB。
检查命令如下:
docker --version
docker-compose --version
mysql --version
如果提示命令不存在,先按官方文档安装 Docker 和 MySQL 客户端。
菜品数据至少准备三列:dish_id、dish_name、category,保存为 CSV 文件 /data/menu.csv。
订单表结构由平台回调决定,本文假设已存在 orders 表,字段包括 order_id、status、created_at。
部署推荐服务与订单回调
第一步,创建项目目录并启动 Redis 和 MySQL:
mkdir -p /opt/ai-waimai && cd /opt/ai-waimai
cat > docker-compose.yml <<'EOF'
version: '3'
services:
redis:
image: redis:7-alpine
ports:
- "6379:6379"
mysql:
image: mysql:8
environment:
MYSQL_ROOT_PASSWORD: change_me
ports:
- "3306:3306"
EOF
docker-compose up -d
第二步,把菜品特征写入 Redis。
可以用 Python 脚本读取 /data/menu.csv,将 dish_id 作为 key,category 和销量作为 value 存入 hash。
示例片段:
import csv, redis
r = redis.Redis(host='127.0.0.1', port=6379)
with open('/data/menu.csv') as f:
for row in csv.DictReader(f):
r.hset(f"dish:{row['dish_id']}", mapping={'name': row['dish_name'], 'category': row['category']})
第三步,配置 Nginx 反向代理,把外卖平台的订单回调转发到本地 8000 端口的 Python 服务。
在 /etc/nginx/conf.d/waimai.conf 中加入:
server {
listen 80;
server_name your_domain.com;
location /callback/order {
proxy_pass http://127.0.0.1:8000/order;
proxy_set_header Host $host;
}
}
修改后执行 nginx -t && nginx -s reload,看到 syntax is ok 和 test is successful 才算生效。
配置自动接单与出餐打印
AI 推荐服务返回排序后,还需要把“自动接单”和“后厨打印”串起来。
在 Python 服务中监听订单回调,收到新订单时先查 Redis 判断菜品是否在售,再调用打印机接口。
关键逻辑用伪代码表示:
if order_status == 'new':
for item in order_items:
if not redis.exists(f"dish:{item['dish_id']}"):
return {'code': 400, 'msg': '菜品已下架'}
print_to_kitchen(order_id)
update_order_status(order_id, 'accepted')
打印机接口地址和密钥从平台后台获取,不要写死在代码里,放到环境变量 PRINTER_URL 和 PRINTER_KEY。
修改后重启服务:systemctl restart ai-waimai。
常见报错与避坑提醒
- 回调地址返回 502:先
curl -I http://127.0.0.1:8000/order检查本地服务是否启动,再看 Nginx 错误日志/var/log/nginx/error.log。 - Redis 连接超时:确认
docker-compose ps中 redis 状态为Up,防火墙放行 6379 端口仅限内网。 - 菜品推荐结果为空:检查 CSV 是否包含中文逗号导致解析失败,建议用
python -c "import csv;print(list(csv.reader(open('/data/menu.csv'))))"验证。 - 不要直接在生产环境改数据库密码:先备份
/opt/ai-waimai/docker-compose.yml,修改后执行docker-compose down && docker-compose up -d,并同步更新应用环境变量。
验证配置是否真正生效
完成上述步骤后,用平台测试工具或 curl 模拟一笔订单回调:
curl -X POST http://your_domain.com/callback/order \
-H 'Content-Type: application/json' \
-d '{"order_id":"test001","status":"new","items":[{"dish_id":"1"}]}'
预期返回 {"code":200},同时后厨打印机出小票,MySQL 中 orders 表 status 变为 accepted。
如果返回 400,按提示检查菜品 ID 是否存在于 Redis。
最后观察 10 分钟真实订单,确认没有重复打印或漏单,再逐步放量。
关于AI外卖运营配置的常见疑问
没有 AI 算法团队,能用这套配置吗? 可以先用规则排序代替模型,比如按销量和库存加权,后续再接入平台提供的推荐接口。
配置修改后需要重启哪些服务? 改 Nginx 配置执行 nginx -s reload,
改 Python 逻辑执行 systemctl restart ai-waimai,
改 Redis 数据直接覆盖即可。
如何确认打印机没漏单? 在订单表中增加 printed_at 字段,每次打印成功后写入时间戳,定时查询 printed_at IS NULL 的订单做补打。