Files
homework-template/PRD_SCRIPT.md
2026-04-08 13:55:17 +08:00

67 lines
3.1 KiB
Markdown
Raw 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.

请在 `./scripts/` 文件夹下写一个 `img2typ.py` 脚本,达成下面的要求。
## 流程
遍历当前所在目录下的文件(不深入到子目录)。
找到所有的 `\S\s?[\d\.]+` 的文件名的图片。且最开头的 `\S` 不能是 `答` 或者 `A` 或者 `a`
- 这里只是大概的描述,你可能需要调整正则,或者不使用正则
- 例如,`问 13.png` `Q3.1.jpg` `R1.1.5.PNG` 等等的文件名都是合法的
检测有没有对应的 `.typ` 文件。即,看有没有后缀名改成 `typ` 的文件。
如果没有,则用 `./scripts/img2typ.prompt.txt` 为提示词,调用一个支持图片的 OpenAI 兼容 API。这个提示词文件在未来会改动请在程序执行时动态读取它。API 的 API 端点和 API Key 应该使用一个 `.env` 文件定义,这个文件将会置放在 `./scripts/` 文件夹下。
对输出结果,如果有 Markdown 代码块包裹,则去除(可能需要你写正则或者其他任何机制)
接着,保存为对应的 `.typ` 文件。
最后,整理所有符合条件的 `.typ` 文件(包括生成失败的),整理成一个列表后,在当前根目录写入(可覆盖)`questions.json`,是一个 JSON 列表,列表的每一个项目都是一个 JSON Object。形如
```json
[
{
"question": "Q3.1",
"format": "typst",
"target": "Q3.1.typ"
},
{
"question": "R1.1.5",
"format": "typst",
"target": "R1.1.5.typ"
}
]
```
## 细节
调用 API 时,如果失败,则重试。最多重试 3 次(或者可定义),真的失败了不能 panic只是在 stderr 中汇报。
## 规范
代码应该是人类可维护的。你可以(而且最好)使用 python 的比较常用的现代语法,例如直接的类型注解(使用 `list` 而不是 `typing.List`),以及尽量使用 `pathlib.Path` 而不是字符串。
这个应用是面向过程的。你应该首先对流程做拆解,然后以子函数的形式声明整个函数。每个函数都应该有 docstring。对于 AI 等一些比较重要的东西,你再使用面向对象的方式去应对。
你可以给我要求,让我依赖一些更多的外置库。当前环境有 `requests``dotenv``rich``tqdm` 可用。
程序往 `stderr` 的输出应该是可审计的。应该汇报:
- 将要处理的文件清单。
- 调用了什么 API调用情况如何输入输出多少 tokens。
- 写入了什么文件。
程序往 `stderr` 的输出应该是良好可视化的,就是说,有颜色区分,但是不要加 emoji。或者说你应该使用自带的日志库 + 一定的格式化。
## 额外功能添补
这个脚本应该可以作为 cli 调用,支持以下参数:
- `--file``-f` 后接文件名,可重复这个参数。当存在这个参数,则解析对应的图片,而不是扫描当前目录
- `--dry-run` 不调用 AI也不写入文件
- `--verbose` 在基础上反馈 AI 调用的输出,相当于 log level 是 `DEBUG`
- `--retry` 接数字,重试次数,默认为 3
- `-n` 接数字,并发数量,默认为 3