作业帮式错题标注:OCR 定位错误红框 + 解题思路。
- PaddleOCR 行级坐标 + AI 识别错答区域,生成标注图 - 解法拆分为「解题思路」与「详细解答」 - 详情页标注图/原图切换,列表显示标注缩略图
This commit is contained in:
+48
-14
@@ -1,5 +1,3 @@
|
||||
import enum
|
||||
|
||||
import httpx
|
||||
from sqlalchemy.orm import Session
|
||||
|
||||
@@ -36,7 +34,7 @@ OCR 原文:
|
||||
{ocr_text}
|
||||
"""
|
||||
|
||||
SOLUTION_PROMPT = """你是一位耐心的{stage}{subject}老师。请为以下题目给出详细解法。
|
||||
SOLUTION_PROMPT = """你是一位耐心的{stage}{subject}老师。请像「作业帮」一样,先讲清楚解题思路,再给出完整解答。
|
||||
|
||||
【学段要求 — 严禁超纲】
|
||||
{curriculum}
|
||||
@@ -44,14 +42,31 @@ SOLUTION_PROMPT = """你是一位耐心的{stage}{subject}老师。请为以下
|
||||
题目:
|
||||
{question_text}
|
||||
|
||||
请按以下结构输出:
|
||||
1. 考点分析({stage}范围内)
|
||||
2. 解题步骤(逐步推导,每步说明依据)
|
||||
3. 易错点提醒
|
||||
4. 若必须使用超纲方法才能解,请改用{stage}可理解的方法重新解答,不得输出超纲解法。
|
||||
请严格按以下 Markdown 结构输出:
|
||||
|
||||
## 解题思路
|
||||
(2-5 句话:这题考什么、从哪里入手、关键一步是什么,让学生先懂「怎么想」)
|
||||
|
||||
## 详细解答
|
||||
(分步骤完整推导,每步说明依据)
|
||||
|
||||
## 易错点
|
||||
(指出常见错误及正确做法)
|
||||
|
||||
严禁使用超纲方法;若原题超纲,请给出{stage}课内可理解的解法。
|
||||
"""
|
||||
|
||||
OLYMPIAD_SOLUTION_PROMPT = """你是一位{stage}奥数教练。请为以下奥数题给出详细解题思路与完整解答。
|
||||
ERROR_DETECT_PROMPT = """你是{stage}{subject}老师。以下是试卷/作业 OCR 识别结果,每行前有编号。
|
||||
请找出「学生答错的部分」:错误答案、被打叉的作答、明显不正确的计算结果等。
|
||||
|
||||
{numbered_lines}
|
||||
|
||||
只输出 JSON,不要其他文字:
|
||||
{{"wrong_line_ids": [行编号整数列表]}}
|
||||
若整张图就是一道错题,请标注含有错误答案或作答的行;找不到则标注最后作答行。
|
||||
"""
|
||||
|
||||
OLYMPIAD_SOLUTION_PROMPT = """你是一位{stage}奥数教练。请像优秀辅导老师一样,先讲解题思路,再完整解答。
|
||||
|
||||
【奥数学段要求 — 严禁超纲】
|
||||
{curriculum}
|
||||
@@ -59,11 +74,18 @@ OLYMPIAD_SOLUTION_PROMPT = """你是一位{stage}奥数教练。请为以下奥
|
||||
题目:
|
||||
{question_text}
|
||||
|
||||
请按以下结构输出:
|
||||
1. 题型与思路切入点({stage}奥数常见技巧)
|
||||
2. 详细解答步骤
|
||||
3. 关键技巧总结(仅限{stage}奥数范围)
|
||||
4. 严禁使用超出上述范围的方法;若题目过难,给出{stage}可接受的培优思路。
|
||||
请严格按以下 Markdown 结构输出:
|
||||
|
||||
## 解题思路
|
||||
(点明题型、突破口、{stage}奥数常用技巧)
|
||||
|
||||
## 详细解答
|
||||
(完整步骤)
|
||||
|
||||
## 关键技巧
|
||||
(总结,仅限{stage}奥数范围)
|
||||
|
||||
严禁超纲;过难题给出{stage}可接受的培优思路。
|
||||
"""
|
||||
|
||||
|
||||
@@ -167,3 +189,15 @@ async def generate_solution(
|
||||
question_text=question_text,
|
||||
)
|
||||
return await generate_text(prompt, cfg)
|
||||
|
||||
|
||||
async def detect_wrong_line_ids(
|
||||
cfg: AIConfig,
|
||||
subject: str,
|
||||
ocr_lines: list[dict],
|
||||
school_level=None,
|
||||
) -> str:
|
||||
stage = school_level_label(school_level)
|
||||
numbered = "\n".join(f"[{i}] {line.get('text', '')}" for i, line in enumerate(ocr_lines))
|
||||
prompt = ERROR_DETECT_PROMPT.format(stage=stage, subject=subject, numbered_lines=numbered)
|
||||
return await generate_text(prompt, cfg)
|
||||
|
||||
Reference in New Issue
Block a user