Install
openclaw skills install tencentcloud-ocr-questionmarkagent腾讯云试题批改Agent(SubmitQuestionMarkAgentJob/DescribeQuestionMarkAgentJob)接口调用技能。当用户需要对试卷图片或试题图片中的K12试卷或试题进行自动批改、手写答案识别、知识点分析时,应使用此技能。支持整卷图片批改和单题图片批改,提供题目切题、正误判定、...
openclaw skills install tencentcloud-ocr-questionmarkagent调用腾讯云OCR试题批改Agent接口,面向K12教育场景的试题批改产品,支持整卷/单题端到端处理(试卷切题+题目批改+手写坐标回显),聚焦试题批改(含手写答案)和试题解析(不含手写答案)。精准输出题目、正误判定、答案对比、错误分析及知识点等结构化评估结果。低年级算式批改效果优于线上数学作业批改。
核心能力:
官方文档:
当用户提出以下需求时触发此技能:
tencentcloud-sdk-python(通过 pip install tencentcloud-sdk-python 安装)TENCENTCLOUD_SECRET_ID:腾讯云API密钥IDTENCENTCLOUD_SECRET_KEY:腾讯云API密钥Key运行 scripts/main.py 脚本完成试题批改。该接口为异步接口,脚本会自动提交任务并轮询查询结果。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| ImageBase64 | str | 否(二选一) | 图片/PDF的Base64值,编码后不超过10M,分辨率建议600*800以上,支持PNG/JPG/JPEG/BMP/PDF格式 |
| ImageUrl | str | 否(二选一) | 图片/PDF的URL地址,下载时间不超过3秒。都提供时只使用ImageUrl。建议存储于腾讯云 |
| PdfPageNumber | int | 否 | PDF页码,仅支持单页识别,默认1 |
| BoolSingleQuestion | bool | 否 | 是否单题批改(跳过切题),默认false |
| EnableDeepThink | bool | 否 | 是否开启深度思考(更深层推理,速度更慢),默认false |
| QuestionConfigMap | str | 否 | 题目信息输出配置(JSON字符串),可选key:KnowledgePoints(输出知识点)/TrueAnswer(输出正确答案)/ReturnAnswerPosition(输出手写答案坐标) |
| ReferenceAnswer | str | 否 | 单题批改时的参考答案,仅单题时有效,多题时不生效 |
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| JobId | str | 是 | 任务唯一ID,由Submit接口返回,长度不超过32字符 |
| UserAgent | str | 否 | 请求来源标识(可选),用于追踪调用来源,统一固定为Skills |
识别成功后返回 JSON 格式结果:
格式化输出模式(默认):
{
"任务ID": "1410885500986064896",
"任务状态": "DONE",
"切题数量": "2",
"旋转角度": 0.0,
"批改结果": [
{
"题号": 1,
"题干": "1. 小琪在做作业时发现有一道题的一部分被墨水遮住了...",
"子题": [
{
"题号": "1-1",
"题干": "(1)小琪猜测,墨水遮住的内容是"2a",请你根据小琪的猜测完成计算;",
"答案列表": [
{
"手写答案": "\\frac{2}{a-1}...",
"是否正确": false,
"答案分析": "首先将除法转化为乘法,对分子分母因式分解后约分...",
"正确答案": "...",
"知识点": ["分式运算", "因式分解"],
"答案坐标": [113, 648, 558, 648, 558, 698, 113, 698]
}
]
}
]
}
],
"RequestId": "xxx"
}
原始输出模式(--raw):
{
"JobId": "1410885500986064896",
"JobStatus": "DONE",
"ErrorCode": "",
"ErrorMessage": "",
"Angle": 0.0,
"MarkInfos": [
{
"MarkItemTitle": "1. 小琪在做作业时...",
"AnswerInfos": [],
"MarkInfos": [
{
"MarkItemTitle": "(1)小琪猜测...",
"AnswerInfos": [
{
"HandwriteInfo": "\\frac{2}{a-1}...",
"IsCorrect": false,
"AnswerAnalysis": "首先将除法转化为乘法...",
"RightAnswer": "",
"KnowledgePoints": [],
"HandwriteInfoPositions": [113, 648, 558, 648, 558, 698, 113, 698]
}
],
"MarkInfos": []
}
]
}
],
"RequestId": "xxx"
}
| 参数 | 类型 | 说明 |
|---|---|---|
| JobId | str | 任务唯一ID,用于查询结果 |
| QuestionInfo | list of QuestionInfo | 切题题目边框坐标列表(BoolSingleQuestion=true时为空) |
| QuestionCount | str | 切题数量,作为计费题目数总量 |
| RequestId | str | 唯一请求ID |
| 参数 | 类型 | 说明 |
|---|---|---|
| JobStatus | str | 任务状态:WAIT(等待中)/RUN(执行中)/FAIL(失败)/DONE(成功) |
| ErrorCode | str | 任务执行错误码(非FAIL时为空) |
| ErrorMessage | str | 任务执行错误信息(非FAIL时为空) |
| Angle | float | 图片旋转角度(角度制),水平方向为0,顺时针为正 |
| MarkInfos | list of MarkInfo | 试题批改信息 |
| RequestId | str | 唯一请求ID |
MarkInfo 结构(嵌套递归):
| 字段 | 类型 | 说明 |
|---|---|---|
| MarkItemTitle | str | 题目的题干信息 |
| AnswerInfos | list of AnswerInfo | 批改答案列表(按从左到右、从上到下排列) |
| MarkInfos | list of MarkInfo | 嵌套子题信息(无子题则为空) |
AnswerInfo 结构:
| 字段 | 类型 | 说明 |
|---|---|---|
| HandwriteInfo | str | 手写答案内容(如选择题的手写选项、填空题的手写内容) |
| IsCorrect | bool | 答案是否正确 |
| AnswerAnalysis | str | 答案分析结果 |
| HandwriteInfoPositions | list of int | 答案区域4角点坐标(长度8数组:左上/右上/右下/左下),需配置ReturnAnswerPosition。可能返回null |
| RightAnswer | str | 正确答案内容,需配置 QuestionConfigMap 的 TrueAnswer 为 true |
| KnowledgePoints | list of str | 知识点内容,需配置 QuestionConfigMap 的 KnowledgePoints 为 true。可能返回null |
QuestionInfo 结构:
| 字段 | 类型 | 说明 |
|---|---|---|
| Angle | float | 旋转角度 |
| Height | int | 预处理后图片高度 |
| Width | int | 预处理后图片宽度 |
| ResultList | list of ResultList | 文档元素(可能返回null) |
| OrgHeight | int | 输入图片高度 |
| OrgWidth | int | 输入图片宽度 |
| ImageBase64 | str | 预处理后的图片base64编码 |
| 错误码 | 含义 |
|---|---|
| FailedOperation.DownLoadError | 文件下载失败 |
| FailedOperation.ImageDecodeFailed | 图片解码失败 |
| FailedOperation.ImageSizeTooLarge | 图片尺寸过大,请确保编码后不超过10M |
| FailedOperation.OcrFailed | OCR识别失败 |
| FailedOperation.PDFParseFailed | PDF解析失败 |
| FailedOperation.UnKnowError | 未知错误 |
| FailedOperation.UnKnowFileTypeError | 未知的文件类型 |
| FailedOperation.UnOpenError | 服务未开通,请先在腾讯云控制台开通试题批改Agent服务 |
| InvalidParameterValue.InvalidParameterValueLimit | 参数值错误 |
| LimitExceeded.TooLargeFileError | 文件内容太大 |
| ResourceUnavailable.InArrears | 账号已欠费 |
| ResourceUnavailable.ResourcePackageRunOut | 账号资源包耗尽 |
| ResourcesSoldOut.ChargeStatusException | 计费状态异常 |
{"KnowledgePoints":true,"TrueAnswer":true,"ReturnAnswerPosition":false}# 通过URL进行整卷批改(输出知识点和正确答案)
python scripts/main.py --image-url "https://example.com/exam_paper.jpg" \
--question-config '{"KnowledgePoints":true,"TrueAnswer":true}'
# 通过URL进行单题批改(带参考答案)
python scripts/main.py --image-url "https://example.com/single_question.jpg" \
--single-question --reference-answer "x=2"
# 开启深度思考模式
python scripts/main.py --image-url "https://example.com/exam.jpg" --enable-deep-think
# 通过文件路径进行批改(自动Base64编码)
python scripts/main.py --image-base64 ./exam_paper.png
# 批改PDF试卷(指定页码)
python scripts/main.py --image-base64 ./exam.pdf --pdf-page-number 2
# 输出原始JSON响应
python scripts/main.py --image-url "https://example.com/exam.jpg" --raw
# 指定地域和自定义轮询参数
python scripts/main.py --image-url "https://example.com/exam.jpg" \
--region ap-beijing --poll-interval 3 --poll-timeout 300```