🎬 电影数据库助理专业版
一个复杂的电影数据库系统,将传统的SQL查询与尖端的人工智能语义搜索功能相结合。该系统基于模型上下文协议(MCP)架构,通过结构化数据分析和自然语言情节理解提供全面的电影发现。
✨ 主要特点
🔍 多模态搜索功能
- 📊 结构化查询:传统的基于SQL的电影元数据搜索(类型、预算、评级、演员、导演、票房表现)
- 🧠 语义搜索:使用先进的向量嵌入技术对故事主题和叙事元素进行基于AI的情节搜索
- 🔄 混合搜索:结构化过滤器与语义搜索的智能组合,用于超精确的电影发现
🏗️ 现代建筑
- 🤖 模型上下文协议(MCP):用于无缝LLM交互的尖端AI集成框架
- 🐘 PostgreSQL+pgvector:用于语义相似性搜索的高性能矢量数据库
- ⚡ 快速API:具有双端点架构的轻量级REST API后端
- 🎨 溪流:具有实时搜索功能的漂亮交互式web界面
- 🧩 Azure OpenAI集成:专业级嵌入和语言处理
📁 全面的数据支持
- 📈 Kaggle数据集:完全支持“电影数据集”(Movies_metadata.csv、credits.csv、keywords.csv)
- 📖 绘图矢量化:对电影情节和概要的高级语义理解
- 🔗 关系完整性:具有外键关系的规范化数据库
- 📊 元数据:预算、收入、收视率、演员、工作人员、流派、关键字等
🚀 快速开始
📋 先决条件
- Python 3.8+ 使用pip
- PostgreSQL 12+ 带pgvector扩展
- Azure OpenAI 具有API访问权限的帐户
- Git 用于版本控制
⚙️ 安装
- 📥 克隆仓库
git clone https://github.com/yourusername/movie-database-import.git
cd movie-database-import- 📦 安装依赖项
pip install -r requirements.txt- 🐘 使用pgvector设置PostgreSQL
# Install PostgreSQL (Ubuntu/Debian)
sudo apt-get install postgresql postgresql-contrib
# Install pgvector extension
sudo apt-get install postgresql-14-pgvector
# Create database
sudo -u postgres createdb movies_db
sudo -u postgres psql -d movies_db -c "CREATE EXTENSION vector;"- 🔧 配置环境
创建一个 .env 项目根目录中的文件:
# Database Configuration
DB_HOST=localhost
DB_PORT=5432
DB_NAME=movies_db
DB_USER=postgres
DB_PASSWORD=moviepassword
# Azure OpenAI Configuration
AZURE_OPENAI_API_KEY=your_api_key_here
AZURE_OPENAI_ENDPOINT=https://your-endpoint.openai.azure.com/
AZURE_OPENAI_DEPLOYMENT_NAME=text-embedding-ada-002
AZURE_OPENAI_API_VERSION=2023-05-15
# API Configuration
STRUCTURED_API_PORT=8000
RAG_API_PORT=8001
# Optional: Ollama Configuration (for local embeddings)
OLLAMA_URL=http://localhost:11434
OLLAMA_MODEL=llama3.2:3b
OLLAMA_EMBEDDING_MODEL=nomic-embed-text- 📊 下载电影数据集
下载自 Kaggle的“电影数据集”:
movies_metadata.csvcredits.csvkeywords.csv
更新 db_config.json:
{
"username": "postgres",
"password": "moviepassword",
"host": "localhost",
"db_name": "movies_db",
"batch_size": 50000
}🎯 使用指南
1.📥 加载电影数据
# Load structured movie data into PostgreSQL
python loader.py /path/to/kaggle/movie/dataset2.🚀 启动API服务
终端1-结构化查询API:
cd movie-mcp-system/src/core/api
python structured_server.py
# API available at http://localhost:8000终端2-RAG语义API:
cd movie-mcp-system/src/core/api
python rag_server.py
# API available at http://localhost:80013.🔄 矢量化绘图数据(一次性设置)
cd movie-mcp-system/data
python vectorize_plots.py4.🎨 启动Web界面
cd movie-mcp-system/ui
streamlit run movie_ui.py🌐 访问应用程序: http://localhost:8501
5.🎮 替代方案:使用主入口点
# Start all services
python main.py start
# Start only UI
python main.py start --ui-only
# Start only APIs
python main.py start --apis-only
# Vectorize data
python main.py data --vectorize
# Run tests
python main.py test --type demo🌐 api参考
📊 结构化查询API(localhost:8000)
| 端点 | 方法 | 描述 | 示例 |
|---|---|---|---|
/query | POST | 自然语言到SQL | {"question": "Top 10 action movies by budget"} |
/hybrid-query | POST | 组合结构化+语义 | 见混合搜索部分 |
/health | GET | 服务运行状况检查 | 返回API状态 |
🧠 RAG语义API(localhost:8001)
| 端点 | 方法 | 描述 | 示例 |
|---|---|---|---|
/rag-query | POST | 语义图搜索 | {"query": "time travel movies"} |
/vectorize | POST | 创建绘图嵌入 | {"csv_file_path": "plots.csv"} |
/rag-stats | GET | 矢量数据库统计 | 返回嵌入计数 |
/health | GET | 服务运行状况检查 | 返回API状态 |
🗄️ 数据库模式
📊 核心表
movies-主要电影数据(标题、预算、收入、评级、发布日期、概述)persons-演员和导演信息genres-电影类型分类keywords-描述性标签和主题languages-可用语言production_companies-电影制片厂countries-生产国collections-电影系列/特许经营
🔗 关系表
actors-电影演员与演员关系directors-电影导演关系movies_genres-电影流派协会movies_keywords-电影关键字关联spoken_languages-电影语言协会production_countries-电影国家协会
🧠 向量扩展
- pg向量 1536维OpenAI嵌入的集成
- 余弦相似度 语义图匹配搜索
- 高效索引 用于快速相似性查询
💡 查询示例
📊 结构化查询
- “票房收入最高的十部电影是什么?”
- “查找2015-2020年评分高于3.5的科幻电影”
- “哪些演员出现在最多的电影中?”
语义查询
- “关于时间旅行和改变过去的电影”
- “涉及人工智能和机器人的故事”
- “叙述者不可靠的心理惊悚片”
混合查询
- 类型:动作+情节:“善恶史诗般的战斗”+预算>1亿美元
贡献
- 复刻仓库
- 创建要素分支
- 进行更改
- 如果适用,添加测试
- 提交拉取请求
许可证
此项目根据MIT许可证获得许可-有关详细信息,请参阅许可证文件。
致谢
- Kaggle的“电影数据集”
- PostgreSQL和pgvector社区
- MCP框架开发人员
- 精简团队,打造卓越的UI框架
