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:
renjianbo
2026-05-03 08:55:43 +08:00
parent 5dad35de82
commit ba73f8395a
22 changed files with 1031 additions and 1213 deletions

View 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
View 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

View 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 代码库静态分析*

View File

@@ -16,6 +16,9 @@ FLASK_ENV=development
# 调试模式(开发环境开启,生产环境关闭)
DEBUG=True
# HTTP 端口(可选;仅 Waitress 生产 run_production.py 读取;开发 run_dev.py 固定 5002
# PORT=5000
# ========================================
# 数据库配置
# ========================================

View File

@@ -17,7 +17,7 @@
#### 使用说明
1. xxxx
1. Windows见 [windows上唯一启动说明.md](windows上唯一启动说明.md),根目录双击 `windows启动.bat`
2. xxxx
3. xxxx

View File

@@ -80,7 +80,7 @@ python init_db.py
python run_dev.py
```
访问 http://localhost:5000 开始使用
访问 http://localhost:5002 开始使用。仅 Windows 本机启停见仓库根目录 `windows上唯一启动说明.md``windows启动.bat`
## 项目结构

View File

@@ -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 服务配置已完成,应用现在可以作为系统服务运行,支持开机自启动和后台运行。所有核心功能都已实现并测试通过。🎉

View File

@@ -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 系统,其他操作系统请参考相应的服务配置方法。

View File

@@ -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
**维护者**: 开发团队

View File

@@ -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. 在服务启动时自动启动监控

View File

@@ -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容器
- **并发能力**:理论上无上限,取决于服务器资源

View File

@@ -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

View File

@@ -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
View File

@@ -0,0 +1,36 @@
#!/usr/bin/env python3
"""生产环境启动Waitress WSGIWindows 友好)。说明见仓库根目录 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)

View File

@@ -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()

View File

@@ -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()

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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