grade_homework
Grade student homework by analyzing images to automatically score answers and provide detailed feedback using AI-powered assessment.
Instructions
📝 智能批改学生作业图片,支持Base64和URL两种方式,自动识别题目并给出评分和解析
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| imageData | No | Base64编码的作业图片数据(支持PNG、JPG、JPEG格式),与imageUrl二选一 | |
| imageUrl | No | 作业图片的URL地址,与imageData二选一 |
Implementation Reference
- src/tools/gradingTools.ts:46-116 (handler)Primary execution logic for the 'grade_homework' tool: validates args, handles image input (Base64/URL download), calls grading service, formats MCP response with score, grade, and detailed feedback.async handleGradeHomework(args: any): Promise<any> { try { // 验证输入参数 - 支持Base64和URL const schema = z.union([ z.object({ imageData: z.string().min(1, '图片数据不能为空') }), z.object({ imageUrl: z.string().url('请输入有效的图片URL地址') }) ]); const validatedParams = schema.parse(args); // 获取图片数据 let imageData: string; if ('imageUrl' in validatedParams) { imageData = await downloadImageAsBase64(validatedParams.imageUrl); } else { const validation = validateBase64Image(validatedParams.imageData); if (!validation.isValid) { throw new Error(validation.error || '图片格式验证失败'); } imageData = validatedParams.imageData; } // 执行批改 const result = await this.gradingService.gradeHomework({ imageData: imageData, subject: '自动识别', studentName: '学生' }); // 构建统一格式的题目输出 const questionsOutput = result.results.map((r, i) => { const status = r.isCorrect ? '正确' : '错误'; const questionContent = r.questionContent || `第${i + 1}题`; return `题号:${i + 1} 题目:${questionContent} 答案:${r.studentAnswer} (${status}) 题目解析:${r.explanation}`; }).join('\n\n'); return { content: [ { type: 'text', text: `✅ 作业批改完成! 📊 批改结果: • 总分:${result.totalScore}/${result.maxTotalScore} • 等级:${result.grade} 📝 题目详情: ${questionsOutput} 💭 总体评价: ${result.overallFeedback}`, }, ], }; } catch (error) { return { content: [ { type: 'text', text: `❌ 作业批改失败:${error instanceof Error ? error.message : '未知错误'}`, }, ], isError: true, }; } }
- src/tools/gradingTools.ts:11-31 (registration)Tool registration object defining name 'grade_homework', description, and input schema (Base64 imageData or imageUrl).export const gradeHomeworkTool: Tool = { name: 'grade_homework', description: '📝 智能批改学生作业图片,支持Base64和URL两种方式,自动识别题目并给出评分和解析', inputSchema: { type: 'object', properties: { imageData: { type: 'string', description: 'Base64编码的作业图片数据(支持PNG、JPG、JPEG格式),与imageUrl二选一', }, imageUrl: { type: 'string', description: '作业图片的URL地址,与imageData二选一', }, }, oneOf: [ { required: ['imageData'] }, { required: ['imageUrl'] } ], }, };
- src/index.ts:45-50 (registration)MCP server registration: adds 'grade_homework' tool to the list returned by ListToolsRequest.this.server.setRequestHandler(ListToolsRequestSchema, async () => { logger.debug('收到工具列表请求'); return { tools: [gradeHomeworkTool], }; });
- src/index.ts:60-66 (registration)MCP server dispatch: routes 'grade_homework' calls to ToolHandler.handleGradeHomework.switch (name) { case 'grade_homework': return await this.toolHandler.handleGradeHomework(args); default: throw new Error(`未知的工具: ${name}`); }
- src/types.ts:55-70 (schema)Zod schema for GradeHomeworkParams used in validation and typing for the tool parameters, supporting imageData or imageUrl.export const GradeHomeworkParamsSchema = z.union([ z.object({ imageData: z.string().describe('Base64编码的作业图片'), subject: z.string().optional().default('自动识别').describe('作业科目'), studentName: z.string().optional().default('学生').describe('学生姓名'), questions: z.array(QuestionSchema).optional().describe('题目信息'), }), z.object({ imageUrl: z.string().url('请输入有效的图片URL地址').describe('作业图片的URL地址'), subject: z.string().optional().default('自动识别').describe('作业科目'), studentName: z.string().optional().default('学生').describe('学生姓名'), questions: z.array(QuestionSchema).optional().describe('题目信息'), }) ]); export type GradeHomeworkParams = z.infer<typeof GradeHomeworkParamsSchema>;