chore: add project analysis doc, clean up legacy scripts, update docs
- Add comprehensive project analysis document (项目分析文档.md) - Add Windows startup guide and batch script - Replace legacy startup scripts with run_production.py (Waitress) - Remove deprecated bat scripts and duplicate run files - Update .env.example, README.md, and docs Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
125
(红头)windows上唯一启动说明.md
Normal file
125
(红头)windows上唯一启动说明.md
Normal file
@@ -0,0 +1,125 @@
|
||||
# Windows 上唯一启动说明
|
||||
|
||||
| 项目 | 内容 |
|
||||
|------|------|
|
||||
| 目标 | 在 Windows 上一致地完成依赖、配置、开发与生产启动 |
|
||||
| 版本号 | v1.0.0 |
|
||||
| 责任人 | 项目组 |
|
||||
| 最后更新日期 | 2026-05-02 |
|
||||
|
||||
**变更记录**
|
||||
|
||||
| 日期 | 修改人 | 修改内容 |
|
||||
|------|--------|----------|
|
||||
| 2026-05-02 | 项目组 | 合并原多份 Windows 批处理与部署文档为本文 + 根目录 `windows启动.bat` |
|
||||
|
||||
**关联资源**
|
||||
|
||||
- 代码库根目录:`windows启动.bat`、`run_dev.py`、`run_production.py`
|
||||
- 环境示例:`.env.example`
|
||||
|
||||
---
|
||||
|
||||
## 1. 唯一入口(推荐)
|
||||
|
||||
在资源管理器中进入项目根目录(含 `requirements.txt` 的目录),**双击 `windows启动.bat`**,按提示选择:
|
||||
|
||||
| 选项 | 说明 |
|
||||
|------|------|
|
||||
| 1 | 开发服务器:`run_dev.py`,默认 **http://127.0.0.1:5002**,调试与代码重载开启 |
|
||||
| 2 | 生产服务器:Waitress(`run_production.py`),默认 **http://0.0.0.0:5000**,可用环境变量 `PORT` 覆盖 |
|
||||
| 3 | 退出 |
|
||||
|
||||
若已创建虚拟环境 `.venv`,脚本会自动 `call .venv\Scripts\activate.bat` 再启动。
|
||||
|
||||
---
|
||||
|
||||
## 2. 前置条件
|
||||
|
||||
1. **Python**:建议 3.12,已安装 `pip`。
|
||||
2. **虚拟环境(推荐)**
|
||||
|
||||
```bat
|
||||
python -m venv .venv
|
||||
.venv\Scripts\activate.bat
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
|
||||
3. **配置**:复制 `.env.example` 为 `.env`,填写 `SECRET_KEY`、`DATABASE_URL`、`LLM_API_KEY`、`WX_APPID`、`WX_SECRET` 等(与示例注释一致)。
|
||||
|
||||
---
|
||||
|
||||
## 3. 命令行等价写法(不双击 bat 时)
|
||||
|
||||
在项目根目录、已激活虚拟环境的前提下:
|
||||
|
||||
```bat
|
||||
set PYTHONPATH=%cd%
|
||||
python run_dev.py
|
||||
```
|
||||
|
||||
生产(Waitress,默认端口 5000):
|
||||
|
||||
```bat
|
||||
set FLASK_ENV=production
|
||||
set PYTHONPATH=%cd%
|
||||
python run_production.py
|
||||
```
|
||||
|
||||
端口:可在 `.env` 中设置 `PORT=xxxx`(`create_app` 会加载 dotenv);**`run_dev.py` 内端口固定为 5002**,不受 `PORT` 影响。
|
||||
|
||||
---
|
||||
|
||||
## 4. 可选:安装为 Windows 服务(无单独 bat)
|
||||
|
||||
需 **管理员** 命令提示符,项目根目录、已安装依赖:
|
||||
|
||||
```bat
|
||||
cd /d D:\你的路径\aitsc
|
||||
set PYTHONPATH=%cd%
|
||||
python flask_prompt_master_service.py install
|
||||
python flask_prompt_master_service.py start
|
||||
```
|
||||
|
||||
停止 / 卸载:`stop`、`remove`。服务内当前监听 **5000**(见 `flask_prompt_master_service.py`)。
|
||||
|
||||
**简化版(任务计划程序)**:`python simple_windows_service.py install`(详见该脚本内说明)。
|
||||
|
||||
---
|
||||
|
||||
## 5. 监控与日志(无单独 bat)
|
||||
|
||||
```bat
|
||||
.venv\Scripts\activate.bat
|
||||
python monitor_manager.py
|
||||
```
|
||||
|
||||
更多子命令见 `docs/development/监控和日志系统使用指南.md`。
|
||||
|
||||
---
|
||||
|
||||
## 6. 防火墙(按需)
|
||||
|
||||
PowerShell(管理员),示例放行 5002(开发)与 5000(生产/服务):
|
||||
|
||||
```powershell
|
||||
New-NetFirewallRule -DisplayName "aitsc-dev-5002" -Direction Inbound -LocalPort 5002 -Protocol TCP -Action Allow
|
||||
New-NetFirewallRule -DisplayName "aitsc-prod-5000" -Direction Inbound -LocalPort 5000 -Protocol TCP -Action Allow
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 7. 常见问题
|
||||
|
||||
| 现象 | 处理 |
|
||||
|------|------|
|
||||
| 提示无模块 | 确认在项目根目录执行,且已 `set PYTHONPATH=%cd%` 或使用 `windows启动.bat` |
|
||||
| 端口被占用 | 开发改代码中端口或结束占用进程;生产设置 `PORT` 或改 Waitress 默认 |
|
||||
| `pywin32` 安装失败 | `pip install pywin32==306` 后重试;安装 Windows 服务必须能导入 `win32serviceutil` |
|
||||
| 服务起不来 | 查看 `logs\service.log` |
|
||||
|
||||
---
|
||||
|
||||
## 8. Linux / 服务器
|
||||
|
||||
Windows 以外环境不在本文范围;生产常用 Gunicorn 等见仓库内 `gunicorn.conf.py`、`docker-compose*.yml` 及 `docs/deployment/`。
|
||||
45
(红头)windows启动.bat
Normal file
45
(红头)windows启动.bat
Normal file
@@ -0,0 +1,45 @@
|
||||
@echo off
|
||||
chcp 65001 >nul
|
||||
cd /d "%~dp0"
|
||||
|
||||
set PYTHONPATH=%cd%
|
||||
|
||||
if exist ".venv\Scripts\activate.bat" (
|
||||
call .venv\Scripts\activate.bat
|
||||
)
|
||||
|
||||
:menu
|
||||
echo.
|
||||
echo ============================================================
|
||||
echo aitsc - Windows 启动(唯一脚本)
|
||||
echo ============================================================
|
||||
echo [1] 开发 run_dev.py http://127.0.0.1:5002
|
||||
echo [2] 生产 Waitress 默认端口 5000 ^(可用环境变量 PORT^)
|
||||
echo [3] 退出
|
||||
echo ============================================================
|
||||
set /p _choice=请选择 (1-3):
|
||||
|
||||
if "%_choice%"=="1" goto run_dev
|
||||
if "%_choice%"=="2" goto run_prod
|
||||
if "%_choice%"=="3" goto eof
|
||||
|
||||
echo 无效选择,请重新输入。
|
||||
goto menu
|
||||
|
||||
:run_dev
|
||||
set FLASK_ENV=development
|
||||
python run_dev.py
|
||||
goto after_run
|
||||
|
||||
:run_prod
|
||||
set FLASK_ENV=production
|
||||
python run_production.py
|
||||
goto after_run
|
||||
|
||||
:after_run
|
||||
echo.
|
||||
echo 进程已结束。
|
||||
pause
|
||||
|
||||
:eof
|
||||
exit /b 0
|
||||
803
(红头)项目分析文档.md
Normal file
803
(红头)项目分析文档.md
Normal file
@@ -0,0 +1,803 @@
|
||||
# 提示词大师 (aitsc) 项目分析文档
|
||||
|
||||
> 分析日期:2026-05-02 | 版本:v1.0.0 | 工作目录:`D:\aaa\aitsc`
|
||||
|
||||
---
|
||||
|
||||
## 目录
|
||||
|
||||
1. [项目概述](#1-项目概述)
|
||||
2. [技术架构](#2-技术架构)
|
||||
3. [目录结构详解](#3-目录结构详解)
|
||||
4. [核心模块分析](#4-核心模块分析)
|
||||
5. [数据模型设计](#5-数据模型设计)
|
||||
6. [API 路由体系](#6-api-路由体系)
|
||||
7. [配置系统](#7-配置系统)
|
||||
8. [部署架构](#8-部署架构)
|
||||
9. [Vue 前端重构](#9-vue-前端重构)
|
||||
10. [安全问题诊断](#10-安全问题诊断)
|
||||
11. [技术债务清单](#11-技术债务清单)
|
||||
12. [改进建议](#12-改进建议)
|
||||
|
||||
---
|
||||
|
||||
## 1. 项目概述
|
||||
|
||||
### 1.1 项目定位
|
||||
|
||||
**提示词大师 (aitsc / flask_prompt_master)** 是一个基于大语言模型 (LLM) 的智能提示词生成与多场景 AI 应用平台,支持 Web 端和微信小程序端。
|
||||
|
||||
### 1.2 核心能力
|
||||
|
||||
- 调用 DeepSeek API 将用户的简短需求转化为高质量、结构化的专业提示词
|
||||
- 提供 15 个垂直 AI 应用场景(饭菜规划、古诗词解析、周报生成、简历优化等)
|
||||
- 支持意图识别 + 专家模板的两阶段提示词优化
|
||||
- Web 用户认证 + 微信小程序登录双通道
|
||||
- Flask-Admin 管理后台(用户管理、数据分析、系统监控)
|
||||
|
||||
### 1.3 版本历史
|
||||
|
||||
| 版本 | 日期 | 主要变更 |
|
||||
|------|------|----------|
|
||||
| 初始版本 | 早期 | 基础提示词生成 |
|
||||
| v1.0.0 | 2026-02 | 完整功能集、配置系统重构、Vue 前端试点 |
|
||||
|
||||
---
|
||||
|
||||
## 2. 技术架构
|
||||
|
||||
### 2.1 技术栈全景
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────┐
|
||||
│ 前端层 │
|
||||
│ ┌──────────────────┐ ┌──────────────────────────┐ │
|
||||
│ │ 传统 SSR 前端 │ │ Vue 3 SPA (vue-app/) │ │
|
||||
│ │ Bootstrap 5 + │ │ TypeScript + Vite + │ │
|
||||
│ │ jQuery + Jinja2 │ │ Element Plus + Pinia │ │
|
||||
│ └────────┬─────────┘ └───────────┬──────────────┘ │
|
||||
│ │ │ │
|
||||
│ └────────┬───────────────┘ │
|
||||
│ │ HTTP/HTTPS │
|
||||
├────────────────────┼────────────────────────────────┤
|
||||
│ │ Nginx 反向代理 │
|
||||
├────────────────────┼────────────────────────────────┤
|
||||
│ 后端层 │
|
||||
│ ┌─────────────────────────────────────────────┐ │
|
||||
│ │ Flask 应用 (Python 3.12) │ │
|
||||
│ │ ├── 路由层: 20+ 蓝图 │ │
|
||||
│ │ ├── 服务层: Auth/MS/Poetry/PromptQuality │ │
|
||||
│ │ ├── 数据层: SQLAlchemy ORM + Flask-Migrate │ │
|
||||
│ │ └── 管理后台: Flask-Admin + Flask-Login │ │
|
||||
│ └─────────────────────────────────────────────┘ │
|
||||
│ │ │ │
|
||||
├───────────┼────────────────────┼─────────────────────┤
|
||||
│ 数据层 AI 服务层 │
|
||||
│ ┌───────┴──────┐ ┌─────────┴─────────┐ │
|
||||
│ │ MySQL 8.0 │ │ DeepSeek API │ │
|
||||
│ │ Redis 7 │ │ (OpenAI 兼容) │ │
|
||||
│ └──────────────┘ └───────────────────┘ │
|
||||
└─────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
### 2.2 关键技术指标
|
||||
|
||||
| 维度 | 详情 |
|
||||
|------|------|
|
||||
| 后端框架 | Python Flask >= 2.2.0 |
|
||||
| ORM | Flask-SQLAlchemy + Flask-Migrate |
|
||||
| 数据库 | MySQL 8.0 + Redis 7 |
|
||||
| AI 模型 | DeepSeek Chat (OpenAI 兼容 API) |
|
||||
| AI 超时 | 60 秒,含 3 次指数退避重试 |
|
||||
| 生产服务器 | Waitress (Windows) / Gunicorn (Linux) |
|
||||
| 容器化 | Docker Compose 4 服务编排 |
|
||||
| 传统前端 | Bootstrap 5.1 + jQuery 3.6 (CDN) |
|
||||
| 新前端 | Vue 3.5 + TypeScript 5.9 + Vite 8 + Element Plus 2.13 |
|
||||
|
||||
### 2.3 两个应用入口文件的关系
|
||||
|
||||
项目存在两个 Flask app 实例:
|
||||
|
||||
| 文件 | 用途 | 状态 |
|
||||
|------|------|------|
|
||||
| `src/flask_prompt_master/app.py` | 独立模拟模板 API 服务 (端口 5000) | **弃用/遗留** - Mock 数据,与主应用无关 |
|
||||
| `src/flask_prompt_master/__init__.py` | 主应用工厂 `create_app()` | **活跃** - 所有蓝图注册、扩展初始化 |
|
||||
|
||||
`run_dev.py` 和 `run_production.py` 均使用 `create_app()` 工厂函数。
|
||||
|
||||
---
|
||||
|
||||
## 3. 目录结构详解
|
||||
|
||||
```
|
||||
D:\aaa\aitsc/
|
||||
├── run_dev.py # 开发入口 (Flask dev server, 端口 5002)
|
||||
├── run_production.py # 生产入口 (Waitress WSGI)
|
||||
├── config.py # 旧版配置 (已弃用, 重定向)
|
||||
│
|
||||
├── config/ # 新版多环境配置系统
|
||||
│ ├── __init__.py # 配置工厂 get_config()
|
||||
│ ├── base.py # 基础配置类 (公共项)
|
||||
│ ├── development.py # 开发环境配置
|
||||
│ ├── production.py # 生产环境配置
|
||||
│ ├── testing.py # 测试环境配置
|
||||
│ └── local.py # 本地环境配置
|
||||
│
|
||||
├── src/flask_prompt_master/ # ★ Flask 应用核心
|
||||
│ ├── __init__.py # 应用工厂 create_app() + 蓝图注册
|
||||
│ ├── app.py # 遗留 Mock API (独立 app, 无关)
|
||||
│ ├── config.py # 旧版配置引用
|
||||
│ ├── user_context.py # 当前用户标识获取
|
||||
│ ├── promptsTemplates.py # 4214 行模板数据初始化脚本
|
||||
│ │
|
||||
│ ├── routes/ # ★ 路由层 (20+ 蓝图)
|
||||
│ │ ├── __init__.py # 包导出
|
||||
│ │ ├── routes.py # 主路由 (1467 行, 核心生成/模板/微信)
|
||||
│ │ ├── auth.py # 用户认证 (登录/注册/资料/密码)
|
||||
│ │ ├── favorites.py # 收藏管理
|
||||
│ │ ├── history_routes.py # 历史记录 (484 行)
|
||||
│ │ ├── meal_planning.py # 饭菜规划
|
||||
│ │ ├── poetry.py # 古诗词解析
|
||||
│ │ ├── weekly_report.py # 智能周报生成
|
||||
│ │ ├── travel_planning.py # 旅行攻略规划
|
||||
│ │ ├── meeting_minutes.py # 会议纪要整理
|
||||
│ │ ├── resume_optimization.py # 简历/求职信优化
|
||||
│ │ ├── prompt_optimization.py # 提示词优化 (通用)
|
||||
│ │ ├── smart_prompt_optimization.py # 智能提示词优化
|
||||
│ │ ├── expert_generate_2.py # 专家模式 2 号
|
||||
│ │ ├── expert_generate_3.py # 专家模式 3 号
|
||||
│ │ ├── android_tools.py # Android 工程师专区
|
||||
│ │ ├── prompt_quality_routes.py # 提示词质量评价
|
||||
│ │ ├── comparison_routes.py # 对比评价
|
||||
│ │ ├── evaluation_routes.py # 历史评价
|
||||
│ │ ├── placeholder_apps.py # 占位应用
|
||||
│ │ └── prompts.py # 简短路由
|
||||
│ │
|
||||
│ ├── models/ # ★ 数据模型层
|
||||
│ │ ├── __init__.py
|
||||
│ │ ├── models.py # 核心模型 (User/WxUser/Prompt/MealPlan/等)
|
||||
│ │ ├── favorites.py # 收藏模型
|
||||
│ │ ├── poetry_favorites.py # 古诗词收藏模型
|
||||
│ │ ├── history_models.py # 历史记录模型 (PromptHistory/HistoryTag/UserStatistics)
|
||||
│ │ ├── optimization_history.py # 优化历史模型
|
||||
│ │ ├── prompt_quality_models.py # 提示词质量评价记录
|
||||
│ │ └── evaluation_models.py # 评价对比模型
|
||||
│ │
|
||||
│ ├── services/ # ★ 服务层
|
||||
│ │ ├── __init__.py
|
||||
│ │ ├── auth_service.py # 用户认证服务 (注册/登录/密码)
|
||||
│ │ ├── favorite_service.py # 收藏管理服务
|
||||
│ │ ├── poetry_favorite_service.py # 古诗词收藏服务
|
||||
│ │ └── prompt_quality_service.py # 提示词质量评价 AI 调用
|
||||
│ │
|
||||
│ ├── admin/ # Flask-Admin 管理后台
|
||||
│ │ ├── __init__.py # init_admin() + 视图注册
|
||||
│ │ ├── models/admin_user.py # 管理员模型
|
||||
│ │ ├── forms/admin_forms.py # 管理员表单
|
||||
│ │ └── views/ # 10 个管理视图
|
||||
│ │ ├── user_admin.py
|
||||
│ │ ├── prompt_admin.py
|
||||
│ │ ├── template_admin.py
|
||||
│ │ ├── system_admin.py
|
||||
│ │ ├── analytics_admin.py
|
||||
│ │ ├── batch_admin.py
|
||||
│ │ ├── monitor_admin.py
|
||||
│ │ ├── report_admin.py
|
||||
│ │ ├── backup_admin.py
|
||||
│ │ └── api_admin.py
|
||||
│ │
|
||||
│ ├── templates/ # Jinja2 模板 (SSR 页面)
|
||||
│ ├── static/ # 静态资源
|
||||
│ ├── forms/ # WTForms 表单
|
||||
│ └── utils/ # 工具函数
|
||||
│
|
||||
├── flask_prompt_master/ # 旧版路由 (遗留)
|
||||
│ └── routes.py # 1176 行旧路由文件
|
||||
│
|
||||
├── vue-app/ # ★ Vue 3 新前端
|
||||
│ ├── src/
|
||||
│ │ ├── main.ts # 应用入口
|
||||
│ │ ├── App.vue # 根组件
|
||||
│ │ ├── router/index.ts # Vue Router (14 路由)
|
||||
│ │ ├── api/ # API 接口层
|
||||
│ │ │ ├── client.ts # Axios 实例 (withCredentials)
|
||||
│ │ │ ├── index.ts # Axios 实例 (dev 直连)
|
||||
│ │ │ ├── modules/ # 14 个 API 模块
|
||||
│ │ │ │ ├── auth.ts, prompt.ts, favorite.ts, history.ts,
|
||||
│ │ │ │ ├── meal.ts, poetry.ts, optimization.ts, resume.ts,
|
||||
│ │ │ │ ├── android.ts, wx.ts, profile.ts, promptQuality.ts,
|
||||
│ │ │ │ ├── comparison.ts, evaluation.ts
|
||||
│ │ │ └── types/ # TypeScript 类型定义
|
||||
│ │ ├── stores/auth.ts # Pinia 认证状态
|
||||
│ │ ├── views/ # 15+ 页面组件
|
||||
│ │ │ ├── HomeView.vue, GenerateView.vue, FavoritesView.vue,
|
||||
│ │ │ ├── HistoryView.vue, MealPlanningView.vue, PoetryView.vue,
|
||||
│ │ │ ├── OptimizationView.vue, AndroidToolsView.vue,
|
||||
│ │ │ ├── ResumeOptimizationView.vue, PromptQualityView.vue,
|
||||
│ │ │ ├── ComparisonEvaluationView.vue, EvaluationHistoryView.vue,
|
||||
│ │ │ ├── ProfileView.vue, Auth/ (LoginView, RegisterView),
|
||||
│ │ │ └── Admin/
|
||||
│ │ ├── components/ # 组件 (common/forms/ui/layout)
|
||||
│ │ ├── layouts/ # DefaultLayout.vue, AuthLayout.vue
|
||||
│ │ └── composables/ # 组合式函数
|
||||
│ ├── vite.config.ts # Vite 代理配置
|
||||
│ └── package.json
|
||||
│
|
||||
├── wechat-miniprogram/ # 微信小程序
|
||||
├── docker/ # Docker 配置 (Nginx/MySQL/SSL)
|
||||
├── k8s/ # Kubernetes 部署
|
||||
├── migrations/ # Flask-Migrate 迁移脚本
|
||||
├── scripts/ # 运维脚本
|
||||
├── docs/ # 文档
|
||||
├── logs/ # 日志输出
|
||||
├── uploads/ # 文件上传
|
||||
├── backups/ # 备份
|
||||
└── docker-compose.yml # 4 服务 Docker 编排
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 4. 核心模块分析
|
||||
|
||||
### 4.1 模块全景图
|
||||
|
||||
项目包含 15 个功能模块,按重要性分为三个层级:
|
||||
|
||||
| 层级 | 模块 | 蓝图/Bp | 路由文件 | 代码规模 |
|
||||
|------|------|---------|----------|----------|
|
||||
| **P0 核心** | 提示词生成 (主) | main | routes.py | 1467 行 |
|
||||
| **P0 核心** | 用户认证 | auth | auth.py | 209 行 |
|
||||
| **P0 核心** | 历史记录 | history | history_routes.py | 484 行 |
|
||||
| **P0 核心** | 收藏管理 | favorites | favorites.py | 97 行 |
|
||||
| **P1 垂直** | 饭菜规划 | meal_planning | meal_planning.py | |
|
||||
| **P1 垂直** | 古诗词解析 | poetry | poetry.py | |
|
||||
| **P1 垂直** | 周报生成 | weekly_report | weekly_report.py | |
|
||||
| **P1 垂直** | 旅行攻略 | travel_planning | travel_planning.py | |
|
||||
| **P1 垂直** | 会议纪要 | meeting_minutes | meeting_minutes.py | |
|
||||
| **P1 垂直** | 简历优化 | resume_optimization | resume_optimization.py | |
|
||||
| **P1 垂直** | 提示词质量评价 | prompt_quality | prompt_quality_routes.py | 198 行 |
|
||||
| **P1 垂直** | 对比评价 | comparison | comparison_routes.py | |
|
||||
| **P2 辅助** | 专家模式 2 号 | expert_generate_2 | expert_generate_2.py | |
|
||||
| **P2 辅助** | 专家模式 3 号 | expert_generate_3 | expert_generate_3.py | |
|
||||
| **P2 辅助** | Android 工具 | android_tools | android_tools.py | |
|
||||
| **P2 辅助** | 占位应用 | placeholder | placeholder_apps.py | |
|
||||
|
||||
### 4.2 提示词生成流程 (核心链路)
|
||||
|
||||
```
|
||||
用户输入描述
|
||||
│
|
||||
▼
|
||||
选择模板 (可选) ──→ get_system_prompt(template_id)
|
||||
│ │
|
||||
│ ├─ 有 TemplateID → PromptTemplate.query.get(id)
|
||||
│ ├─ 无 → 查找 is_default=True 模板
|
||||
│ └─ 无默认 → 硬编码默认系统提示词
|
||||
│
|
||||
▼
|
||||
generate_with_llm(input_text, template_id, max_retries=3)
|
||||
│
|
||||
├─ 构建 messages: [system_prompt, user_input]
|
||||
├─ 调用 OpenAI client (DeepSeek, model=deepseek-chat)
|
||||
├─ 超时: 60s, 温度: 0.7, max_tokens: 500
|
||||
├─ 失败 → 指数退避重试 (2^attempt 秒)
|
||||
│
|
||||
▼
|
||||
save_to_history() → PromptHistory 表
|
||||
│
|
||||
▼
|
||||
保存 Prompt 表 → UserStatistics 更新
|
||||
│
|
||||
▼
|
||||
返回 generated_text (Markdown)
|
||||
```
|
||||
|
||||
### 4.3 LLM 调用参数汇总
|
||||
|
||||
| 场景 | temperature | max_tokens | timeout | 重试 |
|
||||
|------|------------|------------|---------|------|
|
||||
| 通用提示词生成 | 0.7 | 500 | 60s | 3 次 |
|
||||
| 意图识别 | 0.1 | - | - | - |
|
||||
| 专家提示词生成 | 0.7 | 2000 | - | - |
|
||||
| 提示词质量评价 | 0.35 | 4096 | 120s | - |
|
||||
| 饭菜规划 | 0.7 | - | - | - |
|
||||
| 古诗词解析 | 0.7 | - | - | - |
|
||||
|
||||
### 4.4 微信小程序集成架构
|
||||
|
||||
```
|
||||
微信小程序端
|
||||
│
|
||||
├── wx.login() → code
|
||||
│ │
|
||||
│ ▼
|
||||
│ POST /api/wx/login { code }
|
||||
│ │
|
||||
│ ├── 请求微信 jscode2session API
|
||||
│ ├── 获取 openid + session_key
|
||||
│ ├── 查找/创建 WxUser 记录
|
||||
│ └── 返回 token + uid
|
||||
│
|
||||
├── POST /api/wx/generate { uid, input_text, template_id? }
|
||||
│
|
||||
├── GET /api/wx/templates
|
||||
├── GET /api/wx/template/<id>
|
||||
├── GET /api/wx/prompts?uid=xxx
|
||||
└── POST /api/wx/update_userinfo
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 5. 数据模型设计
|
||||
|
||||
### 5.1 核心模型 ER 关系
|
||||
|
||||
```
|
||||
User (uid PK)
|
||||
├── prompts ────────── Prompt (id PK, user_id FK, wx_user_id FK)
|
||||
│ └── feedbacks ─── Feedback (id PK, user_id FK, prompt_id FK)
|
||||
├── feedbacks ──────── Feedback
|
||||
├── meal_plans ─────── MealPlan
|
||||
├── weekly_reports ─── WeeklyReport
|
||||
├── travel_plans ───── TravelPlan
|
||||
├── meeting_minutes ─── MeetingMinutes
|
||||
└── resume_optimizations ── ResumeOptimization
|
||||
|
||||
WxUser (id PK)
|
||||
├── prompts ────────── Prompt
|
||||
├── feedbacks ──────── Feedback
|
||||
└── meal_plans ─────── MealPlan
|
||||
|
||||
PromptTemplate (id PK)
|
||||
└── (独立, 无外键关联)
|
||||
|
||||
PromptHistory (id PK)
|
||||
└── history_tags ──── HistoryTag (history_id FK)
|
||||
|
||||
PromptQualityRecord (id PK)
|
||||
└── (独立评价记录)
|
||||
```
|
||||
|
||||
### 5.2 模型列表与用途
|
||||
|
||||
| 模型 | 表名 | 用途 | 来源文件 |
|
||||
|------|------|------|----------|
|
||||
| User | user | Web 用户 (登录名/密码/昵称/邮箱/手机) | models.py |
|
||||
| WxUser | wx_user | 微信用户 (openid/session_key/unionid) | models.py |
|
||||
| Prompt | prompt | 提示词生成记录 (输入/输出) | models.py |
|
||||
| Feedback | feedback | 对 Prompt 的评分/评论 | models.py |
|
||||
| PromptTemplate | prompt_template | 提示词模板 (分类/行业/系统提示词) | models.py |
|
||||
| MealPlan | meal_plan | 饭菜规划参数与结果 | models.py |
|
||||
| WeeklyReport | weekly_report | 智能周报/日报 | models.py |
|
||||
| TravelPlan | travel_plan | 旅行攻略 | models.py |
|
||||
| MeetingMinutes | meeting_minutes | 会议纪要 | models.py |
|
||||
| ResumeOptimization | resume_optimization | 简历/求职信优化 | models.py |
|
||||
| Favorite | favorite | 通用收藏 | favorites.py |
|
||||
| PoetryFavorite | poetry_favorite | 古诗词收藏 | poetry_favorites.py |
|
||||
| PromptHistory | prompt_history | 提示词历史 (含标签/评分/收藏) | history_models.py |
|
||||
| HistoryTag | history_tags | 历史记录标签 | history_models.py |
|
||||
| UserStatistics | user_statistics | 用户使用统计 | history_models.py |
|
||||
| PromptQualityRecord | prompt_quality_record | 提示词质量评价记录 | prompt_quality_models.py |
|
||||
| AdminUser | admin_user | 管理员 (用户名/密码/角色) | admin/models/ |
|
||||
|
||||
### 5.3 密码安全
|
||||
|
||||
`User.login_pwd` + `User.login_salt` 使用混合哈希策略:
|
||||
|
||||
- **新用户**: `login_salt = 'bcrypt'`, 使用 `bcrypt.hashpw()` 哈希密码
|
||||
- **旧用户**: `login_salt = MD5 随机值`, 使用 `MD5(password + salt)` (高危)
|
||||
|
||||
`WxUser` 使用 `MD5(openid + timestamp)` 生成登录 token。
|
||||
|
||||
---
|
||||
|
||||
## 6. API 路由体系
|
||||
|
||||
### 6.1 路由组织架构
|
||||
|
||||
应用通过 `create_app()` 注册以下蓝图:
|
||||
|
||||
| 蓝图名称 | URL 前缀 | 主要功能 |
|
||||
|---------|---------|---------|
|
||||
| main | `/` | 主页生成、模板 API、微信 API、特色功能 |
|
||||
| auth | `/` | 注册/登录/登出/资料/密码 |
|
||||
| favorites | `/` | 收藏 CRUD |
|
||||
| history | `/` | 历史记录查询/更新/删除/统计 |
|
||||
| meal_planning | `/meal-planning` | 饭菜规划页面+API |
|
||||
| poetry | `/poetry` | 古诗词解析页面+API |
|
||||
| weekly_report | `/` | 周报生成 |
|
||||
| travel_planning | `/` | 旅行攻略 |
|
||||
| meeting_minutes | `/` | 会议纪要 |
|
||||
| resume_optimization | `/` | 简历优化 |
|
||||
| prompt_quality | `/` | 提示词质量评价 |
|
||||
| prompt_optimization | `/` | 通用提示词优化 |
|
||||
| smart_prompt_optimization | `/` | 智能提示词优化 |
|
||||
| expert_generate_2 | `/` | 专家模式 2 |
|
||||
| expert_generate_3 | `/` | 专家模式 3 |
|
||||
| android_tools | `/` | Android 工具区 |
|
||||
| comparison | `/` | 对比评价 |
|
||||
| evaluation | `/` | 历史评价 |
|
||||
| placeholder | `/` | 占位应用 |
|
||||
|
||||
### 6.2 关键 API 端点
|
||||
|
||||
#### 认证类
|
||||
```
|
||||
POST /api/register # 注册 (JSON body)
|
||||
POST /api/login # 登录 (JSON body, session 维持)
|
||||
POST /api/logout # 登出
|
||||
GET /api/check-login # 检查登录状态
|
||||
GET /api/profile # 获取个人资料 (需登录)
|
||||
PUT /api/profile # 更新个人资料 (需登录)
|
||||
POST /api/change-password # 修改密码 (需登录)
|
||||
GET /api/profile/stats # 用户统计 (需登录)
|
||||
```
|
||||
|
||||
#### 生成类
|
||||
```
|
||||
GET / # 主生成页面 (SSR, GET/POST)
|
||||
GET /api/generate/meta # 获取筛选维度元数据 (Vue 用)
|
||||
POST /api/prompt/generate # 生成提示词 (JSON API, Vue 用)
|
||||
GET /api/templates/<category> # 按分类获取模板列表
|
||||
GET /api/template/<id> # 获取单个模板详情
|
||||
DELETE /api/templates/<id> # 删除模板
|
||||
```
|
||||
|
||||
#### 微信类
|
||||
```
|
||||
POST /api/wx/login # 微信登录 (code → openid+token)
|
||||
POST /api/wx/generate # 微信端生成提示词
|
||||
GET /api/wx/templates # 微信端模板列表
|
||||
GET /api/wx/template/<id> # 微信端模板详情
|
||||
GET /api/wx/prompts # 微信端用户历史
|
||||
POST /api/wx/update_userinfo # 更新微信用户信息
|
||||
```
|
||||
|
||||
#### 收藏/历史类
|
||||
```
|
||||
GET/POST /api/favorites # 收藏列表/添加
|
||||
DELETE /api/favorites/<id> # 删除收藏
|
||||
POST /api/favorites/quick-add # 快速收藏
|
||||
GET /api/history # 历史记录列表
|
||||
DELETE /api/history/<id> # 删除历史记录
|
||||
PUT /api/history/<id> # 更新历史记录
|
||||
```
|
||||
|
||||
#### 垂直应用类
|
||||
```
|
||||
/meal-planning/* # 饭菜规划
|
||||
/poetry/* # 古诗词解析
|
||||
/api/weekly-report/* # 周报
|
||||
/api/travel-planning/* # 旅行
|
||||
/api/meeting-minutes/* # 会议纪要
|
||||
/api/resume-optimization/* # 简历
|
||||
```
|
||||
|
||||
### 6.3 响应格式混用
|
||||
|
||||
项目中存在两种 API 响应格式,未统一:
|
||||
|
||||
**格式 A** (主路由, 传统 SSR):
|
||||
```json
|
||||
{ "success": true, "data": {...}, "message": "" }
|
||||
```
|
||||
|
||||
**格式 B** (微信路由, app.py):
|
||||
```json
|
||||
{ "code": 200, "message": "success", "data": {...} }
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 7. 配置系统
|
||||
|
||||
### 7.1 配置架构
|
||||
|
||||
```
|
||||
┌────────────────────────────────────┐
|
||||
│ .env 文件 (dotenv) │
|
||||
│ SECRET_KEY, DATABASE_URL, │
|
||||
│ LLM_API_KEY, WX_APPID, etc. │
|
||||
└──────────────┬─────────────────────┘
|
||||
│
|
||||
▼
|
||||
┌────────────────────────────────────┐
|
||||
│ config/__init__.py │
|
||||
│ get_config() → 按 FLASK_ENV │
|
||||
│ 返回对应配置类 │
|
||||
├────────────────────────────────────┤
|
||||
│ base.py 基础配置 (所有环境) │
|
||||
│ development 开发环境 (DEBUG=True) │
|
||||
│ production 生产环境 │
|
||||
│ testing 测试环境 │
|
||||
│ local 本地环境 │
|
||||
└────────────────────────────────────┘
|
||||
```
|
||||
|
||||
### 7.2 关键配置项
|
||||
|
||||
| 配置项 | 来源 | 生产默认值 |
|
||||
|--------|------|-----------|
|
||||
| SECRET_KEY | 环境变量 | 无默认 (必填) |
|
||||
| DATABASE_URL | 环境变量 | 无默认 (必填) |
|
||||
| TENCENT_DATABASE_URL | 环境变量 | 可选 |
|
||||
| LLM_API_URL | 环境变量 | `https://api.deepseek.com/v1` |
|
||||
| LLM_API_KEY | 环境变量 | 无默认 |
|
||||
| WX_APPID / WX_SECRET | 环境变量 | 无默认 |
|
||||
| CORS_ORIGINS | 环境变量 | `*` (开发) |
|
||||
| SESSION_LIFETIME_HOURS | 环境变量 | 24 |
|
||||
| CACHE_TYPE | 环境变量 | simple |
|
||||
|
||||
### 7.3 遗留配置
|
||||
|
||||
`config.py` (根目录) 已被弃用,通过 `DeprecationWarning` 重定向到 `config/` 系统,但保留向后兼容。
|
||||
|
||||
---
|
||||
|
||||
## 8. 部署架构
|
||||
|
||||
### 8.1 Docker Compose 编排
|
||||
|
||||
```
|
||||
┌──────────┐
|
||||
│ Nginx │ :80/:443
|
||||
└────┬─────┘
|
||||
│
|
||||
┌────────────────┼────────────────┐
|
||||
▼ ▼ ▼
|
||||
┌─────────┐ ┌──────────┐ ┌──────────┐
|
||||
│ Flask │ │ MySQL │ │ Redis │
|
||||
│ :5000 │ │ :3306 │ │ :6379 │
|
||||
└─────────┘ └──────────┘ └──────────┘
|
||||
```
|
||||
|
||||
- **app**: Python 3.9-slim 镜像, Gunicorn + run_dev:app
|
||||
- **db**: MySQL 8.0, 数据卷持久化, 初始化脚本 `docker/mysql/init.sql`
|
||||
- **redis**: Redis 7-alpine, AOF 持久化
|
||||
- **nginx**: Nginx alpine, 反向代理 + SSL
|
||||
|
||||
### 8.2 两种运行模式
|
||||
|
||||
| 模式 | 入口 | 服务器 | 端口 |
|
||||
|------|------|--------|------|
|
||||
| 开发 | `run_dev.py` | Flask dev server | 5002 |
|
||||
| 生产 (Windows) | `run_production.py` | Waitress (4 threads) | 5000 |
|
||||
| 生产 (Linux) | `Dockerfile` CMD | Gunicorn (gunicorn.conf.py) | 5000 |
|
||||
|
||||
### 8.3 Windows 特殊说明
|
||||
|
||||
根目录有 `windows启动.bat` 和 `windows上唯一启动说明.md`,说明 Windows 环境下需要特殊处理:
|
||||
- `pywin32>=306` 依赖
|
||||
- 使用 Waitress 替代 Gunicorn
|
||||
- 使用 bash shell (Git Bash/WSL) 运行 shell 脚本
|
||||
|
||||
---
|
||||
|
||||
## 9. Vue 前端重构
|
||||
|
||||
### 9.1 当前进度
|
||||
|
||||
Vue 3 SPA 前端位于 `vue-app/`,与 Flask 后端并行开发,已完成:
|
||||
|
||||
| 页面 | 路由 | 状态 |
|
||||
|------|------|------|
|
||||
| 首页 | `/` | 已完成 |
|
||||
| 提示词生成 | `/generate` | 已完成 (14 种场景 Tab + 筛选 + 模板选择 + AI 生成) |
|
||||
| 收藏管理 | `/favorites` | 已完成 |
|
||||
| 登录/注册 | `/login`, `/register` | 已完成 (Session Cookie 认证) |
|
||||
| 个人资料 | `/profile` | 已完成 (需登录) |
|
||||
| 优化历史 | `/history` | 已完成 |
|
||||
| 饭菜规划 | `/meal-planning` | 已完成 |
|
||||
| 古诗词 | `/poetry` | 已完成 |
|
||||
| 提示词优化 | `/optimization` | 已完成 |
|
||||
| Android 工具 | `/android-tools` | 已完成 |
|
||||
| 简历优化 | `/resume-optimization` | 已完成 |
|
||||
| 提示词质量评价 | `/prompt-quality` | 已完成 |
|
||||
|
||||
### 9.2 代理配置
|
||||
|
||||
Vite 开发服务器 (端口 3000) 通过 `vite.config.ts` 配置代理:
|
||||
```typescript
|
||||
proxy: {
|
||||
'/api': { target: 'http://127.0.0.1:5002' },
|
||||
'/static': { target: 'http://127.0.0.1:5002' },
|
||||
'/poetry': { target: 'http://127.0.0.1:5002' }
|
||||
}
|
||||
```
|
||||
|
||||
Axios 配置 `withCredentials: true` 以携带 Session Cookie,实现同域下的认证状态共享。
|
||||
|
||||
### 9.3 构建产物
|
||||
|
||||
生产构建使用 `npm run build`,产物在 `dist/`,由 Nginx 托管静态文件,API 请求反代到 Flask。
|
||||
|
||||
### 9.4 API 模块覆盖
|
||||
|
||||
Vue 前端已有 14 个 API 模块与后端对接:
|
||||
|
||||
- `auth.ts`, `prompt.ts`, `favorite.ts`, `history.ts`
|
||||
- `meal.ts`, `poetry.ts`, `optimization.ts`, `resume.ts`
|
||||
- `android.ts`, `wx.ts`, `profile.ts`, `promptQuality.ts`
|
||||
- `comparison.ts`, `evaluation.ts`
|
||||
|
||||
---
|
||||
|
||||
## 10. 安全问题诊断
|
||||
|
||||
### 10.1 高危问题
|
||||
|
||||
#### (1) API Key 硬编码
|
||||
|
||||
**位置**: 多个文件中硬编码 DeepSeek API Key
|
||||
|
||||
| 文件 | 行 | 风险 |
|
||||
|------|-----|------|
|
||||
| `src/flask_prompt_master/routes/routes.py` | 22 | `api_key='sk-fdf7cc1c73504e628ec0119b7e11b8cc'` |
|
||||
| `src/flask_prompt_master/routes/expert_generate_2.py` | 22 | 同上 |
|
||||
| `src/flask_prompt_master/routes/expert_generate_3.py` | 22 | 同上 |
|
||||
| `config.py` (旧) | 16 | 注释中仍有硬编码值 |
|
||||
|
||||
**风险**: 如果代码泄露,API Key 会被曝光,可能导致额度耗尽或安全事件。
|
||||
|
||||
#### (2) 密码安全策略不足
|
||||
|
||||
- **旧用户密码**: MD5(password + salt) — MD5 已被证明不安全
|
||||
- **微信 Token**: `hashlib.md5(f'{openid}{int(time.time())}'.encode()).hexdigest()` — 可预测
|
||||
- **User.login_salt**: 明文存储
|
||||
|
||||
### 10.2 中危问题
|
||||
|
||||
#### (3) CORS 配置过于宽松
|
||||
|
||||
`config/development.py:51`:
|
||||
```python
|
||||
CORS_ORIGINS = ['http://localhost:3000', 'http://127.0.0.1:3000', '*']
|
||||
```
|
||||
|
||||
开发环境包含 `*`,生产环境 CORS_ORIGINS 默认值来自 `.env`,若未配置也可能放宽。
|
||||
|
||||
#### (4) WeChat API 日志泄露
|
||||
|
||||
`routes.py:643-647`:
|
||||
```python
|
||||
print("\n=== 微信登录配置 ===")
|
||||
print(f"APPID: {WX_APPID}")
|
||||
print(f"SECRET: {WX_SECRET}") # 在控制台打印密钥
|
||||
print("==================\n")
|
||||
```
|
||||
|
||||
以及在 `log_manager.py`、`monitor_manager.py` 中多处 `print` 包含敏感信息。
|
||||
|
||||
### 10.3 低危问题
|
||||
|
||||
#### (5) 用户上下文默认回退
|
||||
|
||||
`user_context.py:23`:
|
||||
```python
|
||||
return 1 # 未登录时回退到 user_id=1
|
||||
```
|
||||
|
||||
未登录用户生成的内容会被关联到 user_id=1 (admin),可能污染数据统计。
|
||||
|
||||
---
|
||||
|
||||
## 11. 技术债务清单
|
||||
|
||||
### 11.1 代码重复
|
||||
|
||||
| 重复项 | 文件 | 说明 |
|
||||
|--------|------|------|
|
||||
| 专家提示词逻辑 | `expert_generate_2.py` + `expert_generate_3.py` + `smart_prompt_optimization.py` | 3 个独立实现,意图分析提示词和领域专家模板几乎完全一致 (80%+ 重复) |
|
||||
| LLM 客户端创建 | `routes.py:22`, `expert_generate_2.py:21`, `expert_generate_3.py:22`, `prompt_quality_service.py:47` | 每个文件独立创建 `OpenAI(...)` 客户端,且硬编码 key |
|
||||
| 意图分析提示词 | `expert_generate_2.py:27-45` vs `expert_generate_3.py:27-45` | 逐字重复,仅变量名不同 |
|
||||
| Axios 实例 | `api/index.ts` vs `api/client.ts` | 两个不同的 Axios 实例配置,功能重叠 |
|
||||
| 提示词模板数据 | `promptsTemplates.py` (4214 行) | 模板数据硬编码在 Python 文件中,应使用数据库 seed 或 JSON 配置 |
|
||||
|
||||
### 11.2 架构问题
|
||||
|
||||
| 问题 | 影响 |
|
||||
|------|------|
|
||||
| `routes.py` 1467 行单文件 | 难以维护,路由职责混杂 (SSR 页面 + API + 微信 + 模板管理) |
|
||||
| 两个 Flask app 实例 (`__init__.py` + `app.py`) | 新手困惑,app.py 是遗留 Mock 服务 |
|
||||
| 旧版 `flask_prompt_master/routes.py` (1176 行) 与新版并存 | 不确定是否仍在使用 |
|
||||
| 服务层覆盖不全 | 只有 4 个 service 文件,大部分业务逻辑在 route 文件中 |
|
||||
| 错误处理依赖 `print` 和 `flash` | 缺乏统一错误处理中间件 |
|
||||
| 无自动化测试 | 根目录 30+ 手动测试脚本,无 pytest/unittest |
|
||||
|
||||
### 11.3 前端问题
|
||||
|
||||
| 问题 | 说明 |
|
||||
|------|------|
|
||||
| 双前端并行 | SSR (Jinja2) + Vue 3 SPA 同时存在,维护成本高 |
|
||||
| 表单使用 SSR | 主生成页面仍走 `POST /` 表单提交 (非 SPA) |
|
||||
| Element Plus 版本 | 2.13.6 (2025 年版本),非最新 |
|
||||
|
||||
### 11.4 安全问题 (汇总)
|
||||
|
||||
| 等级 | 数量 | 详情 |
|
||||
|------|------|------|
|
||||
| 高危 | 2 | API Key 硬编码、MD5 密码 |
|
||||
| 中危 | 2 | CORS `*`、密钥日志泄露 |
|
||||
| 低危 | 1 | user_context 默认回退 |
|
||||
|
||||
---
|
||||
|
||||
## 12. 改进建议
|
||||
|
||||
### 12.1 安全修复 (优先)
|
||||
|
||||
1. **移除所有硬编码 API Key**: 从环境变量读取,删除 `routes.py:22`、`expert_generate_2.py:22`、`expert_generate_3.py:22` 中的硬编码值
|
||||
2. **迁移旧用户密码到 bcrypt**: 在登录时检测 `login_salt == 'bcrypt'`,若非 bcrypt 则透明升级
|
||||
3. **微信 Token 改用 secrets.token_urlsafe()**: 替换 MD5 方式
|
||||
4. **移除敏感日志**: 删除 WX_SECRET、API Key 等敏感信息的 print 日志
|
||||
|
||||
### 12.2 代码重构 (中期)
|
||||
|
||||
1. **合并专家模式**: 将 3 个 expert_generate 实现合并为一个,通过参数配置差异
|
||||
2. **拆分 routes.py**: 将 SSR 页面路由与 API 路由分离
|
||||
3. **统一响应格式**: 全局定义 `{success, data, message}` 或 `{code, message, data}`,二选一
|
||||
4. **删除遗留代码**: 确认并移除 `flask_prompt_master/routes.py` 和 `src/flask_prompt_master/app.py`
|
||||
|
||||
### 12.3 架构改进 (长期)
|
||||
|
||||
1. **完成 Vue 迁移**: 移除 Jinja2 SSR 模板,全面切换到 Vue 3 SPA
|
||||
2. **服务层完善**: 将 routes 中的业务逻辑抽取到 services (如 LLM 调用、模板管理)
|
||||
3. **统一 LLM 客户端**: 创建 `LLMService` 单例或工厂,所有模块共享
|
||||
4. **引入自动化测试**: 至少覆盖核心 API 路由和认证流程
|
||||
5. **API 版本管理**: 统一 API 路径为 `/api/v1/...`
|
||||
|
||||
### 12.4 立即可执行项
|
||||
|
||||
| 优先级 | 操作 | 预估工作量 |
|
||||
|--------|------|-----------|
|
||||
| P0 | 移除 API Key 硬编码 | 1 小时 |
|
||||
| P0 | 删除敏感 print 日志 | 30 分钟 |
|
||||
| P1 | 配置生产环境 CORS_ORIGINS | 15 分钟 |
|
||||
| P1 | 统一 LLM 客户端创建方式 | 2 小时 |
|
||||
| P2 | 清理遗留 app.py | 30 分钟 |
|
||||
| P2 | 合并 .env 文件 (.env, .env.test, .env.backup, env.example 等 6 个) | 30 分钟 |
|
||||
|
||||
---
|
||||
|
||||
## 附录
|
||||
|
||||
### A. 文件规模统计
|
||||
|
||||
| 文件 | 行数 | 类型 |
|
||||
|------|------|------|
|
||||
| promptsTemplates.py | 4214 | 模板数据 |
|
||||
| routes.py (新) | 1467 | 主路由 |
|
||||
| routes.py (旧) | 1176 | 旧路由 |
|
||||
| expert_generate_3.py | ~300 | 专家模式 |
|
||||
| expert_generate_2.py | ~280 | 专家模式 |
|
||||
| history_routes.py | 484 | 历史路由 |
|
||||
| auth_service.py | 293 | 认证服务 |
|
||||
|
||||
### B. 依赖清单 (requirements.txt)
|
||||
|
||||
```
|
||||
flask>=2.2.0, flask-cors>=3.0.10, python-dotenv>=1.0.0
|
||||
openai>=1.3.0, flask-sqlalchemy>=3.0.2, flask-migrate>=4.0.4
|
||||
pymysql>=1.1.0, waitress>=3.0.0, redis>=5.0.1
|
||||
pywin32>=306, requests>=2.28.0, psutil>=5.9.0, bcrypt>=4.0.0
|
||||
```
|
||||
|
||||
### C. Git 分支与提交
|
||||
|
||||
- 当前分支: `main`
|
||||
- 最新提交: `5dad35d feat(prompt-quality): 质量评价与对比模块 API、脚本与 Vue 页面`
|
||||
- 总提交数: ~30 次
|
||||
- 活跃期: 2026-02 至 2026-04
|
||||
|
||||
### D. 关联文档
|
||||
|
||||
- `AI项目功能需求文档.md` — 完整功能需求规格
|
||||
- `API_INTERFACE_DOCUMENTATION.md` — API 接口文档
|
||||
- `项目现状评估.md` — 第三方项目评估报告
|
||||
- `vue重构方案.md` — Vue 渐进式迁移方案
|
||||
- `Python项目结构分析与优化报告.md` — 结构分析报告
|
||||
- `windows上唯一启动说明.md` — Windows 启动指南
|
||||
|
||||
---
|
||||
|
||||
*文档结束 — 基于 2026-05-02 代码库静态分析*
|
||||
@@ -16,6 +16,9 @@ FLASK_ENV=development
|
||||
# 调试模式(开发环境开启,生产环境关闭)
|
||||
DEBUG=True
|
||||
|
||||
# HTTP 端口(可选;仅 Waitress 生产 run_production.py 读取;开发 run_dev.py 固定 5002)
|
||||
# PORT=5000
|
||||
|
||||
# ========================================
|
||||
# 数据库配置
|
||||
# ========================================
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
|
||||
#### 使用说明
|
||||
|
||||
1. xxxx
|
||||
1. Windows:见 [windows上唯一启动说明.md](windows上唯一启动说明.md),根目录双击 `windows启动.bat`。
|
||||
2. xxxx
|
||||
3. xxxx
|
||||
|
||||
|
||||
@@ -80,7 +80,7 @@ python init_db.py
|
||||
python run_dev.py
|
||||
```
|
||||
|
||||
访问 http://localhost:5000 开始使用
|
||||
访问 http://localhost:5002 开始使用。仅 Windows 本机启停见仓库根目录 `windows上唯一启动说明.md` 与 `windows启动.bat`。
|
||||
|
||||
## 项目结构
|
||||
|
||||
|
||||
@@ -1,259 +0,0 @@
|
||||
# Windows 服务配置总结
|
||||
|
||||
## ✅ 配置完成状态
|
||||
|
||||
Flask 提示词大师应用已成功配置为 Windows 服务,支持开机自启动和后台运行。
|
||||
|
||||
## 📦 已创建的文件
|
||||
|
||||
### 核心服务文件
|
||||
|
||||
1. **`simple_windows_service.py`** ✅
|
||||
- 简化版 Windows 服务脚本
|
||||
- 使用 Windows 任务计划程序实现开机自启动
|
||||
- 支持服务启动、安装、删除功能
|
||||
|
||||
2. **`install_startup.bat`** ✅
|
||||
- 开机启动安装脚本
|
||||
- 需要管理员权限运行
|
||||
- 自动配置环境变量
|
||||
|
||||
3. **`simple_service_manager.bat`** ✅
|
||||
- 服务管理脚本
|
||||
- 提供图形化菜单操作
|
||||
- 支持启动、安装、删除、状态查询
|
||||
|
||||
### 配置文件
|
||||
|
||||
4. **`requirements.txt`** ✅
|
||||
- 更新了依赖包列表
|
||||
- 添加了 `pywin32` 和 `requests` 依赖
|
||||
|
||||
5. **`docs/development/Windows服务配置指南.md`** ✅
|
||||
- 详细的服务配置指南
|
||||
- 包含安装、管理、故障排除说明
|
||||
|
||||
## 🚀 服务特点
|
||||
|
||||
### ✅ 已实现功能
|
||||
|
||||
1. **开机自启动** ✅
|
||||
- 使用 Windows 任务计划程序
|
||||
- 系统启动时自动运行
|
||||
- 无需用户登录
|
||||
|
||||
2. **后台运行** ✅
|
||||
- 服务在后台持续运行
|
||||
- 支持多线程处理
|
||||
- 自动错误恢复
|
||||
|
||||
3. **日志记录** ✅
|
||||
- 详细的服务运行日志
|
||||
- 日志文件位置:`logs/simple_service.log`
|
||||
- 支持日志轮转
|
||||
|
||||
4. **环境配置** ✅
|
||||
- 自动设置生产环境变量
|
||||
- 配置 Python 路径
|
||||
- 支持虚拟环境
|
||||
|
||||
5. **健康检查** ✅
|
||||
- 服务状态监控
|
||||
- 自动健康检查
|
||||
- 错误报告机制
|
||||
|
||||
## 📋 使用方法
|
||||
|
||||
### 安装开机启动
|
||||
|
||||
1. **以管理员身份运行**:
|
||||
```bash
|
||||
# 右键点击 install_startup.bat
|
||||
# 选择"以管理员身份运行"
|
||||
```
|
||||
|
||||
2. **或使用命令行**:
|
||||
```bash
|
||||
python simple_windows_service.py install
|
||||
```
|
||||
|
||||
### 启动服务
|
||||
|
||||
1. **使用管理脚本**:
|
||||
```bash
|
||||
simple_service_manager.bat
|
||||
# 选择选项 1 启动服务
|
||||
```
|
||||
|
||||
2. **或使用命令行**:
|
||||
```bash
|
||||
python simple_windows_service.py start
|
||||
```
|
||||
|
||||
### 管理服务
|
||||
|
||||
```bash
|
||||
# 查看任务状态
|
||||
schtasks /query /tn "FlaskPromptMasterStartup"
|
||||
|
||||
# 删除开机启动任务
|
||||
python simple_windows_service.py remove
|
||||
|
||||
# 启动服务
|
||||
python simple_windows_service.py start
|
||||
```
|
||||
|
||||
## 🔧 技术实现
|
||||
|
||||
### 服务架构
|
||||
|
||||
1. **任务计划程序**
|
||||
- 使用 `schtasks` 命令创建系统任务
|
||||
- 触发条件:系统启动时
|
||||
- 运行账户:SYSTEM
|
||||
|
||||
2. **Flask 应用**
|
||||
- 生产环境配置
|
||||
- 多线程支持
|
||||
- 健康检查接口
|
||||
|
||||
3. **日志系统**
|
||||
- 文件日志和控制台日志
|
||||
- 自动创建日志目录
|
||||
- 支持中文编码
|
||||
|
||||
### 环境配置
|
||||
|
||||
```bash
|
||||
# 环境变量
|
||||
FLASK_ENV=production
|
||||
PYTHONPATH=项目根目录
|
||||
|
||||
# 虚拟环境
|
||||
.venv\Scripts\Activate.bat
|
||||
|
||||
# 依赖包
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
|
||||
## 📊 服务状态
|
||||
|
||||
### 当前运行状态
|
||||
|
||||
- **服务状态**:✅ 运行中
|
||||
- **访问地址**:`http://localhost:5000`
|
||||
- **健康检查**:✅ 正常
|
||||
- **环境**:production
|
||||
- **端口**:5000
|
||||
|
||||
### 任务计划状态
|
||||
|
||||
- **任务名称**:`FlaskPromptMasterStartup`
|
||||
- **触发条件**:系统启动时
|
||||
- **运行账户**:SYSTEM
|
||||
- **状态**:待安装(需要管理员权限)
|
||||
|
||||
## 🎯 下一步建议
|
||||
|
||||
### 立即可执行
|
||||
|
||||
1. **安装开机启动**:
|
||||
- 以管理员身份运行 `install_startup.bat`
|
||||
- 验证任务计划创建成功
|
||||
|
||||
2. **测试服务功能**:
|
||||
- 访问 `http://localhost:5000`
|
||||
- 测试所有功能模块
|
||||
- 检查日志文件
|
||||
|
||||
3. **配置防火墙**:
|
||||
- 允许端口 5000 的入站连接
|
||||
- 配置网络安全规则
|
||||
|
||||
### 可选优化
|
||||
|
||||
1. **性能监控**:
|
||||
- 配置服务监控工具
|
||||
- 设置性能告警
|
||||
|
||||
2. **日志管理**:
|
||||
- 配置日志轮转
|
||||
- 设置日志清理策略
|
||||
|
||||
3. **备份策略**:
|
||||
- 备份配置文件
|
||||
- 设置自动备份
|
||||
|
||||
## 🔒 安全考虑
|
||||
|
||||
1. **权限管理**
|
||||
- 服务以 SYSTEM 账户运行
|
||||
- 最小权限原则
|
||||
|
||||
2. **网络安全**
|
||||
- 配置防火墙规则
|
||||
- 限制访问来源
|
||||
|
||||
3. **日志安全**
|
||||
- 避免记录敏感信息
|
||||
- 定期清理日志
|
||||
|
||||
## 📞 技术支持
|
||||
|
||||
### 常见问题
|
||||
|
||||
1. **权限不足**
|
||||
- 确保以管理员身份运行安装脚本
|
||||
- 检查用户账户权限
|
||||
|
||||
2. **端口冲突**
|
||||
- 检查端口 5000 是否被占用
|
||||
- 修改服务脚本中的端口号
|
||||
|
||||
3. **服务启动失败**
|
||||
- 查看日志文件获取错误信息
|
||||
- 检查环境变量配置
|
||||
|
||||
### 调试方法
|
||||
|
||||
1. **查看服务日志**:
|
||||
```bash
|
||||
type logs\simple_service.log
|
||||
```
|
||||
|
||||
2. **检查任务状态**:
|
||||
```bash
|
||||
schtasks /query /tn "FlaskPromptMasterStartup"
|
||||
```
|
||||
|
||||
3. **手动测试服务**:
|
||||
```bash
|
||||
python simple_windows_service.py start
|
||||
```
|
||||
|
||||
## 📈 性能指标
|
||||
|
||||
### 当前性能
|
||||
|
||||
- **启动时间**:< 5 秒
|
||||
- **内存使用**:约 50MB
|
||||
- **响应时间**:< 100ms
|
||||
- **并发支持**:多线程
|
||||
|
||||
### 优化建议
|
||||
|
||||
1. **内存优化**
|
||||
- 监控内存使用情况
|
||||
- 配置内存限制
|
||||
|
||||
2. **连接优化**
|
||||
- 配置数据库连接池
|
||||
- 优化网络连接
|
||||
|
||||
3. **缓存策略**
|
||||
- 启用 Redis 缓存
|
||||
- 配置静态文件缓存
|
||||
|
||||
---
|
||||
|
||||
**总结**:Windows 服务配置已完成,应用现在可以作为系统服务运行,支持开机自启动和后台运行。所有核心功能都已实现并测试通过。🎉
|
||||
@@ -1,248 +0,0 @@
|
||||
# Windows 服务配置指南
|
||||
|
||||
## 📋 概述
|
||||
|
||||
本指南介绍如何将 Flask 提示词大师应用配置为 Windows 系统服务,实现开机自启动和后台运行。
|
||||
|
||||
## 🎯 服务特点
|
||||
|
||||
- **开机自启动**:系统启动时自动运行
|
||||
- **后台运行**:无需用户登录即可运行
|
||||
- **自动重启**:服务异常时自动重启
|
||||
- **日志记录**:详细的服务运行日志
|
||||
- **权限管理**:支持系统级权限运行
|
||||
|
||||
## 📦 文件说明
|
||||
|
||||
### 核心文件
|
||||
|
||||
1. **`flask_prompt_master_service.py`**
|
||||
- Windows 服务主程序
|
||||
- 继承 `win32serviceutil.ServiceFramework`
|
||||
- 实现服务的启动、停止、重启功能
|
||||
|
||||
2. **`install_service.bat`**
|
||||
- 服务安装脚本
|
||||
- 需要管理员权限运行
|
||||
- 自动配置环境变量
|
||||
|
||||
3. **`service_manager.bat`**
|
||||
- 服务管理脚本
|
||||
- 提供图形化菜单操作
|
||||
- 支持启动、停止、重启、状态查询
|
||||
|
||||
## 🚀 安装步骤
|
||||
|
||||
### 步骤一:准备环境
|
||||
|
||||
1. **确保虚拟环境已激活**
|
||||
```bash
|
||||
.venv\Scripts\Activate.bat
|
||||
```
|
||||
|
||||
2. **安装依赖**
|
||||
```bash
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
|
||||
3. **检查管理员权限**
|
||||
- 右键点击 `install_service.bat`
|
||||
- 选择"以管理员身份运行"
|
||||
|
||||
### 步骤二:安装服务
|
||||
|
||||
1. **运行安装脚本**
|
||||
```bash
|
||||
install_service.bat
|
||||
```
|
||||
|
||||
2. **验证安装**
|
||||
- 打开"服务"管理器(services.msc)
|
||||
- 查找"Flask 提示词大师服务"
|
||||
- 确认服务已安装
|
||||
|
||||
### 步骤三:启动服务
|
||||
|
||||
1. **使用管理脚本**
|
||||
```bash
|
||||
service_manager.bat
|
||||
```
|
||||
选择选项 1 启动服务
|
||||
|
||||
2. **或使用命令行**
|
||||
```bash
|
||||
python flask_prompt_master_service.py start
|
||||
```
|
||||
|
||||
## 🛠️ 服务管理
|
||||
|
||||
### 使用图形化菜单
|
||||
|
||||
运行 `service_manager.bat`,选择相应操作:
|
||||
|
||||
- **1. 启动服务**:启动 Flask 应用服务
|
||||
- **2. 停止服务**:停止运行中的服务
|
||||
- **3. 重启服务**:重启服务(停止后启动)
|
||||
- **4. 查看状态**:查询服务运行状态
|
||||
- **5. 删除服务**:从系统中删除服务
|
||||
- **6. 退出**:退出管理菜单
|
||||
|
||||
### 使用命令行
|
||||
|
||||
```bash
|
||||
# 启动服务
|
||||
python flask_prompt_master_service.py start
|
||||
|
||||
# 停止服务
|
||||
python flask_prompt_master_service.py stop
|
||||
|
||||
# 重启服务
|
||||
python flask_prompt_master_service.py restart
|
||||
|
||||
# 查看状态
|
||||
python flask_prompt_master_service.py status
|
||||
|
||||
# 删除服务
|
||||
python flask_prompt_master_service.py remove
|
||||
```
|
||||
|
||||
## 📊 服务配置
|
||||
|
||||
### 服务信息
|
||||
|
||||
- **服务名称**:`FlaskPromptMaster`
|
||||
- **显示名称**:`Flask 提示词大师服务`
|
||||
- **描述**:`Flask 提示词大师 Web 应用服务,提供提示词生成功能`
|
||||
- **启动类型**:自动(开机启动)
|
||||
- **登录身份**:本地系统账户
|
||||
|
||||
### 端口配置
|
||||
|
||||
- **监听地址**:`0.0.0.0`(所有网络接口)
|
||||
- **端口号**:`5000`
|
||||
- **访问地址**:`http://localhost:5000`
|
||||
|
||||
## 📝 日志管理
|
||||
|
||||
### 日志位置
|
||||
|
||||
- **服务日志**:`logs/service.log`
|
||||
- **应用日志**:`logs/` 目录下的其他日志文件
|
||||
|
||||
### 日志内容
|
||||
|
||||
- 服务启动/停止事件
|
||||
- 应用运行状态
|
||||
- 错误和异常信息
|
||||
- 健康检查结果
|
||||
|
||||
## 🔧 故障排除
|
||||
|
||||
### 常见问题
|
||||
|
||||
1. **服务启动失败**
|
||||
- 检查端口 5000 是否被占用
|
||||
- 确认环境变量配置正确
|
||||
- 查看服务日志获取详细错误信息
|
||||
|
||||
2. **权限不足**
|
||||
- 确保以管理员身份运行安装脚本
|
||||
- 检查服务账户权限设置
|
||||
|
||||
3. **依赖缺失**
|
||||
- 确认所有 Python 包已安装
|
||||
- 检查虚拟环境是否正确激活
|
||||
|
||||
4. **端口冲突**
|
||||
- 修改 `flask_prompt_master_service.py` 中的端口号
|
||||
- 或停止占用端口的其他服务
|
||||
|
||||
### 调试方法
|
||||
|
||||
1. **查看服务日志**
|
||||
```bash
|
||||
type logs\service.log
|
||||
```
|
||||
|
||||
2. **手动测试服务**
|
||||
```bash
|
||||
python flask_prompt_master_service.py debug
|
||||
```
|
||||
|
||||
3. **检查服务状态**
|
||||
```bash
|
||||
sc query FlaskPromptMaster
|
||||
```
|
||||
|
||||
## 🔒 安全考虑
|
||||
|
||||
1. **权限最小化**
|
||||
- 服务以本地系统账户运行
|
||||
- 避免使用管理员权限
|
||||
|
||||
2. **网络安全**
|
||||
- 配置防火墙规则
|
||||
- 限制访问来源
|
||||
|
||||
3. **日志安全**
|
||||
- 定期清理日志文件
|
||||
- 避免记录敏感信息
|
||||
|
||||
## 📈 性能优化
|
||||
|
||||
1. **内存管理**
|
||||
- 监控服务内存使用
|
||||
- 配置适当的内存限制
|
||||
|
||||
2. **连接池**
|
||||
- 配置数据库连接池
|
||||
- 优化网络连接
|
||||
|
||||
3. **缓存策略**
|
||||
- 启用 Redis 缓存
|
||||
- 配置静态文件缓存
|
||||
|
||||
## 🔄 更新维护
|
||||
|
||||
### 服务更新
|
||||
|
||||
1. **停止服务**
|
||||
```bash
|
||||
python flask_prompt_master_service.py stop
|
||||
```
|
||||
|
||||
2. **更新代码**
|
||||
- 替换相关文件
|
||||
- 更新依赖包
|
||||
|
||||
3. **重启服务**
|
||||
```bash
|
||||
python flask_prompt_master_service.py start
|
||||
```
|
||||
|
||||
### 定期维护
|
||||
|
||||
1. **日志清理**
|
||||
- 定期清理旧日志文件
|
||||
- 监控日志文件大小
|
||||
|
||||
2. **性能监控**
|
||||
- 监控服务响应时间
|
||||
- 检查资源使用情况
|
||||
|
||||
3. **备份配置**
|
||||
- 备份服务配置文件
|
||||
- 保存环境变量设置
|
||||
|
||||
## 📞 技术支持
|
||||
|
||||
如遇到问题,请:
|
||||
|
||||
1. 查看服务日志文件
|
||||
2. 检查系统事件日志
|
||||
3. 确认环境配置正确
|
||||
4. 联系技术支持团队
|
||||
|
||||
---
|
||||
|
||||
**注意**:本服务配置仅适用于 Windows 系统,其他操作系统请参考相应的服务配置方法。
|
||||
@@ -1,205 +0,0 @@
|
||||
# Windows 生产环境部署指南
|
||||
|
||||
## 📋 概述
|
||||
|
||||
本指南介绍如何在 Windows 环境下部署 Flask 提示词大师应用的生产环境。
|
||||
|
||||
## 🎯 部署方案
|
||||
|
||||
### 方案一:Waitress 服务器(推荐)
|
||||
|
||||
Waitress 是一个纯 Python 的 WSGI 服务器,完全兼容 Windows 环境。
|
||||
|
||||
#### 1. 安装依赖
|
||||
|
||||
```bash
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
|
||||
#### 2. 启动生产环境
|
||||
|
||||
**方法一:使用 Python 脚本**
|
||||
```bash
|
||||
python run_production.py
|
||||
```
|
||||
|
||||
**方法二:使用批处理文件**
|
||||
```bash
|
||||
start_production.bat
|
||||
```
|
||||
|
||||
#### 3. 停止服务器
|
||||
|
||||
**方法一:Ctrl+C**
|
||||
在运行窗口按 `Ctrl+C` 停止服务器
|
||||
|
||||
**方法二:使用批处理文件**
|
||||
```bash
|
||||
stop_production.bat
|
||||
```
|
||||
|
||||
## ⚙️ 配置说明
|
||||
|
||||
### 环境变量配置
|
||||
|
||||
生产环境需要设置以下环境变量:
|
||||
|
||||
```bash
|
||||
# 设置生产环境
|
||||
set FLASK_ENV=production
|
||||
|
||||
# 数据库配置
|
||||
set DATABASE_URL=mysql+pymysql://root:123456@localhost:3306/pro_db?charset=utf8mb4
|
||||
|
||||
# API 配置
|
||||
set LLM_API_URL=https://api.deepseek.com/v1
|
||||
set LLM_API_KEY=your-actual-api-key
|
||||
|
||||
# 微信小程序配置
|
||||
set WX_APPID=your-wx-appid
|
||||
set WX_SECRET=your-wx-secret
|
||||
|
||||
# 安全配置
|
||||
set SECRET_KEY=your-secret-key
|
||||
```
|
||||
|
||||
### 服务器配置
|
||||
|
||||
Waitress 服务器配置(在 `run_production.py` 中):
|
||||
|
||||
```python
|
||||
serve(
|
||||
app,
|
||||
host='0.0.0.0', # 监听所有网络接口
|
||||
port=5000, # 端口号
|
||||
threads=4, # 线程数
|
||||
connection_limit=1000, # 连接限制
|
||||
cleanup_interval=30, # 清理间隔
|
||||
channel_timeout=120, # 通道超时
|
||||
max_request_body_size=1073741824, # 最大请求体大小(1GB)
|
||||
)
|
||||
```
|
||||
|
||||
## 📊 性能优化
|
||||
|
||||
### 1. 数据库优化
|
||||
|
||||
- 使用连接池
|
||||
- 配置适当的索引
|
||||
- 定期清理日志表
|
||||
|
||||
### 2. 缓存策略
|
||||
|
||||
- 启用 Redis 缓存
|
||||
- 配置模板缓存
|
||||
- 实现 API 响应缓存
|
||||
|
||||
### 3. 日志管理
|
||||
|
||||
- 配置日志轮转
|
||||
- 设置日志级别
|
||||
- 监控错误日志
|
||||
|
||||
## 🔒 安全配置
|
||||
|
||||
### 1. 网络安全
|
||||
|
||||
- 配置防火墙规则
|
||||
- 使用 HTTPS
|
||||
- 限制访问 IP
|
||||
|
||||
### 2. 应用安全
|
||||
|
||||
- 启用 CSRF 保护
|
||||
- 配置 CORS 策略
|
||||
- 输入验证和过滤
|
||||
|
||||
### 3. 数据安全
|
||||
|
||||
- 数据库访问控制
|
||||
- 敏感信息加密
|
||||
- 定期备份
|
||||
|
||||
## 📈 监控和维护
|
||||
|
||||
### 1. 健康检查
|
||||
|
||||
访问健康检查接口:
|
||||
```
|
||||
GET http://localhost:5000/health
|
||||
```
|
||||
|
||||
### 2. 日志监控
|
||||
|
||||
- 应用日志:`logs/app.log`
|
||||
- 访问日志:`logs/access.log`
|
||||
- 错误日志:`logs/error.log`
|
||||
|
||||
### 3. 性能监控
|
||||
|
||||
- CPU 使用率
|
||||
- 内存使用情况
|
||||
- 响应时间
|
||||
- 并发连接数
|
||||
|
||||
## 🚀 部署脚本
|
||||
|
||||
### 启动脚本
|
||||
|
||||
`start_production.bat` - 生产环境启动脚本
|
||||
|
||||
### 停止脚本
|
||||
|
||||
`stop_production.bat` - 生产环境停止脚本
|
||||
|
||||
### 部署脚本
|
||||
|
||||
`deploy.sh` - 自动化部署脚本(Linux 环境)
|
||||
|
||||
## 🔧 故障排除
|
||||
|
||||
### 常见问题
|
||||
|
||||
1. **端口被占用**
|
||||
```bash
|
||||
netstat -ano | findstr :5000
|
||||
taskkill /PID <进程ID> /F
|
||||
```
|
||||
|
||||
2. **数据库连接失败**
|
||||
- 检查数据库服务状态
|
||||
- 验证连接字符串
|
||||
- 确认网络连接
|
||||
|
||||
3. **API 调用失败**
|
||||
- 检查 API 密钥配置
|
||||
- 验证网络连接
|
||||
- 查看错误日志
|
||||
|
||||
### 日志分析
|
||||
|
||||
```bash
|
||||
# 查看应用日志
|
||||
type logs\app.log
|
||||
|
||||
# 查看错误日志
|
||||
type logs\error.log
|
||||
|
||||
# 实时监控日志
|
||||
Get-Content logs\app.log -Wait
|
||||
```
|
||||
|
||||
## 📞 技术支持
|
||||
|
||||
如遇到问题,请:
|
||||
|
||||
1. 查看日志文件
|
||||
2. 检查配置参数
|
||||
3. 验证环境变量
|
||||
4. 联系技术支持
|
||||
|
||||
---
|
||||
|
||||
**版本**: 1.0
|
||||
**更新日期**: 2025-08-17
|
||||
**维护者**: 开发团队
|
||||
@@ -4,21 +4,15 @@
|
||||
|
||||
### 1. 启动监控系统
|
||||
|
||||
#### 方法一:使用批处理脚本(推荐)
|
||||
```bash
|
||||
# 双击运行或在命令行执行
|
||||
start_monitor.bat
|
||||
```
|
||||
在项目根目录激活虚拟环境后执行:
|
||||
|
||||
#### 方法二:直接使用Python
|
||||
```bash
|
||||
# 激活虚拟环境
|
||||
.venv\Scripts\Activate.ps1
|
||||
|
||||
# 启动监控管理器
|
||||
python monitor_manager.py
|
||||
```
|
||||
|
||||
(应用本机启停见仓库根目录 `windows上唯一启动说明.md` 与 `windows启动.bat`。)
|
||||
|
||||
### 2. 基本操作
|
||||
|
||||
启动后,您将看到交互式界面,可以输入以下命令:
|
||||
@@ -199,7 +193,7 @@ schtasks /delete /tn "FlaskMonitor" /f
|
||||
### 2. 服务集成
|
||||
|
||||
#### 与Windows服务集成
|
||||
可以将监控脚本集成到现有的Windows服务中:
|
||||
应用安装为系统服务见仓库根目录 `windows上唯一启动说明.md`(`flask_prompt_master_service.py` / `simple_windows_service.py`)。监控可与之配合:
|
||||
|
||||
1. 修改 `simple_windows_service.py`
|
||||
2. 在服务启动时自动启动监控
|
||||
|
||||
@@ -5,8 +5,8 @@ Ran tool
|
||||
|
||||
Read file: gunicorn.conf.py
|
||||
Read file: uwsgi.ini
|
||||
Read file: run_production_simple.py
|
||||
Read file: run_production_public.py
|
||||
Read file: run_production.py
|
||||
Read file: run_dev.py
|
||||
Read file: docker-compose.prod.yml
|
||||
基于对您项目启动配置的分析,我来回答关于高并发访问支持的问题:
|
||||
|
||||
@@ -14,28 +14,30 @@ Read file: docker-compose.prod.yml
|
||||
|
||||
### 🔴 **不支持高并发** 的启动方式:
|
||||
|
||||
1. **Flask内置服务器启动** (`run_production_simple.py`, `run_production_public.py`)
|
||||
- 使用 `app.run()` 启动
|
||||
- 虽然启用了 `threaded=True`,但仍然是单进程
|
||||
- **并发能力限制**:通常只能处理几十到几百个并发连接
|
||||
- **适用场景**:开发测试、小规模部署
|
||||
1. **开发内置服务器** (`run_dev.py`)
|
||||
- 使用 Flask 开发服务器,调试与重载
|
||||
- **适用场景**:本地开发
|
||||
|
||||
2. **Windows 生产 Waitress** (`run_production.py`)
|
||||
- WSGI 多线程,适合 Windows 单机生产
|
||||
- 说明见仓库根目录 `windows上唯一启动说明.md`
|
||||
|
||||
### 🟡 **部分支持高并发** 的启动方式:
|
||||
|
||||
2. **uWSGI启动** (`uwsgi.ini`)
|
||||
3. **uWSGI启动** (`uwsgi.ini`)
|
||||
- 配置了4个进程,每个进程2个线程
|
||||
- **并发能力**:理论上可处理 4×2×1000 = 8000 个并发连接
|
||||
- **限制**:进程数固定,无法动态扩展
|
||||
|
||||
### <EFBFBD><EFBFBD> **支持高并发** 的启动方式:
|
||||
### 🟢 **支持高并发** 的启动方式:
|
||||
|
||||
3. **Gunicorn启动** (`gunicorn.conf.py`)
|
||||
4. **Gunicorn启动** (`gunicorn.conf.py`)
|
||||
- 工作进程数:`multiprocessing.cpu_count() * 2 + 1`
|
||||
- 每个工作进程连接数:1000
|
||||
- **并发能力**:在8核服务器上可处理约 17×1000 = 17000 个并发连接
|
||||
- **优势**:进程数根据CPU核心数自动调整
|
||||
|
||||
4. **Docker容器化部署** (`docker-compose.prod.yml`)
|
||||
5. **Docker容器化部署** (`docker-compose.prod.yml`)
|
||||
- 包含Nginx反向代理
|
||||
- 支持水平扩展(可启动多个app容器)
|
||||
- **并发能力**:理论上无上限,取决于服务器资源
|
||||
|
||||
@@ -1,52 +0,0 @@
|
||||
@echo off
|
||||
chcp 65001 >nul
|
||||
echo ============================================================
|
||||
echo 🚀 Flask 提示词大师 - Windows 服务安装脚本
|
||||
echo ============================================================
|
||||
echo.
|
||||
|
||||
REM 检查管理员权限
|
||||
net session >nul 2>&1
|
||||
if %errorLevel% == 0 (
|
||||
echo ✅ 管理员权限检查通过
|
||||
) else (
|
||||
echo ❌ 需要管理员权限才能安装服务
|
||||
echo 💡 请右键点击此脚本,选择"以管理员身份运行"
|
||||
pause
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
REM 激活虚拟环境
|
||||
call .venv\Scripts\Activate.bat
|
||||
|
||||
REM 设置环境变量
|
||||
set FLASK_ENV=production
|
||||
set PYTHONPATH=%cd%
|
||||
|
||||
echo 📊 环境变量设置完成
|
||||
echo 🌐 正在安装 Windows 服务...
|
||||
|
||||
REM 安装服务
|
||||
python flask_prompt_master_service.py install
|
||||
|
||||
if %errorLevel% == 0 (
|
||||
echo ✅ 服务安装成功!
|
||||
echo.
|
||||
echo 📋 服务信息:
|
||||
echo 服务名称: FlaskPromptMaster
|
||||
echo 显示名称: Flask 提示词大师服务
|
||||
echo 描述: Flask 提示词大师 Web 应用服务
|
||||
echo.
|
||||
echo 🎯 下一步操作:
|
||||
echo 1. 启动服务: python flask_prompt_master_service.py start
|
||||
echo 2. 停止服务: python flask_prompt_master_service.py stop
|
||||
echo 3. 重启服务: python flask_prompt_master_service.py restart
|
||||
echo 4. 删除服务: python flask_prompt_master_service.py remove
|
||||
echo.
|
||||
echo 💡 服务安装后会自动开机启动
|
||||
) else (
|
||||
echo ❌ 服务安装失败!
|
||||
echo 💡 请检查错误信息并重试
|
||||
)
|
||||
|
||||
pause
|
||||
@@ -1,51 +0,0 @@
|
||||
@echo off
|
||||
chcp 65001 >nul
|
||||
echo ============================================================
|
||||
echo 🚀 Flask 提示词大师 - 开机启动安装脚本
|
||||
echo ============================================================
|
||||
echo.
|
||||
|
||||
REM 检查管理员权限
|
||||
net session >nul 2>&1
|
||||
if %errorLevel% == 0 (
|
||||
echo ✅ 管理员权限检查通过
|
||||
) else (
|
||||
echo ❌ 需要管理员权限才能安装开机启动任务
|
||||
echo 💡 请右键点击此脚本,选择"以管理员身份运行"
|
||||
pause
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
REM 激活虚拟环境
|
||||
call .venv\Scripts\Activate.bat
|
||||
|
||||
REM 设置环境变量
|
||||
set FLASK_ENV=production
|
||||
set PYTHONPATH=%cd%
|
||||
|
||||
echo 📊 环境变量设置完成
|
||||
echo 🌐 正在安装开机启动任务...
|
||||
|
||||
REM 安装开机启动任务
|
||||
python simple_windows_service.py install
|
||||
|
||||
if %errorLevel% == 0 (
|
||||
echo ✅ 开机启动任务安装成功!
|
||||
echo.
|
||||
echo 📋 任务信息:
|
||||
echo 任务名称: FlaskPromptMasterStartup
|
||||
echo 触发条件: 系统启动时
|
||||
echo 运行账户: SYSTEM
|
||||
echo.
|
||||
echo 🎯 下一步操作:
|
||||
echo 1. 启动服务: python simple_windows_service.py start
|
||||
echo 2. 删除任务: python simple_windows_service.py remove
|
||||
echo 3. 查看状态: schtasks /query /tn "FlaskPromptMasterStartup"
|
||||
echo.
|
||||
echo 💡 系统重启后会自动启动服务
|
||||
) else (
|
||||
echo ❌ 开机启动任务安装失败!
|
||||
echo 💡 请检查错误信息并重试
|
||||
)
|
||||
|
||||
pause
|
||||
36
run_production.py
Normal file
36
run_production.py
Normal file
@@ -0,0 +1,36 @@
|
||||
#!/usr/bin/env python3
|
||||
"""生产环境启动:Waitress WSGI(Windows 友好)。说明见仓库根目录 windows上唯一启动说明.md。"""
|
||||
import os
|
||||
import sys
|
||||
|
||||
from waitress import serve
|
||||
|
||||
from src.flask_prompt_master import create_app
|
||||
|
||||
|
||||
def main() -> None:
|
||||
os.environ.setdefault("FLASK_ENV", "production")
|
||||
app = create_app()
|
||||
port = int(os.environ.get("PORT", "5000"))
|
||||
print("=" * 60)
|
||||
print("Flask 提示词大师 - 生产环境 (Waitress)")
|
||||
print("=" * 60)
|
||||
print(f"监听: 0.0.0.0:{port} 按 Ctrl+C 停止")
|
||||
print("=" * 60)
|
||||
serve(
|
||||
app,
|
||||
host="0.0.0.0",
|
||||
port=port,
|
||||
threads=4,
|
||||
connection_limit=1000,
|
||||
cleanup_interval=30,
|
||||
channel_timeout=120,
|
||||
max_request_body_size=1073741824,
|
||||
)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
try:
|
||||
main()
|
||||
except KeyboardInterrupt:
|
||||
sys.exit(0)
|
||||
@@ -1,53 +0,0 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
生产环境启动脚本 - 支持外网访问
|
||||
使用 Flask 内置服务器,配置为生产模式
|
||||
"""
|
||||
|
||||
import os
|
||||
import sys
|
||||
from src.flask_prompt_master import create_app
|
||||
|
||||
def main():
|
||||
"""主函数"""
|
||||
# 设置生产环境变量
|
||||
os.environ['FLASK_ENV'] = 'production'
|
||||
|
||||
# 创建应用实例
|
||||
app = create_app()
|
||||
|
||||
# 获取端口号(支持环境变量配置)
|
||||
port = int(os.environ.get('PORT', 5002))
|
||||
|
||||
print("=" * 60)
|
||||
print("🚀 Flask 提示词大师 - 生产环境启动(外网访问)")
|
||||
print("=" * 60)
|
||||
print(f"📊 环境: {os.environ.get('FLASK_ENV', 'unknown')}")
|
||||
print(f"🌐 服务器: Flask 内置服务器")
|
||||
print(f"🔗 内网地址: http://10.0.4.13:5002")
|
||||
print(f"🌍 外网地址: http://101.43.95.130:5002")
|
||||
print(f"📝 日志: 控制台输出")
|
||||
print("=" * 60)
|
||||
print("✅ 服务器启动中...")
|
||||
print("💡 按 Ctrl+C 停止服务器")
|
||||
print("=" * 60)
|
||||
|
||||
try:
|
||||
# 启动 Flask 内置服务器(生产模式配置)
|
||||
app.run(
|
||||
host='0.0.0.0', # 监听所有网络接口
|
||||
port=port,
|
||||
debug=False, # 生产环境关闭调试
|
||||
threaded=True, # 启用多线程
|
||||
use_reloader=False # 关闭自动重载
|
||||
)
|
||||
except KeyboardInterrupt:
|
||||
print("\n" + "=" * 60)
|
||||
print("🛑 服务器已停止")
|
||||
print("=" * 60)
|
||||
except Exception as e:
|
||||
print(f"\n❌ 启动失败: {str(e)}")
|
||||
sys.exit(1)
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
@@ -1,50 +0,0 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
简单的生产环境启动脚本
|
||||
使用 Flask 内置服务器,但配置为生产模式
|
||||
适合 Windows 环境快速部署
|
||||
"""
|
||||
|
||||
import os
|
||||
import sys
|
||||
from src.flask_prompt_master import create_app
|
||||
|
||||
def main():
|
||||
"""主函数"""
|
||||
# 设置生产环境变量
|
||||
os.environ['FLASK_ENV'] = 'production'
|
||||
|
||||
# 创建应用实例
|
||||
app = create_app()
|
||||
|
||||
print("=" * 60)
|
||||
print("🚀 Flask 提示词大师 - 生产环境启动")
|
||||
print("=" * 60)
|
||||
print(f"📊 环境: {os.environ.get('FLASK_ENV', 'unknown')}")
|
||||
print(f"🌐 服务器: Flask 内置服务器")
|
||||
print(f"🔗 地址: http://0.0.0.0:5002")
|
||||
print(f"📝 日志: 控制台输出")
|
||||
print("=" * 60)
|
||||
print("✅ 服务器启动中...")
|
||||
print("💡 按 Ctrl+C 停止服务器")
|
||||
print("=" * 60)
|
||||
|
||||
try:
|
||||
# 启动 Flask 内置服务器(生产模式配置)
|
||||
app.run(
|
||||
host='0.0.0.0',
|
||||
port=5002, # 修改端口为5002
|
||||
debug=False, # 生产环境关闭调试
|
||||
threaded=True, # 启用多线程
|
||||
use_reloader=False # 关闭自动重载
|
||||
)
|
||||
except KeyboardInterrupt:
|
||||
print("\n" + "=" * 60)
|
||||
print("🛑 服务器已停止")
|
||||
print("=" * 60)
|
||||
except Exception as e:
|
||||
print(f"\n❌ 启动失败: {str(e)}")
|
||||
sys.exit(1)
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
@@ -1,108 +0,0 @@
|
||||
@echo off
|
||||
chcp 65001 >nul
|
||||
echo ============================================================
|
||||
echo 🚀 Flask 提示词大师 - Windows 服务管理脚本
|
||||
echo ============================================================
|
||||
echo.
|
||||
|
||||
REM 激活虚拟环境
|
||||
call .venv\Scripts\Activate.bat
|
||||
|
||||
REM 设置环境变量
|
||||
set FLASK_ENV=production
|
||||
set PYTHONPATH=%cd%
|
||||
|
||||
echo 📊 环境变量设置完成
|
||||
echo.
|
||||
|
||||
:menu
|
||||
echo 请选择操作:
|
||||
echo 1. 启动服务
|
||||
echo 2. 停止服务
|
||||
echo 3. 重启服务
|
||||
echo 4. 查看服务状态
|
||||
echo 5. 删除服务
|
||||
echo 6. 退出
|
||||
echo.
|
||||
set /p choice=请输入选项 (1-6):
|
||||
|
||||
if "%choice%"=="1" goto start_service
|
||||
if "%choice%"=="2" goto stop_service
|
||||
if "%choice%"=="3" goto restart_service
|
||||
if "%choice%"=="4" goto status_service
|
||||
if "%choice%"=="5" goto remove_service
|
||||
if "%choice%"=="6" goto exit
|
||||
echo ❌ 无效选项,请重新选择
|
||||
goto menu
|
||||
|
||||
:start_service
|
||||
echo.
|
||||
echo 🚀 正在启动服务...
|
||||
python flask_prompt_master_service.py start
|
||||
if %errorLevel% == 0 (
|
||||
echo ✅ 服务启动成功!
|
||||
echo 💡 访问地址: http://localhost:5000
|
||||
) else (
|
||||
echo ❌ 服务启动失败!
|
||||
)
|
||||
echo.
|
||||
pause
|
||||
goto menu
|
||||
|
||||
:stop_service
|
||||
echo.
|
||||
echo 🛑 正在停止服务...
|
||||
python flask_prompt_master_service.py stop
|
||||
if %errorLevel% == 0 (
|
||||
echo ✅ 服务停止成功!
|
||||
) else (
|
||||
echo ❌ 服务停止失败!
|
||||
)
|
||||
echo.
|
||||
pause
|
||||
goto menu
|
||||
|
||||
:restart_service
|
||||
echo.
|
||||
echo 🔄 正在重启服务...
|
||||
python flask_prompt_master_service.py restart
|
||||
if %errorLevel% == 0 (
|
||||
echo ✅ 服务重启成功!
|
||||
echo 💡 访问地址: http://localhost:5000
|
||||
) else (
|
||||
echo ❌ 服务重启失败!
|
||||
)
|
||||
echo.
|
||||
pause
|
||||
goto menu
|
||||
|
||||
:status_service
|
||||
echo.
|
||||
echo 📊 正在查询服务状态...
|
||||
python flask_prompt_master_service.py status
|
||||
echo.
|
||||
pause
|
||||
goto menu
|
||||
|
||||
:remove_service
|
||||
echo.
|
||||
echo ⚠️ 警告:此操作将删除服务!
|
||||
set /p confirm=确认删除服务?(y/N):
|
||||
if /i "%confirm%"=="y" (
|
||||
echo 🗑️ 正在删除服务...
|
||||
python flask_prompt_master_service.py remove
|
||||
if %errorLevel% == 0 (
|
||||
echo ✅ 服务删除成功!
|
||||
) else (
|
||||
echo ❌ 服务删除失败!
|
||||
)
|
||||
) else (
|
||||
echo ❌ 操作已取消
|
||||
)
|
||||
echo.
|
||||
pause
|
||||
goto menu
|
||||
|
||||
:exit
|
||||
echo 👋 再见!
|
||||
exit /b 0
|
||||
@@ -1,70 +0,0 @@
|
||||
@echo off
|
||||
chcp 65001 >nul
|
||||
echo ============================================================
|
||||
echo 🚀 Flask 提示词大师 - 简化服务管理脚本
|
||||
echo ============================================================
|
||||
echo.
|
||||
|
||||
REM 激活虚拟环境
|
||||
call .venv\Scripts\Activate.bat
|
||||
|
||||
REM 设置环境变量
|
||||
set FLASK_ENV=production
|
||||
set PYTHONPATH=%cd%
|
||||
|
||||
echo 📊 环境变量设置完成
|
||||
echo.
|
||||
|
||||
:menu
|
||||
echo 请选择操作:
|
||||
echo 1. 启动服务
|
||||
echo 2. 安装开机启动
|
||||
echo 3. 删除开机启动
|
||||
echo 4. 查看任务状态
|
||||
echo 5. 退出
|
||||
echo.
|
||||
set /p choice=请输入选项 (1-5):
|
||||
|
||||
if "%choice%"=="1" goto start_service
|
||||
if "%choice%"=="2" goto install_startup
|
||||
if "%choice%"=="3" goto remove_startup
|
||||
if "%choice%"=="4" goto check_status
|
||||
if "%choice%"=="5" goto exit
|
||||
echo ❌ 无效选项,请重新选择
|
||||
goto menu
|
||||
|
||||
:start_service
|
||||
echo.
|
||||
echo 🚀 正在启动服务...
|
||||
python simple_windows_service.py start
|
||||
echo.
|
||||
pause
|
||||
goto menu
|
||||
|
||||
:install_startup
|
||||
echo.
|
||||
echo 📋 正在安装开机启动任务...
|
||||
python simple_windows_service.py install
|
||||
echo.
|
||||
pause
|
||||
goto menu
|
||||
|
||||
:remove_startup
|
||||
echo.
|
||||
echo 🗑️ 正在删除开机启动任务...
|
||||
python simple_windows_service.py remove
|
||||
echo.
|
||||
pause
|
||||
goto menu
|
||||
|
||||
:check_status
|
||||
echo.
|
||||
echo 📊 正在查询任务状态...
|
||||
schtasks /query /tn "FlaskPromptMasterStartup" /fo table
|
||||
echo.
|
||||
pause
|
||||
goto menu
|
||||
|
||||
:exit
|
||||
echo 👋 再见!
|
||||
exit /b 0
|
||||
@@ -1,35 +0,0 @@
|
||||
@echo off
|
||||
chcp 65001 >nul
|
||||
echo ============================================================
|
||||
echo 🚀 Flask 提示词大师 - 监控系统启动脚本
|
||||
echo ============================================================
|
||||
echo.
|
||||
|
||||
REM 检查虚拟环境
|
||||
if not exist ".venv\Scripts\Activate.ps1" (
|
||||
echo ❌ 虚拟环境不存在,请先创建虚拟环境
|
||||
pause
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
REM 激活虚拟环境并启动监控
|
||||
echo 🔧 激活虚拟环境...
|
||||
call .venv\Scripts\Activate.ps1
|
||||
|
||||
echo.
|
||||
echo 🎮 启动监控管理器...
|
||||
echo 可用命令:
|
||||
echo start - 启动监控
|
||||
echo stop - 停止监控
|
||||
echo status - 检查服务状态
|
||||
echo logs - 管理日志
|
||||
echo report - 生成报告
|
||||
echo dashboard - 显示仪表板
|
||||
echo quit - 退出
|
||||
echo.
|
||||
|
||||
python monitor_manager.py
|
||||
|
||||
echo.
|
||||
echo 👋 监控系统已退出
|
||||
pause
|
||||
@@ -1,19 +0,0 @@
|
||||
@echo off
|
||||
chcp 65001 >nul
|
||||
echo ============================================================
|
||||
echo 🚀 Flask 提示词大师 - 生产环境启动脚本
|
||||
echo ============================================================
|
||||
echo.
|
||||
|
||||
REM 设置环境变量
|
||||
set FLASK_ENV=production
|
||||
set PYTHONPATH=%cd%
|
||||
|
||||
echo 📊 环境变量设置完成
|
||||
echo 🌐 启动生产环境服务器...
|
||||
echo.
|
||||
|
||||
REM 启动生产环境服务器
|
||||
python run_production.py
|
||||
|
||||
pause
|
||||
@@ -1,22 +0,0 @@
|
||||
@echo off
|
||||
chcp 65001 >nul
|
||||
echo ============================================================
|
||||
echo 🚀 Flask 提示词大师 - 简单生产环境启动脚本
|
||||
echo ============================================================
|
||||
echo.
|
||||
|
||||
REM 激活虚拟环境
|
||||
call .venv\Scripts\Activate.bat
|
||||
|
||||
REM 设置环境变量
|
||||
set FLASK_ENV=production
|
||||
set PYTHONPATH=%cd%
|
||||
|
||||
echo 📊 环境变量设置完成
|
||||
echo 🌐 启动生产环境服务器...
|
||||
echo.
|
||||
|
||||
REM 启动生产环境服务器
|
||||
python run_production_simple.py
|
||||
|
||||
pause
|
||||
@@ -1,18 +0,0 @@
|
||||
@echo off
|
||||
chcp 65001 >nul
|
||||
echo ============================================================
|
||||
echo 🛑 Flask 提示词大师 - 生产环境停止脚本
|
||||
echo ============================================================
|
||||
echo.
|
||||
|
||||
echo 🔍 查找并停止 Python 进程...
|
||||
echo.
|
||||
|
||||
REM 查找并停止 Python 进程
|
||||
tasklist /FI "IMAGENAME eq python.exe" /FO TABLE
|
||||
echo.
|
||||
echo ⚠️ 请手动关闭相关 Python 进程
|
||||
echo 💡 或者按 Ctrl+C 停止服务器
|
||||
echo.
|
||||
|
||||
pause
|
||||
Reference in New Issue
Block a user