Install
openclaw skills install @daigxok/gaoshu-questionbank-workflowopenclaw skills install @daigxok/gaoshu-questionbank-workflow版本:1.1(2026-09-01 升级:merge 去重升级为「q[:80] + 数学签名归一化」双维度,实战验证抓出 30+ 措辞微变同题) 适用:省级大学数学 OpenClaw 培训 / 高数题库扩展生产 目标:每批 40 题(14+13+13 三章),质量红线全部达标后入库
本技能定义「高等数学智能题库」从选题到入库的完整生产流水线。已在主库 3746 题上稳定运行 24+ 批次(B54–B77 等),每批 40 题零质量事故。
何时使用:用户要求"继续 BXX / 生成下一批题目 / 补某章题目"时,按本工作流执行。
核心质量红线(每批必须全部满足):
--approved)kaoyan1/
├── data/
│ ├── 高数智能题库_主库.json # 主库(每题 20 字段)
│ ├── pending/ # 生成脚本/raw 文件/进度快照
│ ├── approved/ # 入库后归档
│ └── backlog/ rejected/
├── pipeline/
│ └── import_batch.py # 入库脚本:python import_batch.py <file> --approved
└── 题库建设工作流_v2.md # 工作流参考
lines = [q['q'].replace('\n',' ') for q in master if q['chapter'] in ('3','6','8')]
open('data/pending/bXX_existing_XXX.txt','w',encoding='utf-8').write('\n'.join(lines))
∫xe^x、∫x/(1+x²)²、(e^x-1-x)/x²、tan x - x 等)主库已有 N 遍1/f'(ξ₁)+1/f'(ξ₂)=2、f'(ξ₁)f'(ξ₂)=1,同型必撞下列反常积分中收敛的是( ))前 80 字符即触发去重 → 用变体措辞(如加逗号)f(x)=x、x² 在 [-π,π] 已多版本)求 vs 计算、$ vs $$、∑ vs Σ、\frac1x vs \frac{1}{x}、开头动词差异——同一数学题改措辞仍会撞数学签名归一化(2026-09-01 教训,见⑦)P.append({...}),字段见第四节 schema\\ 转义Score sum=10: TruebXX_chY_raw.txt → 逐章校验(题数/score/chapter/diff)→ 合并 40 题bXX_raw.txt
existing = {q['q'][:80] for q in master}
dups = [q for q in batch if q['q'][:80] in existing]
$ → \limits/\displaystyle 删除、\dfrac→\frac → ∑/Σ→\sum → 去 \,/\!/~ → \frac1x 简写展开为 \frac{1}{x}(正则循环 3 次)→ 去开头动词(求极限/证明/计算/判断/讨论/利用/求/设函数/设/解,取第一个命中)→ 去结尾句号import re
def norm(s):
s = re.sub(r"\s+", "", s)
s = re.sub(r"[,。;:、?!()()\[\]{}\"']", "", s)
s = s.replace("$", "").replace("\\limits", "").replace("\\dfrac", "\\frac").replace("\\displaystyle", "")
s = s.replace("∑", "\\sum").replace("Σ", "\\sum")
s = s.replace("\\,", "").replace("\\!", "").replace("~", "")
for _ in range(3):
s = re.sub(r"\\frac(\d+|[a-zA-Z])(\d+|[a-zA-Z])", r"\\frac{\1}{\2}", s)
for v in ["求极限", "证明", "计算", "判断", "讨论", "利用", "求", "设函数", "设", "解"]:
if s.startswith(v):
s = s[len(v):]
break
return s.rstrip("。")
# 比对:norm(new_q) in {norm(q['q']) for q in master} → 撞车
python pipeline/import_batch.py data/pending/bXX_raw.txt --approved
# 期望输出: 入库: 40 题 | 去重: 0 题 | 状态: 已审核
出题进度_B01-BXX_日期.md){
"q": "题干(LaTeX,$…$)",
"type": "calc|choice|fill|judgment|proof",
"options": ["A. …", "B. …"], // 仅 choice
"answer": "答案",
"solution": [{"text": "步骤1", "score": 6}, {"text": "步骤2", "score": 4}], // 分数和=10
"hints": [{"level": 1, "text": "提示1"}, {"level": 2, "text": "提示2"}], // 2-3 层,递进
"common_errors": [
{"error": "典型错误", "reason": "原因", "type": "conceptual|computational|procedural|strategy"}
],
"bloom_level": "L1-L6",
"thinking_type": "程序性|分析性|批判性|创造性",
"tags": ["…"],
"difficulty": "basic|advanced|mastery|challenge",
"estimated_time": 2-10,
"prerequisites": ["…"],
"chapter": "1-8",
"section": "与主库现有分类一致",
"application": "应用领域(纯数学/物理/金融/AI/医学/无人机等)"
}
Bloom 层级参考:L1 记忆/程序、L2 理解、L3 应用、L4 分析、L5 综合/评价、L6 创造/证明
| 章规模 | type | bloom | difficulty |
|---|---|---|---|
| 14 题章 | calc5 / choice2 / fill2 / judgment2 / proof3 | L1=1, L2=2, L3=3, L4=3, L5=3, L6=2 | basic1 / adv5 / mastery5 / chal3 |
| 13 题章 | calc4 / choice2 / fill2 / judgment2 / proof3 | L1=1, L2=1, L3=3, L4=3, L5=3, L6=2 | basic1 / adv4 / mastery5 / chal3 |
(各章批量历史:B54–B77 全部精确命中,此为成熟标准)
入库前(merge 通过才算):
入库后(verify 通过才算):
内容质量:
| 现象 | 原因 | 对策 |
|---|---|---|
| 生成脚本 SyntaxError | 中文文本内嵌 ASCII 引号 | 用全角引号「」或转义 |
| 撞车漏检 | grep 时 \tan 的 \t 被正则当制表符 | grep 用 \\tan 或纯文本 tan |
| 双中值题重复 | 结论变体(和/积/倒数)仍撞前 80 字符 | 直接换题,不做同型变体 |
| 选择题去重误报 | 固定开头(下列…中收敛的是) | 措辞加变体(加逗号等) |
| 13 题章写出 14 题 | 模板混淆 | 写前确认章规模与分布模板 |
| 措辞/格式微变漏检(2026-09-01) | 同题但 求 vs 计算、$ vs $$、∑ vs Σ、\frac1x vs \frac{1}{x}、开头动词差异 → q[:80] 不同 | merge 必做数学签名归一化二次扫描;设计阶段避免"改措辞当新题" |
| 同题干不同答案(2026-09-01) | 可能是不同题(选项内容不同)或错题(答案笔误) | 逐对核对答案:答案一致→删;不同→分别验算,错题删除(例:HC0884-020 特解 +xe^x 应为 -xe^x,靠比对暴露) |
| 早批次重复密度高(2026-09-01) | 7/24-8/01 批次措辞不规范(HC03不定积分-001 | 新批次设计阶段查重 + merge 双维度扫描兜底 |
每批交付:
data/pending/gen_bXX_chY.py(3 个生成脚本,含自校验)data/pending/merge_bXX.py(含双维度去重)、verify_bXX.pydata/pending/bXX_chY_raw.txt、bXX_raw.txt出题进度_B01-BXX_日期.md(含亮点题、下批建议)\t grep、选择题措辞重复、求 vs 计算 措辞微变