Skip to content

Repository files navigation

AI-Dev-Insight 后端服务

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 包管理器 (推荐)

1. 项目克隆和环境准备

# 克隆项目
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

2. 数据库初始化

# 创建 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

3. 环境配置

# 复制环境变量模板
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

4. 启动服务

# 开发模式启动
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

5. 验证部署

📚 详细文档

本项目提供了完整的中文文档,涵盖系统的各个方面:

核心文档

运维文档

🔌 主要 API 端点

产品管理 API

GET    /api/products/              # 获取产品列表
GET    /api/products/{id}          # 获取产品详情
POST   /api/products/              # 创建产品
PUT    /api/products/{id}          # 更新产品
DELETE /api/products/{id}          # 删除产品

智能爬取 API

POST   /api/crawl/smart            # 智能爬取(推荐)
POST   /api/crawl/start            # 传统爬取
GET    /api/crawl/sessions         # 获取爬取会话
GET    /api/crawl/sessions/{id}    # 获取会话详情
GET    /api/crawl/health           # 爬虫健康检查

配置管理 API

GET    /api/config/crawl           # 获取所有爬取配置
GET    /api/config/crawl/{id}      # 获取指定产品的爬取配置
PUT    /api/config/crawl/{id}      # 更新爬取配置
POST   /api/config/crawl           # 创建爬取配置
DELETE /api/config/crawl/{id}      # 删除爬取配置

监控 API

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: 项目配置和依赖定义

AI/LLM 技术

  • 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 钩子管理

🐳 Docker 部署

使用 Docker Compose(推荐)

启动完整服务栈:

# 在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配置

变量名 描述 默认值 必需
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_urlscrawl_strategypriorityupdate_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 证书
  • 配置防火墙和安全组
  • 使用环境变量管理敏感信息
  • 定期更新依赖包和安全补丁

监控告警

  • 配置系统监控和性能指标收集
  • 设置智能告警规则和通知
  • 建立日志聚合和分析系统
  • 定期备份数据库和配置文件

🤝 贡献指南

  1. Fork 项目
  2. 创建功能分支 (git checkout -b feature/AmazingFeature)
  3. 提交更改 (git commit -m 'Add some AmazingFeature')
  4. 推送到分支 (git push origin feature/AmazingFeature)
  5. 打开 Pull Request

📄 许可证

本项目采用 MIT 许可证 - 查看 LICENSE 文件了解详情。

📞 支持

如果您在使用过程中遇到问题,请:

  1. 查看 故障排查手册
  2. 搜索现有的 Issues
  3. 创建新的 Issue 并提供详细信息

AI-Dev-Insight - 让 AI 编程工具选择更智能 🚀

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages