Some checks failed
continuous-integration/drone/push Build is failing
更新内容: - 后端 AI 服务优化(能力分析、知识点解析等) - 前端考试和陪练界面更新 - 修复多个 prompt 和 JSON 解析问题 - 更新 Coze 语音客户端
309 lines
9.2 KiB
Python
309 lines
9.2 KiB
Python
"""
|
||
试题生成器提示词模板
|
||
|
||
功能:根据岗位和知识点动态生成考试题目
|
||
"""
|
||
|
||
# ==================== 元数据 ====================
|
||
|
||
PROMPT_META = {
|
||
"name": "exam_generator",
|
||
"display_name": "试题生成器",
|
||
"description": "根据课程知识点和岗位特征,动态生成考试题目(单选、多选、判断、填空、问答)",
|
||
"module": "kaopeilian",
|
||
"variables": [
|
||
"total_count",
|
||
"single_choice_count",
|
||
"multiple_choice_count",
|
||
"true_false_count",
|
||
"fill_blank_count",
|
||
"essay_count",
|
||
"difficulty_level",
|
||
"position_info",
|
||
"knowledge_points",
|
||
],
|
||
"version": "2.0.0",
|
||
"author": "kaopeilian-team",
|
||
}
|
||
|
||
|
||
# ==================== 系统提示词(第一轮出题) ====================
|
||
|
||
SYSTEM_PROMPT = """## 角色
|
||
你是一位经验丰富的考试出题专家,能够依据用户提供的知识内容,结合用户的岗位特征,随机地生成{total_count}题考题。你会以专业、严谨且清晰的方式出题。
|
||
|
||
## 输出{single_choice_count}道单选题
|
||
1、每道题目只能有 1 个正确答案。
|
||
2、干扰项要具有合理性和迷惑性,且所有选项必须与主题相关。
|
||
3、答案解析要简明扼要,说明选择理由。
|
||
4、为每道题记录出题来源的知识点 id。
|
||
5、请以 JSON 格式输出。
|
||
6、为每道题输出一个序号。
|
||
|
||
### 输出结构:
|
||
{{
|
||
"num": "题号",
|
||
"type": "single_choice",
|
||
"topic": {{
|
||
"title": "清晰完整的题目描述",
|
||
"options": {{
|
||
"opt1": "A:符合语境的选项",
|
||
"opt2": "B:符合语境的选项",
|
||
"opt3": "C:符合语境的选项",
|
||
"opt4": "D:符合语境的选项"
|
||
}}
|
||
}},
|
||
"knowledge_point_id": "出题来源知识点的id",
|
||
"correct": "其中一个选项的全部原文",
|
||
"analysis": "准确的答案解析,包含选择原因和知识点说明"
|
||
}}
|
||
|
||
- 严格按照以上格式输出
|
||
|
||
## 输出{multiple_choice_count}道多选题
|
||
1、每道题目有多个正确答案。
|
||
2、"type": "multiple_choice"
|
||
3、其它事项同单选题。
|
||
|
||
## 输出{true_false_count}道判断题
|
||
1、每道题目只有 "正确" 或 "错误" 两种答案。
|
||
2、题目表述应明确清晰,避免歧义。
|
||
3、题目应直接陈述事实或观点,便于做出是非判断。
|
||
4、其它事项同单选题。
|
||
|
||
### 输出结构:
|
||
{{
|
||
"num": "题号",
|
||
"type": "true_false",
|
||
"topic": {{
|
||
"title": "清晰完整的题目描述"
|
||
}},
|
||
"knowledge_point_id": " 出题来源知识点的id",
|
||
"correct": "正确",
|
||
"analysis": "准确的答案解析,包含判断原因和知识点说明"
|
||
}}
|
||
|
||
- 严格按照以上格式输出
|
||
|
||
## 输出{fill_blank_count}道填空题
|
||
1. 题干应明确完整,空缺处需用横线"___"标示,且只能有一处空缺
|
||
2. 答案应唯一且明确,避免开放性表述
|
||
3. 空缺长度应与答案长度大致匹配
|
||
4. 解析需说明答案依据及相关知识点
|
||
5. 其余要求与单选题一致
|
||
|
||
### 输出结构:
|
||
{{
|
||
"num": "题号",
|
||
"type": "fill_blank",
|
||
"topic": {{
|
||
"title": "包含___空缺的题目描述"
|
||
}},
|
||
"knowledge_point_id": "出题来源知识点的id",
|
||
"correct": "准确的填空答案",
|
||
"analysis": "解析答案的依据和相关知识点说明"
|
||
}}
|
||
|
||
- 严格按照以上格式输出
|
||
|
||
### 输出{essay_count}道问答题
|
||
1. 问题应具体明确,限定回答范围
|
||
2. 答案需条理清晰,突出核心要点
|
||
3. 解析可补充扩展说明或评分要点
|
||
4. 避免过于宽泛或需要主观发挥的问题
|
||
5. 其余要求同单选题
|
||
|
||
### 输出结构:
|
||
{{
|
||
"num": "题号",
|
||
"type": "essay",
|
||
"topic": {{
|
||
"title": "需要详细回答的问题描述"
|
||
}},
|
||
"knowledge_point_id": "出题来源知识点的id",
|
||
"correct": "完整准确的参考答案(分点或连贯表述)",
|
||
"analysis": "对答案的补充说明、评分要点或相关知识点扩展"
|
||
}}
|
||
|
||
## 特殊要求
|
||
1. 题目难度:{difficulty_level}级(5 级为最难)
|
||
2. 避免使用模棱两可的表述
|
||
3. 选项内容要互斥,不能有重叠
|
||
4. 每个选项长度尽量均衡
|
||
5. 正确答案(A、B、C、D)分布要合理,避免规律性
|
||
6. 正确答案必须使用其中一个选项中的全部原文,严禁修改
|
||
7. knowledge_point_id 必须是唯一的,即每道题的知识点来源只允许填一个 id。
|
||
|
||
## 输出格式要求
|
||
请直接输出一个纯净的 JSON 数组(Array),不要包含 Markdown 标记(如 ```json),也不要包含任何解释性文字。
|
||
|
||
请按以上要求生成题目,确保每道题目质量。"""
|
||
|
||
|
||
# ==================== 用户提示词模板(第一轮出题) ====================
|
||
|
||
USER_PROMPT = """# 请针对岗位特征、待出题的知识点内容进行出题。
|
||
|
||
## 岗位信息:
|
||
|
||
{position_info}
|
||
|
||
---
|
||
|
||
## 知识点:
|
||
|
||
{knowledge_points}"""
|
||
|
||
|
||
# ==================== 错题重出系统提示词 ====================
|
||
|
||
MISTAKE_REGEN_SYSTEM_PROMPT = """## 角色
|
||
你是一位经验丰富的考试出题专家,能够依据用户提供的错题记录,重新为用户出题。你会为每道错题重新出一题,你会以专业、严谨且清晰的方式出题。
|
||
|
||
## 输出单选题
|
||
1、每道题目只能有 1 个正确答案。
|
||
2、干扰项要具有合理性和迷惑性,且所有选项必须与主题相关。
|
||
3、答案解析要简明扼要,说明选择理由。
|
||
4、为每道题记录出题来源的知识点 id。
|
||
5、请以 JSON 格式输出。
|
||
6、为每道题输出一个序号。
|
||
|
||
### 输出结构:
|
||
{{
|
||
"num": "题号",
|
||
"type": "single_choice",
|
||
"topic": {{
|
||
"title": "清晰完整的题目描述",
|
||
"options": {{
|
||
"opt1": "A:符合语境的选项",
|
||
"opt2": "B:符合语境的选项",
|
||
"opt3": "C:符合语境的选项",
|
||
"opt4": "D:符合语境的选项"
|
||
}}
|
||
}},
|
||
"knowledge_point_id": "出题来源知识点的id",
|
||
"correct": "其中一个选项的全部原文",
|
||
"analysis": "准确的答案解析,包含选择原因和知识点说明"
|
||
}}
|
||
|
||
- 严格按照以上格式输出
|
||
|
||
|
||
## 特殊要求
|
||
1. 题目难度:{difficulty_level}级(5 级为最难)
|
||
2. 避免使用模棱两可的表述
|
||
3. 选项内容要互斥,不能有重叠
|
||
4. 每个选项长度尽量均衡
|
||
5. 正确答案(A、B、C、D)分布要合理,避免规律性
|
||
6. 正确答案必须使用其中一个选项中的全部原文,严禁修改
|
||
7. knowledge_point_id 必须是唯一的,即每道题的知识点来源只允许填一个 id。
|
||
|
||
## 输出格式要求
|
||
请直接输出一个纯净的 JSON 数组(Array),不要包含 Markdown 标记(如 ```json),也不要包含任何解释性文字。
|
||
|
||
请按以上要求生成题目,确保每道题目质量。"""
|
||
|
||
|
||
# ==================== 错题重出用户提示词 ====================
|
||
|
||
MISTAKE_REGEN_USER_PROMPT = """## 错题记录:
|
||
|
||
{mistake_records}"""
|
||
|
||
|
||
# ==================== JSON Schema ====================
|
||
|
||
QUESTION_SCHEMA = {
|
||
"type": "array",
|
||
"items": {
|
||
"type": "object",
|
||
"required": ["num", "type", "topic", "correct"],
|
||
"properties": {
|
||
"num": {
|
||
"oneOf": [
|
||
{"type": "integer"},
|
||
{"type": "string"}
|
||
],
|
||
"description": "题号"
|
||
},
|
||
"type": {
|
||
"type": "string",
|
||
"enum": ["single_choice", "multiple_choice", "true_false", "fill_blank", "essay"],
|
||
"description": "题目类型"
|
||
},
|
||
"topic": {
|
||
"type": "object",
|
||
"required": ["title"],
|
||
"properties": {
|
||
"title": {
|
||
"type": "string",
|
||
"description": "题目标题"
|
||
},
|
||
"options": {
|
||
"type": "object",
|
||
"description": "选项(选择题必填)"
|
||
}
|
||
}
|
||
},
|
||
"knowledge_point_id": {
|
||
"oneOf": [
|
||
{"type": "integer"},
|
||
{"type": "string"},
|
||
{"type": "null"}
|
||
],
|
||
"description": "知识点ID"
|
||
},
|
||
"correct": {
|
||
"oneOf": [
|
||
{"type": "string"},
|
||
{"type": "array", "items": {"type": "string"}}
|
||
],
|
||
"description": "正确答案(单选/判断/填空为字符串,多选为数组)"
|
||
},
|
||
"analysis": {
|
||
"type": "string",
|
||
"description": "答案解析"
|
||
}
|
||
}
|
||
},
|
||
"minItems": 1,
|
||
"maxItems": 50
|
||
}
|
||
|
||
|
||
# ==================== 题目类型常量 ====================
|
||
|
||
QUESTION_TYPES = {
|
||
"single_choice": "单选题",
|
||
"multiple_choice": "多选题",
|
||
"true_false": "判断题",
|
||
"fill_blank": "填空题",
|
||
"essay": "问答题",
|
||
}
|
||
|
||
# 默认题目数量配置
|
||
DEFAULT_QUESTION_COUNTS = {
|
||
"single_choice_count": 4,
|
||
"multiple_choice_count": 2,
|
||
"true_false_count": 1,
|
||
"fill_blank_count": 2,
|
||
"essay_count": 1,
|
||
}
|
||
|
||
DEFAULT_DIFFICULTY_LEVEL = 3
|
||
MAX_DIFFICULTY_LEVEL = 5
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|