feat: 添加题目变式生成功能
This commit is contained in:
parent
1d11050178
commit
9204349041
|
|
@ -106,6 +106,69 @@ D. [选项D内容]
|
||||||
9. 解析清晰易懂,有助于学生理解
|
9. 解析清晰易懂,有助于学生理解
|
||||||
10. 知识点标注准确,便于分类学习`;
|
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个选项(A、B、C、D)
|
||||||
|
4. 答案必须准确无误
|
||||||
|
5. 解析要详细清晰,帮助学生理解
|
||||||
|
6. 难度等级从:容易、较易、适中、较难、困难 中选择
|
||||||
|
7. 每道变式题必须以"### 变式题 [序号]"开头,序号连续递增`;
|
||||||
|
|
||||||
// ── 文件上传限制 ──
|
// ── 文件上传限制 ──
|
||||||
export const IMAGE_MAX_SIZE_MB = 10;
|
export const IMAGE_MAX_SIZE_MB = 10;
|
||||||
export const IMAGE_ALLOWED_TYPES_ESSAY = ["image/jpeg", "image/jpg", "image/png"];
|
export const IMAGE_ALLOWED_TYPES_ESSAY = ["image/jpeg", "image/jpg", "image/png"];
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,7 @@ import ExamAnalysis from '../views/ExamAnalysis.vue'
|
||||||
import SpellPractice from '../views/SpellPractice.vue'
|
import SpellPractice from '../views/SpellPractice.vue'
|
||||||
import ProblemSolving from '../views/ProblemSolving.vue'
|
import ProblemSolving from '../views/ProblemSolving.vue'
|
||||||
import QuestionGenerator from '../views/QuestionGenerator.vue'
|
import QuestionGenerator from '../views/QuestionGenerator.vue'
|
||||||
|
import QuestionVariant from '../views/QuestionVariant.vue'
|
||||||
|
|
||||||
const router = createRouter({
|
const router = createRouter({
|
||||||
history: createWebHistory(import.meta.env.BASE_URL),
|
history: createWebHistory(import.meta.env.BASE_URL),
|
||||||
|
|
@ -51,6 +52,11 @@ const router = createRouter({
|
||||||
name: 'question-generator',
|
name: 'question-generator',
|
||||||
component: QuestionGenerator
|
component: QuestionGenerator
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
path: '/question-variant',
|
||||||
|
name: 'question-variant',
|
||||||
|
component: QuestionVariant
|
||||||
|
},
|
||||||
]
|
]
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -69,6 +69,14 @@ const features = ref([
|
||||||
icon: "document",
|
icon: "document",
|
||||||
route: "/question-generator",
|
route: "/question-generator",
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
id: 9,
|
||||||
|
title: "题目变式生成",
|
||||||
|
desc: "输入原始试题,AI 深度分析后生成同类变式题,保持题型不变,可调整难度,快速扩展题库,提升出题效率。",
|
||||||
|
class: "card-9",
|
||||||
|
icon: "variant",
|
||||||
|
route: "/question-variant",
|
||||||
|
},
|
||||||
]);
|
]);
|
||||||
|
|
||||||
// Hover effect for glassmorphism glare
|
// 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"
|
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>
|
</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>
|
</div>
|
||||||
<h2 class="card-title">{{ feature.title }}</h2>
|
<h2 class="card-title">{{ feature.title }}</h2>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -448,6 +472,11 @@ h1 {
|
||||||
box-shadow: 0 8px 20px -6px rgba(16, 185, 129, 0.5);
|
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 {
|
.card-title {
|
||||||
font-size: 1.5rem;
|
font-size: 1.5rem;
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
|
|
|
||||||
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue