feat: 添加题目变式生成功能

This commit is contained in:
cc 2026-03-26 11:26:11 +08:00
parent 1d11050178
commit 9204349041
4 changed files with 1518 additions and 0 deletions

View File

@ -106,6 +106,69 @@ D. [选项D内容]
9. 解析清晰易懂有助于学生理解
10. 知识点标注准确便于分类学习`;
// ── 题目变式生成接口(使用 Gemini-3.1-pro──
export const VARIANT_API_URL = "https://grsaiapi.com/v1/chat/completions";
export const VARIANT_MODEL = "gemini-3.1-pro";
export const VARIANT_TEMPERATURE = 0.8;
export const VARIANT_MAX_TOKENS = 4096;
// 题目变式生成 System Prompt
export const QUESTION_VARIANT_PROMPT = `你是一位专业的英语试题出题专家。请对用户提供的原始试题进行深度分析,然后生成指定数量的变式题目。
最高优先级 - 必须严格遵守
用户会在请求中明确指定需要生成的变式题数量生成 3 道变式题你必须完整输出该数量的变式题目缺一不可如果用户要求 3 就必须输出 3 道变式题如果用户要求 5 就必须输出 5 道变式题这是最重要的规则违反此规则将导致任务失败
## 第一步分析原题
请先分析原题的以下要素
- 题型单项选择完形填空阅读理解翻译写作等
- 考查知识点语法点词汇句型等
- 难度等级容易/较易/适中/较难/困难
- 题目结构和特点
## 第二步生成变式题
根据分析结果生成用户指定数量的变式题目要求
1. 保持与原题相同的题型
2. 可适当调整难度但需标注新的难度等级
3. 考查相同或相关的知识点
4. 题目形式和风格与原题保持一致
## 输出格式
首先输出原题分析
### 原题分析
**题型**[题型]
**考查知识点**[知识点]
**难度等级**[难度]
**题目特点**[简要描述]
然后必须按用户指定数量输出变式题格式如下
### 变式题 1
**题目类型**[类型]
**难度等级**[难度]
**题目内容**
[题目文本如有选项按A/B/C/D格式列出]
**正确答案**[答案]
**详细解析**[解析内容说明解题思路和关键点]
**考查知识点**[知识点]
### 变式题 2
...同上格式
### 变式题 3
...同上格式
以此类推直到输出完用户指定数量的所有变式题
重要规则
1. 最高优先级必须严格按照用户指定的数量生成变式题不能多也不能少
2. 每道变式题都必须是完整的可独立使用的题目
3. 选项类题目必须提供4个选项ABCD
4. 答案必须准确无误
5. 解析要详细清晰帮助学生理解
6. 难度等级从容易较易适中较难困难 中选择
7. 每道变式题必须以"### 变式题 [序号]"开头序号连续递增`;
// ── 文件上传限制 ──
export const IMAGE_MAX_SIZE_MB = 10;
export const IMAGE_ALLOWED_TYPES_ESSAY = ["image/jpeg", "image/jpg", "image/png"];

View File

@ -7,6 +7,7 @@ import ExamAnalysis from '../views/ExamAnalysis.vue'
import SpellPractice from '../views/SpellPractice.vue'
import ProblemSolving from '../views/ProblemSolving.vue'
import QuestionGenerator from '../views/QuestionGenerator.vue'
import QuestionVariant from '../views/QuestionVariant.vue'
const router = createRouter({
history: createWebHistory(import.meta.env.BASE_URL),
@ -51,6 +52,11 @@ const router = createRouter({
name: 'question-generator',
component: QuestionGenerator
},
{
path: '/question-variant',
name: 'question-variant',
component: QuestionVariant
},
]
})

View File

@ -69,6 +69,14 @@ const features = ref([
icon: "document",
route: "/question-generator",
},
{
id: 9,
title: "题目变式生成",
desc: "输入原始试题AI 深度分析后生成同类变式题,保持题型不变,可调整难度,快速扩展题库,提升出题效率。",
class: "card-9",
icon: "variant",
route: "/question-variant",
},
]);
// Hover effect for glassmorphism glare
@ -266,6 +274,22 @@ onUnmounted(() => {
d="M19.5 14.25v-2.625a3.375 3.375 0 0 0-3.375-3.375h-1.5A1.125 1.125 0 0 1 13.5 7.125v-1.5a3.375 3.375 0 0 0-3.375-3.375H8.25m0 12.75h7.5m-7.5 3H12M10.5 2.25H5.625c-.621 0-1.125.504-1.125 1.125v17.25c0 .621.504 1.125 1.125 1.125h12.75c.621 0 1.125-.504 1.125-1.125V11.25a9 9 0 0 0-9-9Z"
/>
</svg>
<!-- Variant Icon (Copy/Clone) -->
<svg
v-else-if="feature.icon === 'variant'"
xmlns="http://www.w3.org/2000/svg"
fill="none"
viewBox="0 0 24 24"
stroke-width="1.5"
stroke="currentColor"
>
<path
stroke-linecap="round"
stroke-linejoin="round"
d="M15.75 17.25v3.375c0 .621-.504 1.125-1.125 1.125h-9.75a1.125 1.125 0 0 1-1.125-1.125V7.875c0-.621.504-1.125 1.125-1.125H6.75a9.06 9.06 0 0 1 1.5.124m7.5 10.376h3.375c.621 0 1.125-.504 1.125-1.125V11.25c0-4.46-3.243-8.161-7.5-8.876v9.004c0 .621-.504 1.125-1.125 1.125h-3.75c-.621 0-1.125.504-1.125 1.125v3.876c0 .621.504 1.125 1.125 1.125h3.75c.621 0 1.125-.504 1.125-1.125Z"
/>
</svg>
</div>
<h2 class="card-title">{{ feature.title }}</h2>
</div>
@ -448,6 +472,11 @@ h1 {
box-shadow: 0 8px 20px -6px rgba(16, 185, 129, 0.5);
}
.card-9 .icon-wrapper {
background: linear-gradient(135deg, #6366f1, #8b5cf6);
box-shadow: 0 8px 20px -6px rgba(99, 102, 241, 0.5);
}
.card-title {
font-size: 1.5rem;
font-weight: 600;

File diff suppressed because it is too large Load Diff