AI试题生成配置:从零搭建可用的题目自动生成服务
想用 AI 自动生成试题,核心是把模型接口、提示词和输出解析三部分配置好。
本文以 Python 调用 OpenAI 兼容接口为例,带你从零完成一套可运行的 AI 试题生成配置,默认你有一台能上网的 Linux 或 Windows 电脑,并已注册可用的模型服务账号。
先确认运行环境和依赖
这套配置对系统要求不高,但需要 Python 3.8 以上版本。
打开终端或命令提示符,执行 python --version 确认版本。
如果低于 3.8,建议先升级。
接着安装 OpenAI 官方 SDK:
pip install openai
安装完成后,用 pip show openai 查看版本,确保没有报错。
如果你使用的是其他兼容 OpenAI 接口的服务(如国内中转或自建模型),同样可以用这个 SDK,只需在代码中替换 base_url。
配置密钥和接口地址
不要把 API 密钥直接写在代码里。
推荐用环境变量管理。
Linux/macOS 下在 ~/.bashrc 或 ~/.zshrc 末尾添加:
export OPENAI_API_KEY="你的密钥"
export OPENAI_BASE_URL="https://api.openai.com/v1"
Windows 用户可在系统环境变量中新建同名变量。
保存后重新打开终端,用 echo $OPENAI_API_KEY 检查是否生效。
如果你用的是第三方兼容服务,把 OPENAI_BASE_URL 改成服务商提供的地址,注意末尾不要多写斜杠。
编写试题生成脚本
新建文件 generate_quiz.py,填入以下代码。
这段脚本会调用模型生成 5 道单选题,并解析成 JSON 格式输出:
import os, json
from openai import OpenAI
client = OpenAI(
api_key=os.getenv("OPENAI_API_KEY"),
base_url=os.getenv("OPENAI_BASE_URL")
)
prompt = """请生成5道关于Python基础语法的单选题,以JSON数组返回,每个对象包含question、options(4个选项的数组)、answer(正确选项的索引,从0开始)。只输出JSON,不要额外解释。"""
resp = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": prompt}],
temperature=0.7
)
content = resp.choices[0].message.content
print(content)
保存后运行 python generate_quiz.py。
如果一切正常,终端会打印一段 JSON 数组。注意:模型名 gpt-4o-mini 需替换为你实际可用的模型,不确定时查看服务商文档。
调整提示词让题目更符合要求
默认提示词只说了“Python基础语法”,实际使用时需要按学科、难度、题型定制。
把 prompt 变量改成类似下面的结构:
请生成3道关于【初中数学一元一次方程】的单选题,难度为中等,以JSON数组返回,每个对象包含question、options(4个选项)、answer(正确选项索引,从0开始)。只输出JSON。
如果模型返回了多余的解释文字,可以在提示词末尾加上“不要输出任何非JSON内容”,并设置 temperature=0.3 降低随机性。
对于需要固定答案顺序的场景,还可以在提示词中要求“正确答案随机分布在四个选项中”。
常见报错和避坑提醒
- 报错
AuthenticationError:检查OPENAI_API_KEY是否设置正确,环境变量是否在同一个终端会话中生效。 - 报错
ConnectionError或超时:确认OPENAI_BASE_URL可访问,服务器网络是否放行 443 端口。国内服务器可能需要配置代理,或者换用国内可直连的兼容服务。 - 返回内容不是 JSON:模型偶尔会输出 Markdown 代码块,解析前先用字符串替换去掉
`json 和`标记,再用json.loads转换。 - 生成题目重复或太简单:适当增加提示词中的约束,比如“避免重复考察同一知识点”“至少包含一道应用题”。
验证生成结果是否可用
运行脚本后,不要只看打印内容。
把输出保存到文件,用下面的代码检查 JSON 结构是否完整:
import json
data = json.loads(content)
assert isinstance(data, list) and len(data) > 0
for item in data:
assert "question" in item and "options" in item and "answer" in item
assert len(item["options"]) == 4
assert 0 <= item["answer"] <= 3
print("校验通过,共生成", len(data), "道题")
如果校验失败,根据报错信息调整提示词或解析逻辑。
建议先用少量题目测试,确认稳定后再批量生成。
关于模型选择和成本
不同模型生成题目的质量和速度差异较大,配置时优先选择支持 JSON 模式或函数调用的模型,可以减少解析失败。
费用按 token 计费,生成 5 道题通常消耗几百 token,具体单价以服务商当前价格为准。
如果只是测试,先用免费额度或低价模型跑通流程,再决定是否升级。
完成以上步骤后,你就拥有了一套可重复使用的 AI 试题生成配置。
后续只需修改提示词中的学科、题型和数量,就能快速产出不同试卷。
遇到异常时,优先检查密钥、网络和返回内容格式这三项。