import type { FastifyRequest } from 'fastify' import { readData } from '../data/store.js' import { dataFiles } from '../data/files.js' import { ApiError } from '../errors.js' import type { Question } from '../schemas/entities.js' import type { z } from 'zod' import { AiExplainBodySchema } from '../schemas/api.js' /** * AI 讲解:返回结构化的讲解结果。 * TODO 任务11:组装题目上下文调用 OpenAI 兼容接口,超时或未配置 Token 时回退到题库解析。 * 当前固定返回题库解析回退结果,保证接口契约与前端可以先联调。 */ export async function explainQuestion(request: FastifyRequest) { const body = request.body as z.infer const questions = await readData(dataFiles.questions, []) const question = questions.find((q) => q.id === body.questionId) if (!question) throw ApiError.notFound('题目不存在') return { source: 'fallback' as const, summary: `AI 讲解尚未接入,已回退到题库标准解析(用户答案:${body.userAnswer})`, steps: [question.analysis], knowledgePoints: question.tags, commonMistakes: [], answer: question.answer } }