135 lines
3.0 KiB
Markdown
135 lines
3.0 KiB
Markdown
# phomework - 作业模板系统
|
||
|
||
使用 Typst 和 AI 辅助生成作业的自动化工具。
|
||
|
||
## 目录结构
|
||
|
||
```
|
||
├── data/ # 作业数据(图片、题目、答案)
|
||
├── templates/ # Typst 模板文件
|
||
├── scripts/ # Python 脚本
|
||
│ ├── img2typ.py # 图片转 typst 格式
|
||
│ ├── fix_typ.py # 修复 typst 语法
|
||
│ ├── solve.py # AI 答题
|
||
│ ├── gen_index.py # 生成 index.typ
|
||
│ └── common.py # 共用模块
|
||
├── index.typ # 生成的作业文件
|
||
└── index.pdf # 编译后的 PDF
|
||
```
|
||
|
||
## 工作流程
|
||
|
||
1. **图片转题目** (`just img2typ`)
|
||
- 扫描 `data/` 中的图片
|
||
- 使用 AI 将图片内容转换为 typst 格式
|
||
- 生成 `questions.json` 题目列表
|
||
|
||
2. **AI 答题** (`just solve`)
|
||
- 读取 `questions.json`
|
||
- 调用 AI 生成答案
|
||
- 输出 `data/A_*.md` 答案文件
|
||
|
||
3. **生成作业** (`just generate`)
|
||
- 读取题目和答案
|
||
- 生成 `index.typ`
|
||
- 可编译为 PDF
|
||
|
||
## 快速开始
|
||
|
||
### 1. 准备数据
|
||
|
||
将作业图片放入 `data/` 目录,文件名格式:
|
||
- `P15.png` - P15 题目
|
||
- `R7.png` - R7 题目
|
||
- `P40_img1.png` - P40 的附件
|
||
|
||
### 2. 配置
|
||
|
||
API 配置从以下位置按优先级读取:
|
||
1. `scripts/.env` (本地)
|
||
2. `~/.config/phomework/.env` (全局)
|
||
|
||
**方式一:全局配置(推荐)**
|
||
```bash
|
||
mkdir -p ~/.config/phomework
|
||
cp scripts/.env.example ~/.config/phomework/.env
|
||
# 编辑 ~/.config/phomework/.env
|
||
```
|
||
|
||
**方式二:本地配置**
|
||
```bash
|
||
cp scripts/.env.example scripts/.env
|
||
# 编辑 scripts/.env
|
||
```
|
||
|
||
`.env` 文件内容:
|
||
```bash
|
||
# API 端点(OpenAI 兼容)
|
||
IMG2TYP_API_ENDPOINT=https://api.openai.com/v1/chat/completions
|
||
|
||
# API 密钥
|
||
IMG2TYP_API_KEY=your-api-key-here
|
||
|
||
# 模型名称(默认 qwen-vl-plus)
|
||
IMG2TYP_MODEL=qwen-vl-plus
|
||
```
|
||
|
||
### 3. 运行
|
||
|
||
```bash
|
||
just img2typ # 图片转题目
|
||
just solve # AI 答题
|
||
just generate # 生成 index.typ
|
||
typst compile index.typ index.pdf
|
||
```
|
||
|
||
如需修复 .typ 文件语法(可选):
|
||
```bash
|
||
just fix
|
||
```
|
||
|
||
## 命令行参数
|
||
|
||
### fix_typ.py
|
||
```bash
|
||
-f, --file # 指定单个 .typ 文件
|
||
--dry-run # 干跑,不调用 AI 或写入文件
|
||
--verbose # 调试日志
|
||
-n N # 并发数(默认 3)
|
||
```
|
||
|
||
### img2typ.py
|
||
```bash
|
||
-f, --file # 指定单个图片文件
|
||
--dry-run # 干跑,不调用 AI 或写入文件
|
||
--verbose # 调试日志
|
||
--retry N # 重试次数(默认 3)
|
||
-n N # 并发数(默认 3)
|
||
```
|
||
|
||
### solve.py
|
||
```bash
|
||
-q, --question # 指定题目 ID
|
||
--dry-run # 干跑
|
||
--verbose # 调试日志
|
||
--retry N # 重试次数(默认 3)
|
||
-n N # 并发数(默认 3)
|
||
```
|
||
|
||
### gen_index.py
|
||
```bash
|
||
--dry-run # 预览生成内容
|
||
--force # 强制覆盖 index.typ
|
||
```
|
||
|
||
## 开发
|
||
|
||
```bash
|
||
# 安装依赖
|
||
pip install requests python-dotenv rich aiohttp
|
||
|
||
# 代码检查
|
||
ruff check scripts/
|
||
ruff format scripts/
|
||
```
|