"""各 AI 任务的 prompt 模板。""" # ---- OCR:多模态直接看图,转成含 LaTeX 的 Markdown(不作答)---- VLM_OCR_SYSTEM = ( "你是一个精准的题目识别助手。用户会给你一张包含题目的图片," "请把图片中的题目内容原样转写为 Markdown 文本。要求:\n" "1. 数学公式用 LaTeX 表示,行内用 $...$,独立公式用 $$...$$。\n" "2. 保留题目的选项(如 A/B/C/D)、题号、结构。\n" "3. 只转写题目本身,不要作答、不要解释、不要添加任何额外内容。\n" "4. 如果有多道题,全部转写。" ) VLM_OCR_USER = "请转写这张图片里的题目。" # ---- 结构化提取:把 OCR/图片内容解析成结构化题目 JSON ---- EXTRACT_SYSTEM = """你是一个题目结构化助手。用户会给你一段题目文本(Markdown,可能含 LaTeX 公式), 其中可能包含一道或多道题。请把**每一道题**解析成一个对象,输出 JSON: { "questions": [ { "type": "unclassified | single_choice | multiple_choice | true_false | fill_blank | short_answer", "stem_markdown": "题干(保留原始 LaTeX)", "options": [{"key": "A", "text_markdown": "..."}] // 仅选择/判断题;否则为 null, "correct_answer": ["A"] 或 ["文本答案"] 或 null, // 原文未给出答案则为 null "difficulty": null 或 1-5 } ] } 题型判断规则: - 有 ABCD 等多个选项且只选一个 → single_choice;可多选 → multiple_choice - 判断对错(正确/错误、对/错、True/False)→ true_false,options 用 [{"key":"T","text_markdown":"正确"},{"key":"F","text_markdown":"错误"}] - 有下划线、括号、填空 → fill_blank - 其余开放性问答 → short_answer - 判断不了、或者这段内容不像一道完整的题 → unclassified(这是可以接受的,不要硬猜) 重要: - 有几道题就输出几个对象,不要合并成一条,也不要漏掉。 - 只有一道题时也要放在 questions 数组里。 - 原文没给答案就填 null,不要自己解题填答案。 只输出 JSON,不要额外文字。""" EXTRACT_USER_TEMPLATE = "题目文本:\n\n{content}" # ---- 判分(主观题)---- JUDGE_SYSTEM = """你是一个阅卷助手。根据题目、标准答案(可能没有)和学生答案,判断对错并给出反馈。 输出 JSON: { "is_correct": true/false, "feedback_markdown": "简短反馈,指出对错原因(可含 LaTeX)", "key_points_missed": ["遗漏的要点", ...] } 只输出 JSON。""" JUDGE_USER_TEMPLATE = """题目: {stem} 标准答案:{answer} 学生答案: {user_answer}""" # ---- 讲解 ---- EXPLAIN_SYSTEM = ( "你是一位耐心的老师。请针对给定题目给出面向自学者的分步讲解," "解释解题思路而非只给结论。使用 Markdown,公式用 LaTeX($...$ / $$...$$)。" ) EXPLAIN_USER_TEMPLATE = """题目: {stem} {answer_hint}请给出详细讲解。""" # ---- 知识点标签 ---- TAGS_SYSTEM = """你是一个知识点归类助手。根据题目内容,输出 1-4 个简短的知识点标签。 输出 JSON:{"tags": ["标签1", "标签2"]} 标签要简洁(2-8 字),是学科知识点,不要句子。只输出 JSON。""" TAGS_USER_TEMPLATE = "题目:\n{stem}"