From 18ac42335227908cd3edd4e1ce63a98a5994d76b Mon Sep 17 00:00:00 2001 From: cc <94575594@qq.com> Date: Thu, 19 Mar 2026 21:04:00 +0800 Subject: [PATCH] =?UTF-8?q?chore:=20=E6=8F=90=E5=8F=96=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E9=A1=B9=E5=88=B0=E7=BB=9F=E4=B8=80=E9=85=8D=E7=BD=AE=E4=B8=AD?= =?UTF-8?q?=E5=BF=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/config/index.js | 41 ++++++++++++++++++++++++++++ src/views/EssayCorrection.vue | 25 ++++++++++------- src/views/ExamAnalysis.vue | 19 ++++++------- src/views/HomePage.vue | 3 ++- src/views/Pronunciation.vue | 21 +++++---------- src/views/Speaking.vue | 51 +++++++++++++---------------------- vite.config.js | 6 +++++ 7 files changed, 100 insertions(+), 66 deletions(-) create mode 100644 src/config/index.js diff --git a/src/config/index.js b/src/config/index.js new file mode 100644 index 0000000..e6cd28d --- /dev/null +++ b/src/config/index.js @@ -0,0 +1,41 @@ +// ============================================================ +// 全局配置中心 +// 所有 API 地址、密钥、模型名称等配置统一在此管理 +// ============================================================ + +// ── GRS AI(作文批改 / 试题分析)── +export const GRS_API_KEY = "sk-6ba4b57a0b034d9388f7a7a2d477d637"; + +// 作文批改接口 +export const ESSAY_API_URL = "https://grsai.dakka.com.cn/v1/draw/nano-banana"; +export const ESSAY_MODEL = "nano-banana-pro"; +export const ESSAY_PROMPT = "请对这篇英语作文进行批改,标注语法错误、拼写错误和表达不当之处,并给出修改建议,使用中文批注"; + +// 试题分析接口 +export const EXAM_API_URL = "https://grsaiapi.com/v1/chat/completions"; +export const EXAM_MODEL = "gemini-3.1-pro"; +export const EXAM_TEMPERATURE = 0.7; +export const EXAM_MAX_TOKENS = 2048; + +// ── 豆包 TTS(发音 / 口语对话)── +export const DOUBAO_APP_ID = "2542859186"; +export const DOUBAO_ACCESS_TOKEN = "a4h5fT3cVlBi82u93iEQlqT3c4MP6_8V"; +export const DOUBAO_RESOURCE_ID = "seed-tts-2.0"; +export const DOUBAO_TTS_API_PATH = "/tts-api/api/v3/tts/unidirectional"; +export const DOUBAO_AUDIO_FORMAT = "mp3"; +export const DOUBAO_SAMPLE_RATE = 24000; + +// ── 火山引擎 Ark 大模型(口语对话)── +export const ARK_API_KEY = ""; +export const ARK_MODEL = "doubao-pro-4k"; +export const ARK_API_PATH = "/ark-api/api/v3/chat/completions"; +export const ARK_MAX_TOKENS = 200; +export const ARK_HISTORY_LIMIT = 20; // 保留最近对话条数 + +// ── 外部链接 ── +export const LISTENING_AUDIO_URL = "https://jz5k88k7vv.coze.site"; // 听力音频生成 + +// ── 文件上传限制 ── +export const IMAGE_MAX_SIZE_MB = 10; +export const IMAGE_ALLOWED_TYPES_ESSAY = ["image/jpeg", "image/jpg", "image/png"]; +export const IMAGE_ALLOWED_TYPES_EXAM = ["image/jpeg", "image/jpg", "image/png", "image/webp"]; diff --git a/src/views/EssayCorrection.vue b/src/views/EssayCorrection.vue index 9e30533..9241079 100644 --- a/src/views/EssayCorrection.vue +++ b/src/views/EssayCorrection.vue @@ -2,11 +2,17 @@ import { ref } from "vue"; import { useRouter } from "vue-router"; import axios from "axios"; +import { + GRS_API_KEY, + ESSAY_API_URL, + ESSAY_PROMPT, + IMAGE_MAX_SIZE_MB, + IMAGE_ALLOWED_TYPES_ESSAY, +} from "@/config/index.js"; -const API_KEY = "sk-6ba4b57a0b034d9388f7a7a2d477d637"; -const API_URL = "https://grsai.dakka.com.cn/v1/draw/nano-banana"; -const PROMPT = - "请对这篇英语作文进行批改,标注语法错误、拼写错误和表达不当之处,并给出修改建议,使用中文批注"; +const API_KEY = GRS_API_KEY; +const API_URL = ESSAY_API_URL; +const PROMPT = ESSAY_PROMPT; const router = useRouter(); @@ -36,13 +42,13 @@ const readFileAsBase64 = (file) => const handleFile = async (file) => { if (!file) return; - const allowed = ["image/jpeg", "image/jpg", "image/png"]; + const allowed = IMAGE_ALLOWED_TYPES_ESSAY; if (!allowed.includes(file.type)) { errorMsg.value = "仅支持 JPG / PNG 格式的图片"; return; } - if (file.size > 10 * 1024 * 1024) { - errorMsg.value = "图片大小不能超过 10MB"; + if (file.size > IMAGE_MAX_SIZE_MB * 1024 * 1024) { + errorMsg.value = `图片大小不能超过 ${IMAGE_MAX_SIZE_MB}MB`; return; } errorMsg.value = ""; @@ -85,7 +91,7 @@ const startCorrection = async () => { imageSize: "1K", urls: [originalBase64.value], webHook: "", - shutProgress: true, + shutProgress: false, }, { headers: { @@ -107,7 +113,8 @@ const startCorrection = async () => { // 接口返回 SSE 格式文本,形如 "data: {...}\n\n",需去掉 "data: " 前缀再解析 let data; try { - const raw = typeof res.data === "string" ? res.data : JSON.stringify(res.data); + const raw = + typeof res.data === "string" ? res.data : JSON.stringify(res.data); const jsonStr = raw.replace(/^data:\s*/m, "").trim(); data = JSON.parse(jsonStr); } catch { diff --git a/src/views/ExamAnalysis.vue b/src/views/ExamAnalysis.vue index 91ed069..c2d6611 100644 --- a/src/views/ExamAnalysis.vue +++ b/src/views/ExamAnalysis.vue @@ -3,11 +3,12 @@ import { ref, computed, onUnmounted } from "vue"; import { useRouter } from "vue-router"; import axios from "axios"; +import { GRS_API_KEY, EXAM_API_URL, EXAM_MODEL, EXAM_TEMPERATURE, EXAM_MAX_TOKENS, IMAGE_MAX_SIZE_MB, IMAGE_ALLOWED_TYPES_EXAM } from "@/config/index.js"; + const router = useRouter(); -// ── API 配置(请替换为实际的 Gemini API Key 和地址)── -const API_KEY = "sk-6ba4b57a0b034d9388f7a7a2d477d637"; -const API_URL = "https://grsaiapi.com/v1/chat/completions"; +const API_KEY = GRS_API_KEY; +const API_URL = EXAM_API_URL; const SYSTEM_PROMPT = `你是一位专业的英语教师,请对以下英语试题进行深度解析。 请严格按照以下格式输出,每个部分用对应标题开头: @@ -117,13 +118,13 @@ const readFileAsBase64 = (file) => const handleFile = async (file) => { if (!file) return; - const allowed = ["image/jpeg", "image/jpg", "image/png", "image/webp"]; + const allowed = IMAGE_ALLOWED_TYPES_EXAM; if (!allowed.includes(file.type)) { errorMsg.value = "仅支持 JPG / PNG / WebP 格式的图片"; return; } - if (file.size > 10 * 1024 * 1024) { - errorMsg.value = "图片大小不能超过 10MB"; + if (file.size > IMAGE_MAX_SIZE_MB * 1024 * 1024) { + errorMsg.value = `图片大小不能超过 ${IMAGE_MAX_SIZE_MB}MB`; return; } errorMsg.value = ""; @@ -158,13 +159,13 @@ const buildRequestBody = (imageBase64 = null, mimeType = "image/jpeg") => { } return { - model: "gemini-3.1-pro", + model: EXAM_MODEL, messages: [ { role: "system", content: SYSTEM_PROMPT }, { role: "user", content: userContent }, ], - temperature: 0.7, - max_tokens: 2048, + temperature: EXAM_TEMPERATURE, + max_tokens: EXAM_MAX_TOKENS, stream: true, }; }; diff --git a/src/views/HomePage.vue b/src/views/HomePage.vue index 701ba9c..bd8ebd2 100644 --- a/src/views/HomePage.vue +++ b/src/views/HomePage.vue @@ -1,6 +1,7 @@