Files
012-kaopeilian/backend/app/services/ai/prompts/exam_generator_prompts.py
111 442ac78b56
Some checks failed
continuous-integration/drone/push Build is failing
sync: 同步服务器最新代码 (2026-01-27)
更新内容:
- 后端 AI 服务优化(能力分析、知识点解析等)
- 前端考试和陪练界面更新
- 修复多个 prompt 和 JSON 解析问题
- 更新 Coze 语音客户端
2026-01-27 10:03:28 +08:00

309 lines
9.2 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""
试题生成器提示词模板
功能:根据岗位和知识点动态生成考试题目
"""
# ==================== 元数据 ====================
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