AI菜品推荐配置:从零搭建推荐服务与规则调优
AI菜品推荐配置的核心目标,是让系统根据用户历史行为、菜品属性和场景规则,自动给出个性化的菜品列表。
本文面向零基础读者,从一台干净的云服务器开始,完成推荐服务的部署、规则配置和效果验证。
适合餐厅点餐小程序、外卖平台或内容社区的美食推荐模块。
环境准备与前置检查
开始前,你需要一台可用的 Linux 服务器(建议 Ubuntu 22.04 或 CentOS 7+),并具备 sudo 权限。
推荐配置:2 核 CPU、4GB 内存、20GB 系统盘。
如果菜品数据量较大,建议内存不低于 8GB。
登录服务器后,先更新系统并安装基础工具:
sudo apt update && sudo apt upgrade -y
sudo apt install -y curl wget git vim
接着安装 Docker 和 Docker Compose。
以下命令适用于 Ubuntu,CentOS 可参考官方文档替换包管理器:
curl -fsSL https://get.docker.com | sudo sh
sudo systemctl enable docker
sudo systemctl start docker
sudo usermod -aG docker $USER
执行完上述命令后,退出当前 SSH 会话并重新登录,使用户组变更生效。
然后验证 Docker 是否可用:
docker --version
docker compose version
如果两条命令都能输出版本号,说明环境准备完成。
若提示权限不足,请检查是否已重新登录或使用 sudo 执行。
部署推荐服务与菜品数据接入
这里以开源推荐引擎为基础,使用 Docker 快速启动服务。
先创建项目目录并拉取示例配置:
mkdir -p ~/ai-food-recommend && cd ~/ai-food-recommend
新建 docker-compose.yml 文件,内容如下(端口和密码请按需修改):
version: '3'
services:
recommend:
image: recommend-engine:latest
container_name: food-recommend
ports:
- "8080:8080"
environment:
- DB_HOST=mysql
- DB_USER=root
- DB_PASS=YourStrongPassword
- DB_NAME=food_db
depends_on:
- mysql
mysql:
image: mysql:8.0
container_name: food-mysql
environment:
- MYSQL_ROOT_PASSWORD=YourStrongPassword
- MYSQL_DATABASE=food_db
volumes:
- ./mysql-data:/var/lib/mysql
保存后执行 docker compose up -d 启动服务。
首次启动会拉取镜像,等待几分钟。
之后用 docker compose ps 确认两个容器状态均为 Up。
随后准备菜品数据表。
进入 MySQL 容器创建基础表:
docker exec -it food-mysql mysql -uroot -p
输入密码后,执行建表语句(示例):
CREATE TABLE dishes (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100) NOT NULL,
category VARCHAR(50),
price DECIMAL(10,2),
spicy_level TINYINT DEFAULT 0,
tags VARCHAR(255)
);
然后导入你的菜品数据(CSV 或 SQL 文件),确保 name、category、price 等字段完整。
数据导入后,推荐服务才能读取并生成推荐结果。
配置推荐规则与接口调用
推荐服务通常通过配置文件或环境变量调整策略。
在项目目录下新建 config.yaml,示例内容:
recommend:
strategy: hybrid # 可选 hybrid、popular、content
max_results: 10
weights:
history: 0.5
popularity: 0.3
category_match: 0.2
将配置文件挂载到容器内,修改 docker-compose.yml 中 recommend 服务的 volumes 部分:
volumes:
- ./config.yaml:/app/config.yaml
重启服务使配置生效:
docker compose restart recommend
验证接口是否正常。
使用 curl 请求推荐接口:
curl "http://127.0.0.1:8080/recommend?user_id=1&limit=5"
如果返回 JSON 数组且包含菜品名称,说明接口已通。
若返回 500 错误,查看容器日志:
docker logs food-recommend --tail 50
常见原因是数据库连接失败或表字段缺失,根据日志提示修正配置。
避坑指南与效果验证
避坑一:数据质量决定推荐效果。 菜品分类、标签和价格必须完整,缺失字段会导致推荐结果偏差。
建议在导入前用 SELECT COUNT(*) FROM dishes WHERE category IS NULL; 检查空值。
避坑二:
端口冲突。 如果 8080 已被占用,
修改 docker-compose.yml 中的端口映射,
例如 "8081:,
8080"
并同步调整 Nginx 反向代理配置。
避坑三:MySQL 密码安全。 不要使用简单密码,且不要将密码提交到公开仓库。
生产环境建议通过环境变量文件注入。
效果验证可以从两个角度进行:一是接口响应时间,使用 time curl 观察是否在可接受范围;
二是推荐结果相关性,手动模拟几个用户行为(如浏览、下单),检查推荐列表是否包含相关品类。
如果结果始终是热门菜品,检查 config.yaml 中 strategy 是否误设为 popular。
配置完成后,建议设置定时任务备份 MySQL 数据,并监控容器运行状态。
可以用 docker compose logs -f 实时观察日志,及时发现异常。
常见问题
推荐接口返回空列表怎么办?
先确认菜品表中是否有数据,再检查用户行为表是否存在。如果用户没有历史行为,混合策略可能降级为热门推荐,此时应返回热门菜品而非空列表。
修改配置后不生效?
确保重启了 recommend 容器,而不是只重启 MySQL。可以用 docker exec food-recommend cat /app/config.yaml 查看容器内配置是否已更新。
如何调整推荐结果的多样性?
在 config.yaml 中降低 popularity 权重,提高 category_match 权重,或增加 diversity 参数(如果服务支持)。每次调整后重新请求接口对比结果。
以上步骤覆盖了 AI 菜品推荐配置的主要环节。
实际部署时,请根据你的菜品数据结构和业务规则微调配置,并持续观察推荐效果。
遇到报错时,优先查看容器日志和数据库连接状态,大部分问题都能快速定位。