# Sentinel Lens 阿里云百炼模型价格监控系统,自动爬取模型价格、限流信息、工具调用价格,提供可视化仪表盘和对外价格查询 API。 ## 功能 - 自动爬取阿里云百炼模型页面的价格、限流、工具调用价格、模型信息 - 支持定时爬取(可配置间隔天数和开始时间) - 对外提供价格查询 API,支持按域名配置折扣率 - 实时访问日志 + 地理分布可视化 - 爬虫仪表盘:每日爬取次数、模型排行、任务状态 - 登录认证(JWT + bcrypt) ## 技术栈 - 后端:FastAPI + asyncpg + PostgreSQL + Playwright - 前端:React + TypeScript + Vite - 爬虫:Playwright(Chromium) ## 项目结构 ``` ├── backend/ │ ├── app/ │ │ ├── routers/ # API 路由 │ │ ├── services/ # 爬虫、调度器、WebSocket │ │ └── utils/ # 价格解析工具 │ ├── crawl/ # 爬虫核心逻辑 │ ├── migrations/ # 数据库迁移 SQL │ └── requirements.txt ├── frontend/ │ └── src/ │ ├── pages/ # 页面组件 │ ├── components/ # 公共组件 │ └── hooks/ # 自定义 Hook ├── docs/ │ └── api.md # 接口文档 └── README.md ``` ## 快速开始 ### 1. 数据库 创建 PostgreSQL 数据库,按顺序执行 `backend/migrations/` 下的 SQL 文件: ```bash psql -U -d -f backend/migrations/001_init.sql psql -U -d -f backend/migrations/002_models.sql # ... 依次执行到最新 ``` ### 2. 后端 ```bash cd backend cp .env.example .env # 编辑 .env 填写数据库连接信息 pip install -r requirements.txt playwright install chromium python main.py ``` 后端默认运行在 `http://localhost:8000`。 **环境变量说明** | 变量 | 说明 | 默认值 | |-----------------------|-----------------------------------|---------------------------| | `HOST` | 监听地址 | `0.0.0.0` | | `PORT` | 监听端口 | `8000` | | `DB_HOST` | 数据库地址 | `localhost` | | `DB_PORT` | 数据库端口 | `5432` | | `DB_USER` | 数据库用户名 | — | | `DB_PASSWORD` | 数据库密码 | — | | `DB_NAME` | 数据库名 | — | | `ALLOWED_ORIGINS` | 前端跨域地址 | `http://localhost:5173` | | `GEOIP_DB_PATH` | GeoLite2 City 数据库路径 | `./GeoLite2-City.mmdb` | | `PLAYWRIGHT_EXECUTABLE` | Chromium 可执行文件路径(可选) | 系统默认 | | `JWT_SECRET` | JWT 签名密钥(生产环境必须修改) | `change-me-in-production` | ### 3. 前端 ```bash cd frontend npm install npm run dev ``` 前端默认运行在 `http://localhost:5173`。 **环境变量** | 变量 | 说明 | 默认值 | |---------------------|----------------|-------------------------| | `VITE_API_BASE_URL` | 后端 API 地址 | `http://localhost:8000` | ### 4. 登录 默认账户: | 账户名 | 密码 | |--------|------------| | admin | admin123 | > 生产环境请修改 `.env` 中的 `JWT_SECRET`,并在登录后及时修改密码。 ## 使用说明 ### 爬取模型价格 1. 进入「爬取」页面,点击 + 添加模型 URL(阿里云百炼模型详情页地址) 2. 勾选要爬取的模型,点击「爬取已选」 3. 在历史记录中查看任务状态和爬取结果 ### 定时爬取 在「爬取」页面底部配置定时爬取,设置间隔天数和开始时间后开启即可。 ### 价格查询 API 对外暴露的价格接口无需认证,可直接调用: ``` GET http://localhost:8000/api/public/prices GET http://localhost:8000/api/public/prices?url=<模型页面URL> ``` 响应中的 `discounted_prices` 会根据请求来源域名自动应用折扣,折扣配置在「折扣」页面管理。 ### 折扣配置 在「折扣」页面为指定域名配置折扣率(如 `0.8` 表示八折)。当该域名的前端页面调用价格 API 时,返回的 `discounted_prices` 中的价格会自动乘以折扣率。 ## 接口文档 详见 [docs/api.md](docs/api.md)。