用 AI 把任何文章变成高质量问题库:零门槛动手指南
“我手里有一大批期刊论文,想快速得到几百条高质量问题用来训练模型,怎么办?”
“本地电脑能跑吗?需要 GPU 吗?”
“API 用哪家最便宜?如果只想试用 10 条数据该怎么写参数?”
如果你也有类似的疑问,这篇指南正好给你答案。它把一个开源小工具的全部功能拆开揉碎,用对话和实例讲清楚:
-
它能做什么 -
怎么做最快 -
遇到问题怎么排查
所有示例都基于源代码仓库 README,不掺杂外部信息,拿来即用。
1. 这个工具到底干什么?
一句话:给它一段文本,它自动返回 N 条风格各异的问题。
-
数据来源:既可以是 Hugging Face 上的公开数据集,也可以是你本地的 .jsonl
,.json
,.parquet
文件。 -
生成方式:通过调用 10 余家大模型接口(OpenAI、Anthropic、Gemini、本地 Ollama 等)。 -
风格控制:内置 30 多种写作风格(学术、幽默、口语化、批判性……),每次随机挑一种,也可以强制指定。 -
结果保存:每条问题都附带原始文本、问题序号、模型信息、时间戳,直接落盘成 JSONL,后续清洗非常方便。
2. 三步完成环境准备
步骤 | 命令 | 说明 |
---|---|---|
1. 新建虚拟环境(可选) | python3 -m venv .venv && source .venv/bin/activate |
防止包冲突 |
2. 安装依赖 | pip install -r requirements.txt |
只有 3 个包:aiohttp、datasets、tqdm |
3. 配置 API Key | export OPENROUTER_API_KEY=你的密钥 |
用哪家就配哪家的 key,下文有对照表 |
没有 GPU 也能跑,因为计算都在云端,本地只负责网络请求和 JSON 解析。
3. 30 秒跑通第一个例子
把下面整段复制到终端,回车即可:
export OPENROUTER_API_KEY=你的密钥
python3 src/main.py mkurman/hindawi-journals-2007-2023 \
--provider openrouter \
--model qwen/qwen3-235b-a22b-2507 \
--output-dir ./data/demo \
--start-index 0 \
--end-index 10 \
--num-questions 5 \
--text-column text \
--verbose
运行结束后,./data/demo
里会出现一个 questions_2025-08-18_xx-xx-xx_xxx.jsonl
,每行都是一条完整记录。
4. 参数怎么看?一张表全讲透
参数 | 示例值 | 功能 | 常见疑问 |
---|---|---|---|
<dataset_or_jsonl_path> |
mkurman/hindawi-journals-2007-2023 或 ./myfile.jsonl |
数据来源 | 本地文件必须是 .jsonl , .json , .parquet 之一 |
--provider |
openrouter |
大模型供应商 | 见下表 |
--model |
qwen/qwen3-235b-a22b-2507 |
具体模型 | 必须与 provider 匹配 |
--output-dir |
./results |
结果目录 | 不会覆盖旧文件,自动生成带时间戳的新文件 |
--num-questions |
3 |
每段文本生成几个问题 | 太多会被限速 |
--start-index / --end-index |
0 / 100 |
只处理数据集里的第 0-99 条 | 适合先小批量试用 |
--text-column |
text |
读哪一列 | 如果本地文件列名是 content , 就改成 --text-column content |
--style |
"formal and academic" |
指定风格 | 可一次给多个,随机挑,例如 "casual,funny,concise" |
--no-style |
无 | 关闭风格提示 | 生成中性问题 |
--styles-file |
./my_styles.txt |
从文件加载风格 | 每行一个风格,支持 # 注释 |
--num-workers |
4 |
并发数 | 云端 provider 有速率限制时配合 --sleep-between-requests |
--sleep-between-requests |
0.5 |
每次请求后停多久(秒) | 防止 429 错误 |
--max-items |
1000 |
最多读多少条 | 与 --end-index 二选一即可 |
5. 各平台 API Key 速查表
Provider | 环境变量名 | 备注 |
---|---|---|
OpenAI | OPENAI_API_KEY |
官方或中转站都可 |
Anthropic | ANTHROPIC_API_KEY |
Claude 系列 |
OpenRouter | OPENROUTER_API_KEY |
一行密钥可调用多家模型 |
Groq | GROQ_API_KEY |
速度极快 |
Together | TOGETHER_API_KEY |
开源模型多 |
Cerebras | CEREBRAS_API_KEY |
新硬件 |
Gemini | GEMINI_API_KEY |
需 export,即使官方文档写 query 参数 |
Qwen 官方 | QWEN_API_KEY |
通义千问 |
Qwen DeepInfra | QWEN_DEEPINFRA_API_KEY |
另一入口 |
Kimi (月之暗面) | KIMI_API_KEY |
中文友好 |
Z.ai | Z_AI_API_KEY |
注意下划线 |
Featherless | FEATHERLESS_API_KEY |
小众但便宜 |
Chutes | CHUTES_API_KEY |
同上 |
Hugging Face | HUGGINGFACE_API_KEY |
读私有数据集才需要 |
Ollama | 无需 key | 本地 http://localhost:11434 |
6. 数据来源的三种姿势
-
Hugging Face 公开数据
直接写组织名/数据集名
,默认读train
分片;如果想读test
,加--dataset-split test
。 -
本地 JSONL
每行一个 JSON:{"text": "机器学习是人工智能的一个分支……"} {"text": "深度学习通常使用神经网络……"}
-
本地 Parquet
列名同样用--text-column
指定。
7. 风格系统深度拆解
7.1 默认怎么玩?
不额外给任何 --style
或 --no-style
时,工具内置 35+ 条风格,每次随机挑一条。
示例:
-
formal and academic -
funny and entertaining -
practical and application-focused -
thought-provoking and philosophical
7.2 我想全部用学术风?
--style "formal and academic"
7.3 想混合三种风格?
--style "casual and conversational,funny and humorous,concise and direct"
工具会逐条随机挑一种,保证多样性。
7.4 想用文件批量管理风格?
新建 my_styles.txt
:
# 井号开头是注释
formal and academic
creative and imaginative
simple and straightforward
然后:
--styles-file ./my_styles.txt
8. 输出长什么样?
成功条目:
{
"input": "文本摘要技术的最新进展有哪些?",
"source_text": "原文……",
"question_index": 1,
"total_questions": 5,
"metadata": { "original_item_index": 0, "text_column": "text" },
"generation_settings": {
"provider": "openrouter",
"model": "qwen/qwen3-235b-a22b-2507",
"style": "formal and academic",
"num_questions_requested": 5,
"num_questions_generated": 5,
"max_tokens": 4096
},
"timestamp": "2025-08-17T12:34:56.789012"
}
失败条目:
{
"error": "Rate limit exceeded",
"source_text": "...",
"metadata": { ... }
}
9. 高频问答(FAQ)
Q1: 只想试 5 条数据,怎么写最快?
--max-items 5
或
--start-index 0 --end-index 5
Q2: 免费额度有限,如何限速?
--sleep-between-requests 1.0 --num-workers 1
每 1 秒发一次请求,并发 1。
Q3: 本地 Ollama 怎么写?
-
先启动 Ollama 并拉模型 ollama run hf.co/lmstudio-community/Qwen3-4B-Instruct-2507-GGUF:Q4_K_M
-
再运行: python3 src/main.py ./my.jsonl \ --provider ollama \ --model hf.co/lmstudio-community/Qwen3-4B-Instruct-2507-GGUF:Q4_K_M \ --output-dir ./ollama_out
无需 API key。
Q4: 生成的文件太大,想按天切分?
工具已自动带时间戳,每天跑一次即可。
Q5: 风格可以自定义到什么程度?
任意英文短句即可,例如 --style "like a 5-year-old asking why"
,只要模型能读懂就能生成。
10. 实战案例:把 100 篇新闻变成面试题
假设你手里有 news.jsonl
,想给每篇生成 3 条“面试官视角”的问题:
python3 src/main.py ./news.jsonl \
--provider openrouter \
--model qwen/qwen3-235b-a22b-2507 \
--output-dir ./interview_q \
--style "critical thinking for job interview" \
--num-questions 3 \
--max-items 100 \
--sleep-between-requests 0.5
跑完后打开 interview_q/questions_2025-08-18_xxx.jsonl
,直接筛掉空行即可入库。
11. 常见报错速解
报错信息 | 原因 | 解决 |
---|---|---|
ModuleNotFoundError: aiohttp |
没装依赖 | pip install -r requirements.txt |
401 Unauthorized |
API key 错或没 export | 重新 export |
429 Rate limit |
请求太快 | 加 --sleep-between-requests |
Empty output |
--start-index 超出数据集长度 |
检查数据集条数 |
Connection refused |
Ollama 没启动 | 确认 http://localhost:11434 可访问 |
12. 小结与下一步
读完这篇,你已经知道:
-
如何 5 分钟装好环境 -
如何用一行命令把公开数据集或本地文件变成问题库 -
如何控制风格、限速、并发、切分数据 -
如何解读输出并排查常见错误
下一步,你可以:
-
把生成的问题再喂给 RAG 系统,做知识库问答。 -
用 --styles-file
维护公司专属风格,如“客服场景”“技术面试”。 -
把结果导入 Excel 或数据库,做进一步质量评估。
祝你玩得开心,有问题直接提 Issue 或在社群交流。