| name | exam-assembler |
| description | 試卷組裝器,將題目組合成完整試卷。Triggers: 組卷, 組裝試卷, assemble, 建立試卷, 試卷組合, 產生試卷. |
試卷組裝器 (Exam Assembler)
描述
將生成的題目組合成完整試卷,包含:
- 題目排序與編號
- 難度分布平衡
- 題型混合配置
- 試卷封面與說明
觸發條件
- 「組卷」「組裝試卷」
- 「assemble」「建立試卷」
- 「產生試卷」
🔧 組裝流程
Step 1: 載入題目池
def load_question_pool(config):
"""載入符合條件的題目"""
questions = list_questions(
topics=config.topics,
difficulty=config.difficulty_range,
types=config.question_types,
status="validated"
)
return questions
Step 2: 難度分布配置
def balance_difficulty(questions, config):
"""按難度分布選題"""
distribution = config.difficulty_distribution
selected = []
total = config.total_questions
for difficulty, ratio in distribution.items():
count = int(total * ratio)
pool = [q for q in questions if q.difficulty == difficulty]
selected.extend(random.sample(pool, min(count, len(pool))))
return selected
Step 3: 題型混合
def mix_question_types(questions, config):
"""混合不同題型"""
type_distribution = config.type_distribution
...
Step 4: 排序與編號
def order_questions(questions, strategy="topic_grouped"):
"""排序題目"""
strategies = {
"topic_grouped": group_by_topic,
"difficulty_ascending": sort_by_diff,
"random": shuffle,
"type_grouped": group_by_type
}
ordered = strategies[strategy](questions)
for i, q in enumerate(ordered, 1):
q.number = i
return ordered
Step 5: 生成試卷結構
def assemble_exam(questions, config):
"""組裝最終試卷"""
exam = {
"metadata": {
"title": config.title,
"date": config.date,
"duration": config.duration,
"total_questions": len(questions),
"total_points": sum(q.points for q in questions)
},
"instructions": generate_instructions(config),
"sections": organize_sections(questions, config),
"answer_key": generate_answer_key(questions),
"explanations": None
}
return exam
📊 試卷結構
{
"exam_id": "exam_20260203_001",
"metadata": {
"title": "麻醉學模擬考",
"subtitle": "靜脈麻醉劑專章",
"date": "2026-02-03",
"duration_minutes": 60,
"total_questions": 50,
"total_points": 100,
"passing_score": 60
},
"instructions": {
"general": "請仔細閱讀每題後選擇最適當的答案",
"time_management": "建議每題花費 1-2 分鐘",
"grading": "選擇題每題 2 分,共 100 分"
},
"sections": [
{
📝 輸出格式
📋 試卷組裝完成
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📄 麻醉學模擬考 - 靜脈麻醉劑專章
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📊 試卷摘要
題數: 50 題
總分: 100 分
時間: 60 分鐘
及格: 60 分
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📈 難度分布
Easy ████████████░░░░░░░░ 30% (15題)
Medium ████████████████████ 50% (25題)
Hard ████████░░░░░░░░░░░░ 20% (10題)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📑 試卷結構
第一部分: 選擇題 (1-40題, 80分)
├── 單選題 40 題 × 2 分
第二部分: 題組題 (41-50題, 20分)
├── 題組 1: 術中低血壓處理 (5題, 10分)
└── 題組 2: 藥物交互作用 (5題, 10分)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📚 主題涵蓋
Propofol .............. 8 題 (16%)
Etomidate ............. 5 題 (10%)
Ketamine .............. 5 題 (10%)
Barbiturates .......... 4 題 (8%)
Benzodiazepines ....... 6 題 (12%)
藥物動力學 ............ 8 題 (16%)
臨床應用 .............. 14題 (28%)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✅ 組裝完成!
可用操作:
• 匯出 PDF: `export pdf exam_20260203_001`
• 匯出 Word: `export docx exam_20260203_001`
• 線上作答: `publish exam_20260203_001`
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
⚙️ 配置選項
exam_config = {
"title": "麻醉學模擬考",
"total_questions": 50,
"duration_minutes": 60,
"difficulty_distribution": {
"easy": 0.3,
"medium": 0.5,
"hard": 0.2
},
"type_distribution": {
"single_choice": 0.7,
"multiple_choice": 0.1,
"question_set": 0.2
},
"ordering_strategy": "difficulty_ascending",
"include_answers": False,
"include_explanations": False
}