入门 11 分钟教育

教师:生成 exercices

直接回答

要在本地生成练习题,请通过 Ollama 或 LM Studio 提供 Qwen 3.5 9B(6.6 GB)模型服务,将您的指令保存在自定义模型中,要求模型以经脚本检查的 JSON 格式生成选择题,并让代码而非模型计算数值答案。法国教育部的使用框架允许这种用途,前提是核查所有内容,并说明使用了 AI。

准备练习题、参考答案和经过调整的版本,往往要花上好几个晚上的时间;只要始终把握内容,AI就能提供帮助。本指南介绍如何搭建一个用于选择题、练习题及其调整的本地工作环境,遵循的核心原则是:模型负责撰写,代码负责计算和校验,教师负责核查。本指南依据2025年发布的教育领域AI使用框架。

作者: Mohamed Meguedmi·更新于 2026-09-30·已在 Windows、macOS 和 Linux 上测试

#为什么用本地模型编写练习题

根据各学区教育部门的概述,法国教育部于 2025 年 6 月发布的教育领域 AI 使用框架允许将 AI 用于备课、评估和批改,同时要求教师履行两项义务:始终核查 AI 生成的内容,并公开说明其使用情况。该框架明确禁止在面向大众的 AI 产品中使用个人数据或机密数据,并建议优先采用自由软件方案。本地模型符合这三点:没有任何数据离开电脑,无需注册,而且开放权重模型属于通常意义上的自由软件方案。

一个经常被提出的说法需要加以限定:只要不输入任何个人数据,使用面向大众的服务准备数学练习题仍然是允许的。本地运行的优势在其他方面。它可以处理包含姓名的文档,例如学生答卷或评语,而不暴露学生信息。它无需联网也能运行,而且能保持行为稳定:指令可以保存,模型不会从一个月到下个月就发生变化。

学生与作业
绝不要在在线服务中输入姓名、可识别学生身份的作业或评语。在本地运行时,数据传输风险会消失,但坚持数据最小化原则仍是一个好习惯。
成本
无需订阅。如果您较新的电脑配有 16 GB 内存,就已经具备所需硬件;否则,小型模型也足以完成简单练习。
离线
在教师办公室或网络过滤 AI 服务的机构中较为实用。
稳定性
将指令保存在自定义模型中,可以让每周生成的练习单保持一致的形式。

#最小技术栈

本地 AI 套件

只需 1 小时,即可在您的电脑上拥有专属的免费 ChatGPT — LM Studio、Ollama、Open WebUI、您的文档,无需云端。

  • 在线空间,终身可用
  • PDF + 文件
  • 30 天内退款

可以选择两款软件来提供模型服务:通过命令行使用的 Ollama,或 LM Studio;如果您不喜欢终端操作,后者的图形界面更容易上手。模型方面,拥有 90 亿参数的 Qwen 3.5 在 Ollama 模型库中的大小为 6.6 GB,宣称支持 256,000 个 token 的上下文:它能装入 8 GB 显存的显卡,或较新电脑的内存中。Mistral Small 24B 的大小为 14 GB,需要更多内存。更大的模型并不能保证准确性;您的复核才是准确性的保证。

为避免反复输入指令,请使用 Modelfile 文件创建自定义模型:其中的 SYSTEM 指令定义了每次对话都会应用的系统消息。下面的文件固定了生成练习单时使用的角色、难度级别和风格。

练习助手的 Modelfile
FROM qwen3.5:9b
PARAMETER temperature 0.4
PARAMETER num_ctx 8192
SYSTEM """Tu aides un professeur de collège à préparer des exercices conformes aux programmes
français du cycle 4. Vocabulaire adapté à l'âge des élèves. Tu ne donnes que des
corrigés dont tu es sûr ; sinon tu écris : à vérifier. Tu n'inventes jamais de citation,
de date ou de source."""
创建并启动模型
ollama create prof-exos -f Modelfile
ollama run prof-exos

#生成可实际使用的选择题,而不只是读得懂的题目

让模型以自由文本形式生成选择题,结果很难复用:需要在课堂使用的工具中重新录入。最好要求模型采用结构化格式,再由代码进行校验。Ollama 可以将回答限制为符合某个 JSON 模式:根据其文档,应将该模式传入 format 字段。模型负责编写题目;脚本检查是否有四个互不相同的选项且只有一个正确答案,然后写出可导入的文件。

生成并检查选择题测验
import json, requests, re

SCHEMA = {'type': 'object', 'properties': {'questions': {'type': 'array', 'items': {
  'type': 'object', 'properties': {
    'enonce': {'type': 'string'},
    'choix': {'type': 'array', 'items': {'type': 'string'}},
    'bonne_reponse': {'type': 'integer'},
    'explication': {'type': 'string'}},
  'required': ['enonce', 'choix', 'bonne_reponse', 'explication']}}},
  'required': ['questions']}

def generer(sujet, niveau, n=10, modele='prof-exos'):
    consigne = (f'Rédige {n} questions à choix multiple sur : {sujet}. Niveau : {niveau}. '
      'Quatre choix par question, dont un seul correct ; bonne_reponse est l\'indice (0 à 3). '
      'Les mauvais choix doivent être plausibles. Une phrase d\'explication. '
      'Réponds par un JSON conforme à : ' + json.dumps(SCHEMA))
    r = requests.post('http://localhost:11434/api/chat', json={
        'model': modele, 'stream': False, 'format': SCHEMA,
        'messages': [{'role': 'user', 'content': consigne}]})
    return json.loads(r.json()['message']['content'])['questions']

def valides(questions):
    ok, rejets, vus = [], [], set()
    for q in questions:
        c = q.get('choix', [])
        if (len(c) != 4 or len({x.strip().lower() for x in c}) != 4
                or q.get('bonne_reponse') not in (0, 1, 2, 3) or q['enonce'].strip().lower() in vus):
            rejets.append(q); continue
        vus.add(q['enonce'].strip().lower()); ok.append(q)
    return ok, rejets

def esc(s):
    return re.sub(r'([~=#{}:])', r'\\\1', s)

def vers_gift(questions):
    blocs = []
    for i, q in enumerate(questions, 1):
        lignes = [('=' if j == q['bonne_reponse'] else '~') + esc(c) for j, c in enumerate(q['choix'])]
        blocs.append(f"::Q{i}::{esc(q['enonce'])} {{\n" + '\n'.join(lignes) + '\n}\n')
    return '\n'.join(blocs)

Moodle 使用的 GIFT 格式是一种简单的文本文件格式,可以导入题库。如果您的机构使用其他工具,请调整最后一个函数:原则仍然是根据经过检查的数据生成文件,而不是复制粘贴模型生成的文本。脚本并不检查题目内容是否真实正确,因此还需要阅读有关核查的章节。

→
最能提升生成质量的提示
明确允许使用的信息来源。写上“仅根据以下文本提出问题”,再粘贴一段课程内容,就能得到可核实的问题;而开放式主题(如“法国大革命”)会让模型调用自身记忆,这正是它最容易编造内容的地方。

#让每个问题都以您课程中的一段内容为依据

防止编造事实的最可靠方法是,要求每道题都附上为其提供依据的课程原文片段。您粘贴文本,在数据结构中添加一个 passage 字段,脚本便会检查该片段是否逐字存在于所提供的文本中。找不到原文片段的题目会被排除:要么模型编造了内容,要么它在没有来源的情况下进行了改写。这项检查不能证明题目质量好,但能保证题目以您的课程内容为依据,而不是依赖模型不准确的记忆。

检查引用的段落是否确实出现在课程内容中
def normaliser(t):
    return ' '.join(t.split()).lower()

def ancrees(questions, cours):
    base = normaliser(cours)
    bonnes, douteuses = [], []
    for q in questions:
        (bonnes if normaliser(q.get('passage', '')) in base else douteuses).append(q)
    return bonnes, douteuses

相应地,需要补充模式定义和指令:在属性和必填字段中添加 passage,并在指令中写入“逐字照抄文本中能够证明正确答案的片段”。涉及课程中未出现的事实的问题,例如从未提及的日期,将无法通过筛选,而这正是目的所在。

#数学练习:Python 负责计算,模型负责组织文字

一个拥有 90 亿参数的模型会在简单运算中出错,尤其是在涉及小数和进位时。对于计算练习,最好对调角色:由代码随机选取数字,计算准确结果并生成参考解答;模型则负责围绕这些数字编写题目,这是它擅长的工作。这样,您的练习单上的答案就永远不会依赖模型的算术能力。

附精确答案的小数运算练习
import random
from decimal import Decimal

def fr(d):
    return str(d.normalize() if d == d.to_integral() else d).replace('.', ',')

def exercices_decimaux(n=8, graine=None):
    hasard = random.Random(graine)
    sortie = []
    for i in range(n):
        nb = 2 if i < 2 else hasard.choice([3, 3, 4])
        vals = [Decimal(hasard.randint(10, 9999)) / hasard.choice([10, 100]) for _ in range(nb)]
        signes = ['+'] + [hasard.choice(['+', '-']) for _ in vals[1:]]
        total = sum(v if s == '+' else -v for v, s in zip(vals, signes))
        if total < 0:
            continue
        enonce = ' '.join((s + ' ' if k else '') + fr(v) for k, (v, s) in enumerate(zip(vals, signes)))
        sortie.append((enonce, fr(total)))
    return sortie

for e, r in exercices_decimaux(graine=42):
    print(e, '=', r)

种子固定功能可精确还原相同的输出内容,例如用于第二天生成修正版本。对于单位转换、百分比计算、一次方程等需要计算的场景,代码负责生成和验证,模型则负责格式化输出。而对于语言生成,模型在自身领域内工作:它生成需要补全的句子、带空缺的对话和指令,这些内容仍需人工复核。

用于英语练习的提示词
Prépare pour des élèves de 5e (niveau A2 du CECRL) une fiche sur le present simple
et le present continuous : 5 phrases à conjuguer, 3 phrases à transformer, un court
dialogue à trous. Vocabulaire courant uniquement. Donne le corrigé à la fin, séparé
par une ligne « CORRIGÉ », et signale entre crochets toute phrase où les deux temps
sont possibles.

#参考答案:先请求生成,再交叉核对

请在第二条消息中请求参考答案,以便模型在上下文中保留题干,并明确您希望得到的内容:最终答案、分步骤的推理、所应用的规则以及应避免的典型错误。参考答案是练习单中风险最高的部分:学生会深信不疑地学到错误答案。两种做法可以降低这一风险。

直接计算,而不是让模型计算
如果答案可以通过计算得出,就用代码计算结果,不要依赖模型给出答案。
生成两次并进行对比
对于推理练习,请用略有不同的指令请求两次解答。如果最终答案不一致,就需要人工复核这道练习。
让另一个模型解题
让另一个规模或模型家族不同的模型在不查看参考答案的情况下解题。结果不一致意味着可能存在错误。这不是证据,只是一道筛选。
复核所有将要分发的内容
自动验证无法替代教师的审阅,教师仍需对内容负责。

#根据学生水平调整练习单

差异化教学是模型最能发挥作用的用途,因为改写是它的强项。只需以一份经过审核的练习单为基础,让模型生成不同版本,同时保留相同的数值和答案,使原有的参考答案仍然适用。分发前,请一位同事审阅改写版本:更简单的表述可能改变题目的意思,这是这类改写的常见缺陷。

基于已确认的教学资料制定差异化教学指令
需求指令示例后续需验证
学习有困难的学生将题目表述改写成短句,在第一道练习前添加一道带解答的例题,保持原有数字不变答案未发生变化
学习进度领先的学生添加三个深化练习,在更抽象的情境中运用相同的概念新练习可完成且正确
特殊需求减少到四道练习,使用短句,在每道练习前提供一个带解答的例题;排版仍由您自行负责与为该学生安排的调整措施相一致
口头版本将题目改写为可以大声提问的问题,每句话只包含一条指令朗读时是否顺畅

#按学科检查准确性

模型会在哪些方面出错,以及如何发现
领域主要风险验证
数学进位、正负号和小数点错误用代码计算;将每道练习题重新做一遍
历史与地理虚构或有误的日期、名称和数字与教材或官方来源交叉核对
语言词形错误,句子不自然由同事或使用该语言的人复核
科学公式、单位、数值检查每一条公式和每一个单位
法语不存在的引文或错误归因对照原作核实每一处引文

共同点是,模型无论写得对还是错,语气都同样自信。此外,相关部委的框架要求对 AI 生成的内容进行系统性核查。具体来说,请为每份练习材料预留五分钟进行复核,并用一个小本子记录发现的错误:一个月后,您就会知道模型在哪些学科中对您而言是可靠的。

#切实可行的制作节奏

  1. 01
    列出本周的学习要点
    三到五个概念,使用课程摘录作为信息来源。
  2. 02
    基于您的资料生成内容
    将课程片段粘贴到提示词中:这样生成的问题就会以您讲授过的内容为依据。
  3. 03
    用代码计算参考答案
    凡是涉及数值的内容,请使用上文所示的脚本进行处理。
  4. 04
    重新阅读并修正
    像学生一样阅读这份练习材料:参考答案中的错误会造成很大的影响。
  5. 05
    排版并说明使用情况
    导出为PDF或导出至您的教学工具,并告知学生该学习资料由AI协助准备,符合透明性要求。
i
实际测量您获得的收益,而不要想当然
连续三周,先记录您按惯常方式备课的耗时,再记录使用工具备课的耗时,将审阅时间也计入。节省的时间很大程度上取决于学科和教学阶段。如果在编写参考答案时节省的时间不多,就保留工具,用于生成变式题和开展差异化教学。
FAQ
教师可以使用 AI 来准备课程吗?+
可以:法国教育部于 2025 年 6 月发布的使用框架,按照各学区的概述,允许将 AI 用于备课、评估和批改。该框架要求系统性核查生成内容,并透明说明其使用情况,同时禁止向面向大众的服务输入个人数据。
选择哪个本地模型来生成练习题?+
Qwen 3.5 9B(6.6 GB,公布的上下文长度为 256,000 tokens)适合配备 8 GB 显存或 16 GB 内存的电脑。Mistral Small 24B(14 GB)需要更多资源。对于计算练习,不应让模型生成答案:应由 Python 脚本计算,因为脚本比模型更可靠。
AI 生成的参考答案可靠吗?+
不,未经核查不能信任。模型写出错误的参考答案时,与写出正确答案时一样自信。请用代码计算数值答案,对推理练习比较两次生成的结果,并在分发前重新审阅每份练习资料。此外,教育部的相关框架也要求逐一核查。
是否应告知学生该文档是由AI生成的?+
法国教育部门的使用框架要求透明说明 AI 的使用情况。在练习单上注明它是在 AI 的帮助下准备的,并由教师复核,是一种简单、诚实且具有教育意义的做法。这也是提醒学生这些工具可能出错的机会。
如何将生成的选择题导入 Moodle 或其他工具?+
让模型按规定的JSON格式生成题目,通过脚本检查是否有四个不同的选项和一个有效答案,然后转换为GIFT文件;Moodle可将这种文本格式的文件导入题库。对于其他工具,调整转换方式即可:数据本身保持不变。
可以将学生的答卷输入本地模型吗?+
从技术上说,没有数据离开计算机,因此消除了数据传输风险。不过,仍应保持良好的安全习惯:在任何处理之前去除姓名,将文件保存在受保护的电脑上,并遵守所在机构的规定。辅助批改由教师负责,决定权仍由教师保留。
这份指南对您有帮助吗?

有反馈、发现了错误,或想补充说明?请告诉我们,让这份指南对每个人都更有帮助。