AI-Dev-Insight 是一个智能编程助手洞察平台的后端服务,基于 FastAPI 构建的现代化 Web 应用。该平台专注于自动化收集、分析和管理各种 AI 编程工具的信息,为开发者提供智能的工具选择建议和深度对比分析。
- 智能产品管理: 完整的 AI 编程工具产品信息 CRUD 操作,支持分页、搜索、过滤
- 智能深度爬取: 基于 Crawl4ai v0.6.3 的 BestFirstCrawlingStrategy,从单一 URL 自动发现相关页面
- LLM 驱动提取: 集成通义千问和 OpenAI,智能提取结构化产品信息
- 质量自动控制: 实时评估和优化数据质量,确保信息准确性
- 实时监控系统: 完整的系统监控、性能指标收集和智能告警
- 文章管理系统: 支持最佳实践文章的创建、编辑、分类和标签管理
- 用户认证授权: 基于 JWT 的用户认证和角色权限管理
- 智能聊天对话: 集成 LLM 的智能对话功能,支持上下文理解
- 高性能异步架构: 基于 FastAPI 的现代化异步 Web 框架
- 智能页面发现: 自动识别定价、功能、文档等相关页面类型
- 多策略爬取: 支持智能爬取和传统爬取两种模式
- 会话管理: 完整的爬取任务状态追踪和历史记录
- 数据验证: 基于 Pydantic 的严格数据验证和类型安全
- 统一错误处理: 完善的异常处理和标准化响应格式
- MCP 协议支持: 支持 Model Context Protocol,增强 AI 交互能力
- 多源数据融合: 智能融合多个数据源,提供更完整的产品信息
- MySQL 8.0: 主数据库,支持复杂查询和事务处理
- Redis 6.0+: 缓存和消息队列,提升系统性能
- Crawl4ai: 下一代智能网页爬取引擎
- Docker 支持: 完整的容器化部署方案
- 监控告警: 自研监控系统,实时掌握系统状态
backend/
├── main.py # FastAPI 应用入口
├── requirements.txt # Python 依赖包列表
├── Dockerfile # Docker 构建配置
├── .env.example # 环境变量配置示例
├── api/ # API 路由层
│ ├── __init__.py
│ ├── products.py # 产品管理 API
│ ├── crawl.py # 爬虫管理 API
│ └── monitoring.py # 监控 API
├── crawlers/ # 爬虫服务层
│ ├── __init__.py
│ ├── smart_crawl.py # 智能爬取服务
│ └── crawl.py # 传统爬取服务
├── services/ # 业务服务层
│ ├── __init__.py
│ ├── llm.py # LLM 集成服务
│ ├── quality_control.py # 质量控制服务
│ ├── monitoring.py # 监控服务
│ └── validators.py # 验证服务
├── repositories/ # 数据访问层
│ ├── __init__.py
│ └── crud.py # CRUD 操作
├── config/ # 配置管理
│ ├── __init__.py
│ ├── config.py # 应用配置
│ ├── logging.py # 日志配置
│ └── middleware.py # 中间件
├── db/ # 数据库相关
│ ├── __init__.py
│ ├── database.py # 数据库连接
│ ├── models.py # SQLAlchemy 模型
│ ├── init_db.py # 数据库初始化
│ └── migrations/ # 数据库迁移
├── schemas/ # Pydantic 数据模型
│ ├── __init__.py
│ └── product.py # 产品相关模式
├── utils/ # 工具函数
│ ├── __init__.py
│ └── response.py # 响应格式化
├── docs/ # 项目文档
│ ├── 项目概述与架构设计.md
│ ├── 智能爬虫系统详解.md
│ ├── API接口文档.md
│ ├── 数据库设计与模型.md
│ ├── 部署运维指南.md
│ ├── 开发指南.md
│ └── 故障排查手册.md
└── logs/ # 日志文件目录
- Python: 3.12+
- MySQL: 8.0+
- Redis: 6.2.6+
- Node.js: 18+ (用于 Playwright)
- uv: 现代化 Python 包管理器 (推荐)
# 克隆项目
git clone <repository-url>
cd AI-Dev-Insight/backend
# 使用 uv 管理依赖 (推荐)
# 安装 uv (如果尚未安装)
curl -LsSf https://astral.sh/uv/install.sh | sh
# 创建虚拟环境并安装依赖
uv sync
# 激活虚拟环境
source .venv/bin/activate # Linux/Mac
# 或 .venv\Scripts\activate # Windows
# 或使用传统方式
python -m venv venv
source venv/bin/activate # Linux/Mac
pip install -r requirements.txt
# 安装 Playwright 浏览器
playwright install chromium# 创建 MySQL 数据库
mysql -u root -p -e "CREATE DATABASE ai_dev_insight CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
# 创建数据库用户
mysql -u root -p -e "CREATE USER 'ai_dev_insight'@'localhost' IDENTIFIED BY 'your_password';"
mysql -u root -p -e "GRANT ALL PRIVILEGES ON ai_dev_insight.* TO 'ai_dev_insight'@'localhost';"
mysql -u root -p -e "FLUSH PRIVILEGES;"
# 初始化数据库表和示例数据
python db/init_db.py init
# 导入完整数据 (可选)
python scripts/import_all_data.py# 复制环境变量模板
cp .env.example .env
# 编辑 .env 文件,配置以下必要参数:核心配置:
# 数据库配置
DATABASE_URL=mysql+pymysql://ai_dev_insight:your_password@localhost:3306/ai_dev_insight
# Redis 配置
REDIS_URL=redis://localhost:6379/0
# LLM 配置(至少配置一个)
LLM_PROVIDER=openai # 或 qwen
OPENAI_API_KEY=your_openai_api_key # OpenAI
OPENAI_API_BASE=https://api.openai.com/v1 # 或本地兼容服务
LLM_MODEL=gpt-3.5-turbo # 模型名称
# 通义千问配置(可选)
DASHSCOPE_API_KEY=your_dashscope_api_key # 通义千问
# 代理配置(可选)
PROXY_HTTP=http://127.0.0.1:7897
PROXY_HTTPS=http://127.0.0.1:7897
# 安全配置
SECRET_KEY=your-super-secret-key-change-in-production
ACCESS_TOKEN_EXPIRE_MINUTES=30# 开发模式启动
python main.py
# 使用 uv 启动 (推荐)
uv run python main.py
# 生产模式启动
gunicorn main:app -w 4 -k uvicorn.workers.UvicornWorker -b 0.0.0.0:8000
# 或使用 uvicorn 直接启动
uvicorn main:app --host 0.0.0.0 --port 8000 --reload- API 服务: http://localhost:8000
- API 文档: http://localhost:8000/docs (Swagger UI)
- ReDoc 文档: http://localhost:8000/redoc
- 健康检查: http://localhost:8000/health
本项目提供了完整的中文文档,涵盖系统的各个方面:
GET /api/products/ # 获取产品列表
GET /api/products/{id} # 获取产品详情
POST /api/products/ # 创建产品
PUT /api/products/{id} # 更新产品
DELETE /api/products/{id} # 删除产品POST /api/crawl/smart # 智能爬取(推荐)
POST /api/crawl/start # 传统爬取
GET /api/crawl/sessions # 获取爬取会话
GET /api/crawl/sessions/{id} # 获取会话详情
GET /api/crawl/health # 爬虫健康检查GET /api/config/crawl # 获取所有爬取配置
GET /api/config/crawl/{id} # 获取指定产品的爬取配置
PUT /api/config/crawl/{id} # 更新爬取配置
POST /api/config/crawl # 创建爬取配置
DELETE /api/config/crawl/{id} # 删除爬取配置GET /api/monitoring/status # 系统状态
GET /api/monitoring/metrics # 系统指标
GET /api/monitoring/alerts # 告警信息# 启动智能爬取
curl -X POST "http://localhost:8000/api/crawl/smart" \
-H "Content-Type: application/json" \
-d '{
"official_website": "https://cursor.com",
"product_id": 1,
"max_pages": 15,
"max_depth": 2
}'
# 获取产品列表
curl "http://localhost:8000/api/products/?page=1&size=20"- FastAPI 0.116+: 高性能异步 Web 框架
- SQLAlchemy 2.0+: 现代化 ORM 框架
- Pydantic 2.0+: 数据验证和序列化
- Uvicorn: ASGI 服务器
- uv: 现代化 Python 包管理器 (推荐)
- pyproject.toml: 项目配置和依赖定义
- Crawl4ai 0.6.0+: 下一代智能网页爬取引擎
- 通义千问 API: 阿里云大语言模型服务
- OpenAI API: GPT 系列模型集成,支持本地兼容服务
- LangChain: LLM 应用开发框架
- Playwright: 现代化浏览器自动化
- MySQL 8.0: 主数据库,支持 JSON 字段
- Redis 6.2.6: 缓存和消息队列
- SQLAlchemy: 异步 ORM 支持
- Docker: 容器化部署
- pytest: 测试框架
- Black: 代码格式化
- Flake8: 代码检查
- pre-commit: Git 钩子管理
启动完整服务栈:
# 在backend目录下运行
docker-compose up -d这将启动完整的服务栈:
- MySQL 8.0 数据库 (端口 3306)
- Redis 7 缓存服务 (端口 6379)
- AI-Dev-Insight 后端服务 (端口 8000)
查看服务状态:
docker-compose ps
docker-compose logs -f backend停止服务:
docker-compose down构建镜像:
# 在backend目录下执行
docker build -t ai-dev-insight-backend:latest .基本运行:
docker run -d \
--name ai-dev-insight-backend \
-p 8000:8000 \
ai-dev-insight-backend:latest带环境变量运行:
基础配置运行:
docker run -d \
--name ai-dev-insight-backend \
-p 8000:8000 \
-e DATABASE_URL=mysql+pymysql://user:pass@host:3306/ai_dev_insight \
-e SECRET_KEY=your-super-secret-key \
-e OPENAI_API_KEY=your_openai_api_key \
-v $(pwd)/logs:/app/logs \
-v $(pwd)/static:/app/static \
ai-dev-insight-backend:latest完整配置运行(包含所有主要环境变量):
docker run -d \
--name ai-dev-insight-backend \
-p 8000:8000 \
\
# 应用基础配置
-e APP_NAME=AI-Dev-Insight \
-e VERSION=1.0.0 \
-e ENVIRONMENT=production \
-e DEBUG=false \
-e HOST=0.0.0.0 \
-e PORT=8000 \
\
# 数据库配置
-e DATABASE_URL=mysql+pymysql://user:pass@host:3306/ai_dev_insight \
-e DATABASE_ECHO=false \
\
# Redis配置
-e REDIS_URL=redis://redis:6379/0 \
\
# CORS配置
-e 'ALLOWED_ORIGINS=["http://localhost:3000","http://127.0.0.1:3000"]' \
\
# LLM配置 - OpenAI
-e LLM_PROVIDER=openai \
-e OPENAI_API_KEY=your_openai_api_key \
-e OPENAI_API_BASE=https://api.openai.com/v1 \
-e LLM_MODEL=gpt-4o-mini \
-e LLM_TEMPERATURE=0.1 \
-e LLM_STREAMING=false \
-e LLM_MAX_RETRIES=3 \
-e LLM_TIMEOUT=60 \
\
# 或者使用通义千问
# -e LLM_PROVIDER=qwen \
# -e DASHSCOPE_API_KEY=your_dashscope_api_key \
# -e QWEN_MODEL=qwen-plus-latest \
\
# 安全配置
-e SECRET_KEY=your-super-secret-key-change-in-production \
-e ACCESS_TOKEN_EXPIRE_MINUTES=30 \
\
# 爬虫配置
-e CRAWL_INTERVAL_HOURS=48 \
-e UPDATE_INTERVAL_HOURS=48 \
-e MAX_CRAWL_RETRIES=3 \
-e CRAWL_TIMEOUT=30 \
\
# 代理配置(可选,用于网络爬取)
-e PROXY_HTTP=http://127.0.0.1:7897 \
-e PROXY_HTTPS=http://127.0.0.1:7897 \
\
# GitHub API配置(可选,提高API限制)
-e GITHUB_API_TOKEN=your_github_token \
\
# MCP服务配置(可选,用于增强搜索功能)
-e SMITHERY_PROFILE=your_smithery_profile \
-e SMITHERY_API_KEY=your_smithery_api_key \
-e EXA_MCP_URL=https://server.smithery.ai/exa/mcp \
-e ENABLE_EXA_SEARCH=true \
\
# 多源补充爬虫配置
-e ENABLE_MULTI_SOURCE_CRAWL=true \
-e ENABLE_COMPLETENESS_EVALUATION=true \
-e COMPLETENESS_THRESHOLD=60.0 \
-e MAX_SUPPLEMENT_ATTEMPTS=3 \
-e MAX_CONCURRENT_SUPPLEMENTS=3 \
\
# 日志配置
-e LOG_LEVEL=INFO \
-e LOG_FILE=logs/app.log \
\
# 数据验证配置
-e ENABLE_STRICT_VALIDATION=true \
-e DATA_QUALITY_THRESHOLD=0.8 \
-e ENABLE_LLM_VALIDATION=true \
\
# 前端功能控制
-e ENABLE_WEB_SEARCH_UI=true \
\
# 挂载卷
-v $(pwd)/logs:/app/logs \
-v $(pwd)/static:/app/static \
\
ai-dev-insight-backend:latest使用环境变量文件运行(推荐):
# 1. 创建环境变量文件
cp .env.example .env.docker
# 编辑 .env.docker 文件,配置你的环境变量
# 2. 使用环境变量文件运行
docker run -d \
--name ai-dev-insight-backend \
-p 8000:8000 \
--env-file .env.docker \
-v $(pwd)/logs:/app/logs \
-v $(pwd)/static:/app/static \
ai-dev-insight-backend:latest最小化配置运行(仅核心功能):
docker run -d \
--name ai-dev-insight-backend \
-p 8000:8000 \
-e DATABASE_URL=mysql+pymysql://root:password@host:3306/ai_dev_insight \
-e SECRET_KEY=your-super-secret-key \
-e LLM_PROVIDER=openai \
-e OPENAI_API_KEY=your_openai_api_key \
ai-dev-insight-backend:latest| 变量名 | 描述 | 示例值 | 必需 |
|---|---|---|---|
DATABASE_URL |
数据库连接URL | mysql+pymysql://user:pass@host:3306/ai_dev_insight |
✅ |
SECRET_KEY |
JWT密钥,用于token签名 | your-super-secret-key-change-in-production |
✅ |
OPENAI_API_KEY |
OpenAI API密钥(当LLM_PROVIDER=openai时) | sk-proj-xxx... |
✅* |
DASHSCOPE_API_KEY |
通义千问API密钥(当LLM_PROVIDER=qwen时) | sk-xxx... |
✅* |
| 变量名 | 描述 | 默认值 | 必需 |
|---|---|---|---|
APP_NAME |
应用名称 | AI-Dev-Insight |
❌ |
VERSION |
应用版本 | 1.0.0 |
❌ |
ENVIRONMENT |
运行环境 | production |
❌ |
DEBUG |
调试模式 | false |
❌ |
HOST |
服务器监听地址 | 0.0.0.0 |
❌ |
PORT |
服务器端口 | 8000 |
❌ |
| 变量名 | 描述 | 默认值 | 必需 |
|---|---|---|---|
DATABASE_ECHO |
是否打印SQL语句 | false |
❌ |
REDIS_URL |
Redis连接URL | redis://redis:6379/0 |
❌ |
| 变量名 | 描述 | 默认值 | 必需 |
|---|---|---|---|
LLM_PROVIDER |
LLM提供商 | openai |
❌ |
LLM_MODEL |
使用的LLM模型 | gpt-4o-mini |
❌ |
QWEN_MODEL |
通义千问模型名称 | qwen-plus-latest |
❌ |
OPENAI_API_BASE |
OpenAI API基础URL | https://api.openai.com/v1 |
❌ |
LLM_TEMPERATURE |
LLM温度参数 | 0.1 |
❌ |
LLM_STREAMING |
是否启用流式响应 | false |
❌ |
LLM_MAX_RETRIES |
请求失败重试次数 | 3 |
❌ |
LLM_TIMEOUT |
请求超时时间(秒) | 60 |
❌ |
| 变量名 | 描述 | 默认值 | 必需 |
|---|---|---|---|
CRAWL_INTERVAL_HOURS |
爬虫间隔时间(小时) | 48 |
❌ |
UPDATE_INTERVAL_HOURS |
更新间隔时间(小时) | 48 |
❌ |
MAX_CRAWL_RETRIES |
最大爬取重试次数 | 3 |
❌ |
CRAWL_TIMEOUT |
爬取超时时间(秒) | 30 |
❌ |
ENABLE_MULTI_SOURCE_CRAWL |
启用多源补充爬虫 | true |
❌ |
ENABLE_COMPLETENESS_EVALUATION |
启用完整性评估 | true |
❌ |
COMPLETENESS_THRESHOLD |
完整性评分阈值 | 60.0 |
❌ |
MAX_SUPPLEMENT_ATTEMPTS |
最大补充尝试次数 | 3 |
❌ |
MAX_CONCURRENT_SUPPLEMENTS |
最大并发补充任务数 | 3 |
❌ |
| 变量名 | 描述 | 示例值 | 必需 |
|---|---|---|---|
ALLOWED_ORIGINS |
CORS允许的源 | ["http://localhost:3000"] |
❌ |
PROXY_HTTP |
HTTP代理地址 | http://127.0.0.1:7897 |
❌ |
PROXY_HTTPS |
HTTPS代理地址 | http://127.0.0.1:7897 |
❌ |
| 变量名 | 描述 | 示例值 | 必需 |
|---|---|---|---|
GITHUB_API_TOKEN |
GitHub API令牌 | github_pat_xxx... |
❌ |
SMITHERY_PROFILE |
Smithery配置文件ID | eligible-marten-xxx |
❌ |
SMITHERY_API_KEY |
Smithery API密钥 | ef60ac31-xxx... |
❌ |
EXA_MCP_URL |
Exa Search MCP服务URL | https://server.smithery.ai/exa/mcp |
❌ |
ENABLE_EXA_SEARCH |
启用Exa搜索功能 | true |
❌ |
| 变量名 | 描述 | 默认值 | 必需 |
|---|---|---|---|
LOG_LEVEL |
日志级别 | INFO |
❌ |
LOG_FILE |
日志文件路径 | logs/app.log |
❌ |
ACCESS_TOKEN_EXPIRE_MINUTES |
JWT令牌过期时间(分钟) | 30 |
❌ |
| 变量名 | 描述 | 默认值 | 必需 |
|---|---|---|---|
ENABLE_STRICT_VALIDATION |
启用严格验证 | true |
❌ |
DATA_QUALITY_THRESHOLD |
数据质量阈值 | 0.8 |
❌ |
ENABLE_LLM_VALIDATION |
启用LLM数据验证 | true |
❌ |
MERGE_STRATEGY |
融合策略 | comprehensive |
❌ |
CONFLICT_RESOLUTION |
冲突解决策略 | authority_weighted |
❌ |
| 变量名 | 描述 | 默认值 | 必需 |
|---|---|---|---|
ENABLE_WEB_SEARCH_UI |
启用前端联网搜索功能UI | true |
❌ |
注意:
- ✅* 表示根据LLM_PROVIDER的选择,至少需要配置其中一个API密钥
- 生产环境建议通过环境变量文件或容器编排工具管理敏感信息
- 完整的环境变量配置示例请参考项目根目录的
.env文件
容器包含内置的健康检查,检查间隔30秒,超时10秒。
查看健康状态:
docker ps
# 或
docker inspect ai-dev-insight-backend | grep Health -A 10手动健康检查:
curl -f http://localhost:8000/health查看容器日志:
docker logs ai-dev-insight-backend
docker logs -f ai-dev-insight-backend # 实时查看进入容器调试:
docker exec -it ai-dev-insight-backend bash检查数据库连接:
docker exec ai-dev-insight-backend uv run python -c "from db.database import engine; print('DB OK')"重启容器:
docker restart ai-dev-insight-backend资源限制:
docker run -d \
--name ai-dev-insight-backend \
--restart unless-stopped \
--memory 2g \
--cpus 1.0 \
-p 8000:8000 \
-e DATABASE_URL=mysql+pymysql://user:pass@host:3306/ai_dev_insight \
-e SECRET_KEY=your-super-secret-key \
ai-dev-insight-backend:latest# 安装测试依赖
pip install pytest pytest-asyncio httpx
# 运行所有测试
pytest
# 运行特定测试
pytest tests/test_api/test_products.py
# 生成覆盖率报告
pytest --cov=. --cov-report=html# 快速健康检查
curl http://localhost:8000/health
# 详细系统状态
curl http://localhost:8000/api/monitoring/status| 配置项 | 说明 | 默认值 | 必需 |
|---|---|---|---|
DATABASE_URL |
MySQL 数据库连接 URL | - | ✅ |
REDIS_URL |
Redis 连接 URL | redis://localhost:6379/0 |
✅ |
LLM_PROVIDER |
LLM 提供商 (qwen/openai) | qwen |
✅ |
DASHSCOPE_API_KEY |
通义千问 API 密钥 | - | * |
OPENAI_API_KEY |
OpenAI API 密钥 | - | * |
UPDATE_INTERVAL_HOURS |
产品数据更新间隔(小时) | 48 |
❌ |
HTTP_PROXY |
HTTP 代理地址 | - | ❌ |
HTTPS_PROXY |
HTTPS 代理地址 | - | ❌ |
LOG_LEVEL |
日志级别 | INFO |
❌ |
DEBUG |
调试模式 | false |
❌ |
*注:DASHSCOPE_API_KEY 和 OPENAI_API_KEY 至少需要配置一个
- max_pages: 最大爬取页面数 (5-50)
- max_depth: 最大爬取深度 (1-3)
- timeout: 单页面超时时间 (默认30秒)
- retry_count: 失败重试次数 (默认3次)
- update_interval: 产品数据更新间隔,统一配置为48小时(通过环境变量
UPDATE_INTERVAL_HOURS设置)
- website_url: 产品官网URL(必需)
- max_pages: 最大爬取页面数(默认15)
- max_depth: 最大爬取深度(默认2)
- is_active: 是否启用爬取(默认true)
- last_crawl_at: 最近爬取时间(自动更新)
注意: 已移除的字段包括 target_urls、crawl_strategy、priority、update_interval_hours 等,简化了配置结构。
系统能够从单一官网 URL 自动发现以下类型的页面:
- 定价页面: pricing, price, plan, cost
- 功能页面: features, capabilities, functions
- 文档页面: docs, documentation, guide, tutorial
- 产品页面: about, product, solution
- API 文档: api, developers, reference
- 集成页面: integrations, plugins, extensions
基于关键词相关性对页面进行智能评分:
- 核心功能: code completion, AI assistant, programming
- IDE 支持: VS Code, JetBrains, Vim, Cursor
- AI 技术: GPT, OpenAI, Claude, LLM
- 编程语言: Python, JavaScript, Java, C++
- 配置数据库连接池 (pool_size=20, max_overflow=30)
- 启用 Redis 缓存和会话存储
- 使用 Gunicorn 多进程部署
- 配置 Nginx 反向代理和负载均衡
- 启用 HTTPS 和 SSL 证书
- 配置防火墙和安全组
- 使用环境变量管理敏感信息
- 定期更新依赖包和安全补丁
- 配置系统监控和性能指标收集
- 设置智能告警规则和通知
- 建立日志聚合和分析系统
- 定期备份数据库和配置文件
- Fork 项目
- 创建功能分支 (
git checkout -b feature/AmazingFeature) - 提交更改 (
git commit -m 'Add some AmazingFeature') - 推送到分支 (
git push origin feature/AmazingFeature) - 打开 Pull Request
本项目采用 MIT 许可证 - 查看 LICENSE 文件了解详情。
如果您在使用过程中遇到问题,请:
- 查看 故障排查手册
- 搜索现有的 Issues
- 创建新的 Issue 并提供详细信息
AI-Dev-Insight - 让 AI 编程工具选择更智能 🚀