Files
item_bank/app/services/llm/prompts.py
T
2026-08-01 16:50:55 +08:00

76 lines
3.3 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.
"""各 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_falseoptions 用 [{"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}"