Files
Pro_llm_correct/README.md
2025-10-25 01:38:17 +08:00

107 lines
5.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# AI 作文批改助手 ✨
> 上传手写英文作文 → 自动识别文本 → 按高考标准打分 → 输出详尽反馈报告,全流程在本地浏览器完成。
![Web UI 批改页面](photo/1.png)
![Web UI 设置页面](photo/2.png)
![Web UI 关于页面](photo/3.png)
## 全面重构亮点
- **现代化 Web UI**:基于 Flask 构建的单页应用,所有功能集中在浏览器端完成,配置与状态实时同步。
- **任务可追溯**:每次批改都会创建独立 run id原图、Markdown、HTML 报告集中存放,便于回看和分享。
- **并发调度升级**:多线程线程池 + 独立任务状态机,批量图片互不阻塞,失败文件单独记录。
- **Prompt / 评分可插拔**:默认内置高考英语评分模板,可在 UI 动态替换;书写敏感度、模型温度均可调整。
- **安全与透明**API Key 以设备指纹派生的密钥加密存储支持一键清除Token 用量实时累积并在 UI 展示。
- **自动更新提示**:后台检查 GitHub Releases 获取最新版本信息,可一键触发或关闭。
## 工作原理概览
1. **图片接入**:兼容摄像头拍照、扫描件或批量上传,自动清洗文件名防止覆盖。
2. **VLM 解析**:将图片转为 base64通过兼容 OpenAI 的视觉模型 OCR + 计算书写分。
3. **LLM 批改**:根据作文题目、识别文本、书写分构建 Prompt生成结构化中文反馈。
4. **报告生成**:按配置保存 Markdown并可渲染为带主题的 HTML 文件输出。
5. **状态同步**Web UI 实时播报进度、日志、Token 消耗。
## 快速开始
### 环境准备
- Python 3.9 及以上
- macOS / Windows / Linux 均可
- 任意兼容 OpenAI API 协议的 VLM/LLM 服务OpenAI、Azure OpenAI、通义、DeepSeek 等)
### 安装依赖
```bash
git clone https://github.com/Eric-Terminal/Pro_llm_correct.git
cd Pro_llm_correct
python3 -m venv venv
source venv/bin/activate # Windows 使用 venv\Scripts\activate
pip install -r requirements.txt
```
### 启动 Web 版
```bash
python3 main.py
```
- 应用将尝试从 45674667 中选择空闲端口,并自动打开默认浏览器。
- 首次运行会生成 `config.json``output_reports/` 等目录。
## 使用流程
1. 在「批改作文」页填入题目或场景说明。
2. 上传一张或多张作文图片并提交。
3. 查看实时处理状态:成功会显示 Markdown / HTML 下载链接,失败会给出详细错误。
4. 结果保存在 `output_reports/<run_id>/`run id 由时间戳生成,保证唯一。
```
output_reports/
└── <run_id>/ # 例如 20240101-120000
├── essay-1.png # 原始上传文件
├── essay-1_report.md # Markdown 报告(若启用 SaveMarkdown
└── essay-1_report.html # HTML 报告(若启用 RenderMarkdown
```
- `OutputDirectory` 可改为绝对路径以迁移到 NAS / 外部硬盘。
- 若只启用 HTML程序会在渲染完成后自动删除对应 Markdown 文件。
## 关键配置参考
| 分类 | 键名 | 说明 |
| --- | --- | --- |
| 服务连接 | `VlmUrl` / `VlmModel` / `VlmApiKey`<br>`LlmUrl` / `LlmModel` / `LlmApiKey` | 与 OpenAI SDK 参数保持一致;密钥输入后即被本地加密,输入框留空表示沿用已有值。 |
| 性能与容错 | `MaxWorkers` / `MaxRetries` / `RetryDelay` / `RequestTimeout` | 控制并发线程数、失败重试次数与间隔、单次请求超时(秒)。 |
| 评分策略 | `SensitivityFactor` | 对 VLM 输出的书写分进行幂次强化/弱化(默认 1.0)。 |
| | `VlmTemperature` / `LlmTemperature` | 约束模型随机性,范围 02。 |
| Prompt 定制 | `LlmPromptTemplate` | 使用 Python `str.format` 语法,支持 `{topic}``{wscore}``{essay_text}` 占位符,留空回退到内置模板。 |
| 输出控制 | `OutputDirectory` / `SaveMarkdown` / `RenderMarkdown` | 自定义输出目录及报告格式,布尔选项可在 UI 勾选。 |
| 版本与统计 | `AutoUpdateCheck` / `UsageVlmInput` 等 | 自动更新开关及历史 Token 统计,展示于 UI「关于」面板。 |
配置文件位于仓库根目录 `config.json`,敏感字段均以设备指纹派生密钥加密存储,迁移到新设备后需重新输入 API Key。
## Web API用于自动化集成
- `GET /api/config`读取当前配置、版本信息、Token 统计。
- `POST /api/config`:提交 JSON 更新配置;支持 `ClearVlmApiKey` / `ClearLlmApiKey` 清除敏感字段。
- `POST /api/process`multipart/form-data包含 `topic``files[]`,返回 run id。
- `GET /api/run-status/<run_id>`轮询任务状态、日志、Token 用量以及生成的文件路径。
- `GET /outputs/<path>`:访问生成的原图或批改报告。
## 日志与故障排查
- 控制台会输出端口探测、API 请求摘要和异常信息。
- Web UI结果卡片实时显示每个文件的日志及错误信息。
- 常见问题排查:
- **配置缺失**:缺少必填项时,后端会在任务开始前返回具体提示。
- **网络或权限错误**请确认模型名称、Key 是否正确,服务是否支持图像输入,并适当调整 `RequestTimeout` / `RetryDelay`
## 开发者指南
- 核心依赖FlaskWeb 服务、cryptography配置加密、openai SDK兼容多家服务、markdown报告渲染
- 调试技巧:
```bash
python3 web_app.py # 直接运行 Flask 应用
python3 main.py # 启动正式入口,包含日志与端口选择
```
- 如需打包为单文件可执行程序:
```bash
pyinstaller --noconsole --onefile main.py
```
生成的可执行文件位于 `dist/`。
## 贡献与许可
- 欢迎通过 Issue / Pull Request 分享想法与改进。
- 如果这个项目对你有帮助,别忘了点个 ⭐️。
- 本项目遵循 [MIT License](LICENSE)。