- 后端 API(Flask + Gunicorn) - RAG 引擎(混合检索 + 云端 Reranker + 引用溯源) - 文档解析(MinerU + 多格式支持) - Docker 生产部署配置 - 排除前端项目、敏感配置、模型文件
80 lines
3.9 KiB
Markdown
80 lines
3.9 KiB
Markdown
1. 整体结构 (Envelope Pattern)所有题型统一采用以下外壳,通过 question_type 进行区分。JSON{
|
||
"metadata": {
|
||
"question_id": "string (UUID)",
|
||
"question_type": "single_choice | multiple_choice | true_false | fill_blank | subjective",
|
||
"difficulty": 3,
|
||
"tags": ["知识点A", "知识点B"],
|
||
"score": 10.0,
|
||
"version": "1.0"
|
||
},
|
||
"source_trace": {
|
||
"document_id": "string - 原始文档ID",
|
||
"document_name": "string - 文档名称",
|
||
"source_context": "string - AI出题参考的原文切片/上下文",
|
||
"page_numbers": [14, 15]
|
||
},
|
||
"content": {
|
||
"stem": "string - 题干内容,支持Markdown格式",
|
||
"data": {},
|
||
"answer": null,
|
||
"explanation": "string - 详尽的答案解析"
|
||
},
|
||
"review_info": {
|
||
"status": "pending",
|
||
"reviewer_comment": null,
|
||
"created_at": "2026-04-17T18:30:00Z"
|
||
}
|
||
}
|
||
2. 各题型 content.data 与 content.answer 定义(1) 单选题 (single_choice)data: 包含选项数组。answer: 对应正确选项的 key。JSON"content": {
|
||
"stem": "根据文档,公司成立的年份是?",
|
||
"data": {
|
||
"options": [
|
||
{"key": "A", "content": "1998年"},
|
||
{"key": "B", "content": "2005年"},
|
||
{"key": "C", "content": "2010年"}
|
||
]
|
||
},
|
||
"answer": "B",
|
||
"explanation": "在文档第三页明确提到公司于2005年获得营业执照。"
|
||
}
|
||
(2) 多选题 (multiple_choice)data: 选项数组。answer: 正确选项 key 的数组。JSON"content": {
|
||
"stem": "以下属于公司核心价值观的有?",
|
||
"data": {
|
||
"options": [
|
||
{"key": "A", "content": "创新"},
|
||
{"key": "B", "content": "诚信"},
|
||
{"key": "C", "content": "加班"}
|
||
]
|
||
},
|
||
"answer": ["A", "B"],
|
||
"explanation": "手册第一章第一节列出了‘创新’与‘诚信’为唯二核心价值观。"
|
||
}
|
||
(3) 判断题 (true_false)data: 可留空或自定义文字(如:正确/错误,对/错)。answer: boolean (true 为正确,false 为错误)。JSON"content": {
|
||
"stem": "员工可以在办公区吸烟。",
|
||
"data": null,
|
||
"answer": false,
|
||
"explanation": "《行政管理规范》第五条严禁在办公区吸烟。"
|
||
}
|
||
(4) 填空题 (fill_blank)data: 槽位定义。answer: 数组,按顺序存放每个空的标准答案列表(支持同义词)。JSON"content": {
|
||
"stem": "RAG的全称是___,其核心在于利用___增强生成效果。",
|
||
"data": { "blank_count": 2 },
|
||
"answer": [
|
||
["检索增强生成", "Retrieval Augmented Generation"],
|
||
["外部知识库", "自有文档", "Context"]
|
||
],
|
||
"explanation": "RAG即检索增强生成,通过引入外部知识库信息提升回答准确度。"
|
||
}
|
||
(5) 主观题 (subjective)data: 包含评分维度和关键词。answer: string (参考范文)。JSON"content": {
|
||
"stem": "请简述RAG架构中‘切片策略’对检索质量的影响。",
|
||
"data": {
|
||
"scoring_points": [
|
||
{"point": "提到了语义完整性", "weight": 0.4},
|
||
{"point": "提到了切片过大导致噪声", "weight": 0.3},
|
||
{"point": "提到了切片过小丢失上下文", "weight": 0.3}
|
||
],
|
||
"keywords": ["语义窗口", "Top-K", "重叠度"]
|
||
},
|
||
"answer": "参考范文:合理的切片策略能保持语义完整,通过设置Overlap防止信息断层...",
|
||
"explanation": "此题考查对RAG性能优化的深度理解。"
|
||
}
|
||
3. 后端约束说明 (Tips for Backend)数据持久化:建议将 content 整体以 JSONB (PostgreSQL) 或类似的格式存储,方便扩展未来可能增加的题型(如连线题、排序题)。分值校验:后端应校验 metadata.score 是否为正数;对于多选题,可增加逻辑判断 answer 数组长度必须 $\ge 2$。RAG 闭环:source_trace 字段是 RAG 项目的核心,建议后端在审核界面提供一个“点击查看原文”的按钮,直接展示 source_context 的内容。幂等性:建议由前端或 AI 服务生成 question_id (UUID),防止网络波动导致的重复入库。 |