4.8 KiB
4.8 KiB
1
GE
为了提高大语言模型(LLM,如GPT-4o, Claude 3.5 Sonnet等)识别数学题照片并输出Markdown的准确率,你需要设计一个结构化、约束性强且包含特定规则的提示词(Prompt)。
以下是一个经过优化的提示词模板,以及核心策略的解析。
🚀 高效提示词模板 (直接可用)
你可以直接复制下面的内容作为 System Prompt 或 User Message 的第一部分:
# Role
你是一个专业的数学排版专家和LaTeX/Markdown转换引擎。你的任务是将用户上传的数学题目图片,精准无误地转换为Markdown格式。
# Constraints & Rules (重要)
1. **精准还原**:必须逐字逐句识别,不要尝试解答题目,不要省略任何文字,也不要添加任何原图中不存在的解释或前言。
2. **LaTeX公式**:
- 所有的数学公式、变量、数字(包括单独的x, y, 1, 2等)必须使用 LaTeX 语法包裹。
- 行内公式用 `$ ... $` 包裹。
- 独立公式块用 `$$ ... $$` 包裹。
- 分数请使用 `\frac{a}{b}`,上标使用 `^`,下标使用 `_`。
3. **格式排版**:
- 保持原题的段落结构。
- 如果有选项(A, B, C, D),请按照列表格式排列。
- 遇到几何图形或函数图像,请在对应位置插入说明文字:`[此处是图片:描述图片内容]`。
4. **特殊符号处理**:
- 乘号请用 `\times` 或 `\cdot`,不要用字母 `x`。
- 根号请用 `\sqrt{}`。
- 积分、求和、极限等高级符号请使用标准的LaTeX命令。
5. **自我修正**:
- 如果图片模糊或有手写痕迹,请根据数学逻辑推断最可能的字符(例如,在几何题中,"∠A=90°"比"∠A=900"更合理)。
- 检查括号是否闭合,分数线是否完整。
# Output Format Example
(不要输出 ```markdown 标记,直接输出内容)
1. 已知函数 $f(x) = x^2 + 2x + 1$,则 $f(1)$ 的值为 ( )
A. $1$
B. $2$
C. $3$
D. $4$
# Your Task
请识别输入的图片内容,并输出Markdown源码。
💡 提升准确率的 5 个关键策略
如果你想进一步微调或理解为什么这么写,以下是核心原理:
1. 明确角色定位 (Persona)
- 错误写法:帮我看一下这个题。
- 正确写法:你是一个专业的数学排版专家,专门负责OCR识别。
- 原理:设定角色可以减少模型“试图解题”的幻觉,强制它专注于“识别”而非“思考答案”。
2. 强制 LaTeX 规范 (Explicit Syntax)
数学公式最容易出错的地方是混用纯文本和公式。
- 要求:明确要求所有的变量(哪怕是一个简单的 $x$)都必须用
$包裹。 - 好处:这样输出的结果放入 Markdown 编辑器(如 Obsidian, Typora)或网页渲染时,格式会非常漂亮,不会出现排版错乱。
3. 禁止“废话” (Zero-shot Chain of Thought)
模型很喜欢说“好的,这是你要的题目...”或者在最后加上“这道题选C”。
- 提示词:
不要解答、不要添加前言后语、直接输出Markdown源码。 - 好处:方便你直接复制粘贴,不需要二次清洗数据。
4. 利用上下文修正 (Logical Inference)
OCR 经常把 0 识别成 $O$,把 1 识别成 $l$。
- 提示词:
根据数学逻辑推断模糊字符。 - 例子:如果模型看到 $x^z + y^2 = 1$,它可能会识别错,但如果你告诉它这是勾股定理或圆方程,它会自动修正为 $x^2$。
5. 分步处理(针对复杂图片)
如果图片非常复杂(包含大量手写字、表格、图形),单纯的一个 Prompt 可能不够。你可以尝试 Few-Shot Prompting(少样本提示):
在提示词中给它一个例子:
用户:[输入一张简单的图片] 参考输出:
- 若
\triangle ABC为直角三角形,且 $\angle C = 90^\circ$,则...用户:[输入现在的图片] 请参照上面的格式进行识别。
🔧 如果LLM还是经常出错,怎么办?
- 预处理图片:在发给 LLM 之前,用手机自带的编辑功能把图片裁剪一下,只保留题目部分,去掉桌子背景、手指阴影,提高对比度。
- 更换模型:
- GPT-4o:目前数学OCR能力最强。
- Claude 3.5 Sonnet:在代码和格式化输出上非常精准,很少出错。
- Gemini 1.5 Pro:处理长上下文和多模态能力也很强。
- 分两步走:
- 第一步:让 LLM 描述图片中的所有数学元素。
- 第二步:让 LLM 根据刚才的描述写出 Markdown 代码。
你可以先试用上面的模板,如果发现哪类特定的符号容易错(比如矩阵、化学方程式),可以在 特殊符号处理 那一栏专门加一条规则。