Shuyi/movie-content-filtering
0
基于内容的电影推荐(Gradio 6 现代版)
机器学习课程演示项目:用 MovieLens 100K 的类型特征做基于内容的电影推荐,按 Gradio 6.x 新范式构建。
- 数据:MovieLens 100K(
movie_lens_100K_demo/u.item,1682 部电影) - 特征:19 个类型(genre)0/1 列
- 算法:余弦相似度,返回最相似的 k 部电影
用到的 Gradio 6 新能力
本地运行
pip install -r requirements.txt # gradio[mcp]>=6.16
python app.py浏览器访问 <http://127.0.0.1:7860>。
作为 MCP 服务使用
启动后 MCP 端点为 http://127.0.0.1:7860/gradio_api/mcp/。 在 Claude Code 等 MCP 客户端中配置:
{
"mcpServers": {
"movie-recommender": {
"url": "http://127.0.0.1:7860/gradio_api/mcp/"
}
}
}之后 Agent 即可直接调用 recommend(movie="Star Wars", k=5)。
已知问题(为什么结果区不用 gr.Dataframe)
Gradio 6.16.0 的 gr.Dataframe 存在前端 bug:事件更新只会 patch 单元格内容,行数被冻结在首次渲染的值(k 从 5 调到 10 时表格始终 5 行;已用最小用例确认与触发组件、Styler、 show_progress 均无关)。本应用改用 gr.HTML 模板渲染结果, 既绕开该 bug,视觉效果也更好。若未来版本修复,可重新评估。
文件结构
content-filtering-v6/
├── app.py # 数据加载、相似度、卡片模板、UI、API/MCP
├── requirements.txt
└── movie_lens_100K_demo/
├── u.item # 电影元数据 + 类型特征(本应用使用)
└── u.data # 评分数据(未使用,保留备扩展)部署到 Hugging Face Spaces
app.py + requirements.txt 即 Spaces 标准结构,新建 Gradio 类型 Space 后上传整个目录即可;MCP 端点在 Spaces 上同样可用。
