File size: 3,777 Bytes
f2eca4e
439856f
 
f2eca4e
 
 
 
 
 
 
 
 
2693f1d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ed25084
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
df2999f
ed25084
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
df2999f
ed25084
2693f1d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
---
title: Character Based AI Paper tutor
emoji: 😈
colorFrom: indigo
colorTo: blue
sdk: gradio
sdk_version: "6.6.0"
python_version: "3.10"
app_file: app.py
pinned: false
---

# GenAI PDF Paper Tutor

一个基于 Gradio 的论文阅读小工具:

- 上传 PDF 论文
- 生成中文讲解(角色风格化)
- 支持讲解 TTS(手动点击)
- 进入 Exam 页面后生成 MCQ(选择题)
- 支持多角色(从 `characters/` 目录自动读取)

## 功能流程

1. 在讲解页选择角色
2. 上传 PDF,点击 `Generate`
3. 查看讲解内容(可点击 `Play Lecture Audio`4. 点击 `Exam` 进入考试页
5. 在考试页重新选择角色
6. 点击底部 `Generate` 生成 MCQ
7. 开始答题(答错会显示解析,并可播放解析语音)

## 运行环境

- Python 3.10+
- 已安装依赖(见 `requirements.txt`)

安装依赖:

```bash
pip install -r requirements.txt
```

运行:

```bash
python app.py
```

## API 配置(DashScope / OpenAI-compatible)

项目会从 `.env` 读取 API 配置(已兼容 `API_UR``API_URL`):

```env
API_UR="https://dashscope.aliyuncs.com/compatible-mode/v1"
API_KEY="你的Key"
```

说明:

- 讲解/MCQ 使用 OpenAI-compatible `/chat/completions`
- TTS 优先尝试 `/audio/speech`,失败后回退 DashScope TTS 接口

## 使用同 Organization 的 HF Audio Space 做 TTS

你的 `audio` 项目已经暴露 API:`/tts_chunk(text, voice, language)`### 1. 部署 `/Users/lexi/workplace/audio` 到 HF Space

先在 Hugging Face 里创建组织下的 Space(例如 `your-org/audio`),然后推送代码:

```bash
cd /Users/lexi/workplace/audio
git remote add hf https://huggingface.co/spaces/your-org/audio
git push hf main
```

如果该 Space 是私有仓库,请在 HF 里创建一个可访问该组织 Space 的 token(read 权限即可调用)。

### 2. 在 `/Users/lexi/workplace/genai/.env` 配置调用

```env
# 讲解/MCQ 仍走 DashScope/OpenAI-compatible
API_UR="https://dashscope.aliyuncs.com/compatible-mode/v1"
API_KEY="你的Key"
USE_MOCK_MODELS=0
USE_MOCK_TTS=0

# TTS 走 HF Space(优先)
HF_TTS_SPACE_ID="your-org/audio"
# 如果是私有 Space,填 token;公开 Space 可不填
HF_TOKEN="hf_xxx"
HF_TTS_API_NAME="/tts_chunk"
HF_TTS_VOICE="male"      # male 或 female
HF_TTS_LANGUAGE="Chinese"
# 1=HF失败时回退到原有TTS;0=只用HF,失败就报错
HF_TTS_ALLOW_FALLBACK=1
```

可选:

- 如果你更希望用完整 URL,可以改为 `HF_TTS_SPACE_URL="https://your-org-audio.hf.space"`- 如果不想回退到原 TTS 接口,设置 `HF_TTS_ALLOW_FALLBACK=0`- 如果只想 mock 文本/题目,但 TTS 用真实接口:`USE_MOCK_MODELS=1``USE_MOCK_TTS=0`## 角色目录结构(自动发现)

下拉/角色按钮会自动读取 `characters/` 下的所有子目录。

示例:

```text
characters/
  snape/
    meta.json
    avatar.jpg
    lecture_prompt.txt
    mcq_prompt.txt
    mcq_retry_prompt.txt
```

`meta.json` 常用字段:

- `id`
- `display_name`
- `tagline`
- `byline`
- `chat_label`
- `chat_mode`
- `avatar`
- `lecture_prompt_file`
- `mcq_prompt_file`
- `mcq_retry_prompt_file`

如果某个角色目录没有 `meta.json`,系统也会显示该目录(用目录名作为角色名,并使用默认 prompt)。

## 常见问题

### 1. 生成很慢

这是正常现象(PDF 渲染 + VL 推理耗时较高)。可尝试:

- 减少页数:`QWEN_VL_MAX_PAGES=1``2`
- 降低渲染尺度:`QWEN_VL_RENDER_SCALE=1.0`

### 2. PDF 无法提取文本

请确认已安装 `pypdf````bash
pip install pypdf
```

### 3. MCQ 生成失败 / JSON 错误

模型可能返回不完整 JSON,代码里已做重试与解析兜底;如果仍失败可重试一次或更换角色 prompt。