用 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. 数据来源的三种姿势

  1. Hugging Face 公开数据
    直接写 组织名/数据集名,默认读 train 分片;如果想读 test,加 --dataset-split test

  2. 本地 JSONL
    每行一个 JSON:

    {"text": "机器学习是人工智能的一个分支……"}
    {"text": "深度学习通常使用神经网络……"}
    
  3. 本地 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 怎么写?

  1. 先启动 Ollama 并拉模型

    ollama run hf.co/lmstudio-community/Qwen3-4B-Instruct-2507-GGUF:Q4_K_M
    
  2. 再运行:

    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 分钟装好环境
  • 如何用一行命令把公开数据集或本地文件变成问题库
  • 如何控制风格、限速、并发、切分数据
  • 如何解读输出并排查常见错误

下一步,你可以:

  1. 把生成的问题再喂给 RAG 系统,做知识库问答。
  2. --styles-file 维护公司专属风格,如“客服场景”“技术面试”。
  3. 把结果导入 Excel 或数据库,做进一步质量评估。

祝你玩得开心,有问题直接提 Issue 或在社群交流。