# 技术方案:删除「直接生成测试版」+ 新增「豆包lite-大纲 / 豆包lite-总结」 ## 一、目标 1. **删除**「直接生成测试版」相关前后端代码。 2. **新增**两个选项:「直接测试-豆包lite-大纲」「直接测试-豆包lite-总结」,前后端全支持。 3. **收尾**:推 Git,阿里云部署。 --- ## 二、现状梳理 | 层级 | 直接生成测试版 (direct_test) | 直接测试-豆包lite (direct_test_lite) | |------|------------------------------|--------------------------------------| | **后端** | `direct_generation_test` Prompt 类型;`validPersonas` 含 `direct_test`;生成时 `persona === 'direct_test'` 用该 Prompt、默认模型 | 同用 `direct_generation_test` Prompt;`persona === 'direct_test_lite'` 用 `DOUBAO_MODEL_LITE` | | **前端 iOS** | `PersonaType.directTest`;PersonaSelectionView 里一张卡片 | `PersonaType.directTestLite`;PersonaSelectionView 里一张卡片 | | **管理后台** | course-admin 里「直接生成测试版 Prompt」配置项 | 无单独配置(与 direct_test 共用 Prompt) | - 数据库:`course_generation_tasks.persona` 为 String,无枚举约束,**加删 persona 值不需要 DB 迁移**。 - 当前直接生成流程:一次调用得到 `chaptered_content`(大纲+节解释),再 `contentService.generateAllContent` 填内容;没有单独的「只生成大纲」或「只生成总结」接口,新选项在现有流程上通过 **persona + 可选不同 Prompt** 区分即可。 --- ## 三、方案一:删除「直接生成测试版」+ 新增两个 lite 选项(推荐) ### 3.1 删除「直接生成测试版」 **后端** - **promptConfigService.ts** - `PromptType` 去掉 `'direct_generation_test'`。 - 删除 `DIRECT_GENERATION_TEST`、默认 `direct_generation_test` 的 default prompt、`getPromptKey`/`getDefaultPrompt`/`getPromptTemplate` 中对该类型的处理。 - **courseGenerationService.ts** - 删除对 `persona === 'direct_test'` 的分支;只保留对 `direct_test_lite*` 的判断(见下)。 - 原「直接生成测试版」与「直接测试-豆包lite」共用的逻辑改为:仅当 persona 为 `direct_test_lite` / `direct_test_lite_outline` / `direct_test_lite_summary` 时使用「测试用 Prompt」+ 豆包 Lite 模型(见下)。 - **validation.ts** - `validPersonas` 去掉 `'direct_test'`,加入 `'direct_test_lite_outline'`、`'direct_test_lite_summary'`(若保留原有 `direct_test_lite` 则也保留)。 - **promptController.ts** - 类型与 PROMPT_TYPE_MAP 等中去掉 `direct_generation_test`;若保留一个「lite 用」的 Prompt,可重命名为例如 `direct_generation_lite` 或保留一名给 lite 共用(见下)。 - **course-admin.html** - Prompt 配置列表去掉「直接生成测试版 Prompt」;若新增「豆包lite-大纲/总结」专用 Prompt,则在列表中增加对应项并改说明文案。 **iOS** - **AICourseModels.swift** - 删除 `case directTest = "direct_test"`。 - **PersonaSelectionView.swift** - 删除「直接生成测试版」那张 `CleanPersonaCard`,只保留/新增「直接测试-豆包lite」「直接测试-豆包lite-大纲」「直接测试-豆包lite-总结」等(见下)。 ### 3.2 新增「直接测试-豆包lite-大纲」「直接测试-豆包lite-总结」 **选项 A:最小实现(推荐先做)** - 两个新选项仅作「人格/入口」区分,**共用同一套 Prompt 和同一豆包 Lite 模型**,便于先上线、后补差异化 Prompt。 - 后端: - `validPersonas` 增加:`direct_test_lite_outline`、`direct_test_lite_summary`。 - `courseGenerationService`: - 模型:`persona === 'direct_test_lite' || persona === 'direct_test_lite_outline' || persona === 'direct_test_lite_summary'` → 使用 `DOUBAO_MODEL_LITE`。 - Prompt:上述 persona 均使用同一个「lite 用」Prompt(例如保留并重命名原 `direct_generation_test` 为 `direct_generation_lite`,或新键 `direct_generation_lite`,仅一份模板)。 - 管理后台:保留/改为一个「直接生成 Lite Prompt」(或「豆包 Lite 测试用 Prompt」),供三个 lite 选项共用。 - iOS: - `PersonaType` 增加:`directTestLiteOutline`、`directTestLiteSummary`(保留或删除 `directTestLite` 按产品决定)。 - PersonaSelectionView 在「直接生成」流程下展示两张新卡片:「直接测试-豆包lite-大纲」「直接测试-豆包lite-总结」(若保留「直接测试-豆包lite」则三张)。 - 后续若需要「大纲」和「总结」在生成效果上真正区分,再为这两个 persona 各配不同 Prompt(见选项 B)。 **选项 B:大纲/总结用不同 Prompt(可选、后续迭代)** - 后端新增两个 Prompt 类型,例如:`direct_generation_lite_outline`、`direct_generation_lite_summary`。 - `promptConfigService`、`promptController`、course-admin 中增加这两种类型的配置与编辑。 - `courseGenerationService` 中按 persona 选择 Prompt: - `direct_test_lite_outline` → `direct_generation_lite_outline` - `direct_test_lite_summary` → `direct_generation_lite_summary` - (若仍保留 `direct_test_lite`)→ 共用 `direct_generation_lite` 或其一。 - 模型仍为豆包 Lite,仅 Prompt 不同。iOS 无需改接口,只传不同 persona。 ### 3.3 建议实施顺序 1. **后端**:删除 `direct_test` 与 `direct_generation_test` 全部引用;`validPersonas` 改为只含 `direct_test_lite`、`direct_test_lite_outline`、`direct_test_lite_summary`(或按产品二选一:只保留后两个)。 2. **后端**:为 lite 统一使用一个 Prompt 类型(如 `direct_generation_lite`),courseGenerationService 与 promptController 只认这一种;管理后台只保留一个 Lite 用 Prompt 配置。 3. **iOS**:删除 `directTest`,新增 `directTestLiteOutline` / `directTestLiteSummary`,PersonaSelectionView 只展示两个新卡片(或加「直接测试-豆包lite」共三个)。 4. **联调**:创建课程选「豆包lite-大纲」「豆包lite-总结」各跑通一次,确认进度与结果正常。 5. **管理后台**:文案与列表项与上述一致(删除直接生成测试版、保留/新增 Lite 用 Prompt)。 --- ## 四、Git 与阿里云部署 - **Git** - 在功能分支完成上述改动,自测通过后合并到主分支(如 `main`)。 - 提交信息建议包含:`feat: 移除直接生成测试版,新增豆包lite-大纲/总结选项`。 - **阿里云部署** - 当前脚本:`backend/deploy/deploy-from-github.sh`(从 GitHub 拉取后 build + pm2 restart)。 - 步骤: `ssh root@<阿里云主机>` → `cd /var/www/wildgrowth-backend/backend` → `bash deploy/deploy-from-github.sh [分支名]`。 - 若 pull 超时,可使用 `deploy-rsync-from-local.sh` 从本机 rsync 代码再在服务器上 build 并重启。 - 部署后验证:管理后台能打开、Prompt 配置正常;iOS 选「豆包lite-大纲」或「豆包lite-总结」创建课程,任务能正常跑完并在列表中可见。 --- ## 五、风险与注意点 - **历史任务**:已有 `persona = 'direct_test'` 或 `'direct_generation_test'` 的旧任务仅作历史数据,新逻辑不再处理;若管理后台有按 persona 展示,需把「直接生成测试版」改为已废弃或隐藏。 - **AppConfig 表**:若曾把 `direct_generation_test_prompt` 存进配置,删除类型后对应 key 可保留不删,避免误删其它配置;或单独清理脚本只删该 key。 - **iOS 与后端 persona 枚举**:两边需完全一致(`direct_test_lite_outline` / `direct_test_lite_summary` 等),否则接口会报 persona 校验失败。 --- ## 六、小结 | 步骤 | 内容 | |------|------| | 1 | 后端删除 `direct_test`、`direct_generation_test`;validPersonas 与生成逻辑只保留 lite 系 persona | | 2 | 后端为 lite 统一一个 Prompt 类型(如 `direct_generation_lite`),并支持 `direct_test_lite_outline`、`direct_test_lite_summary` | | 3 | iOS 删除 directTest,新增 directTestLiteOutline、directTestLiteSummary,选择页只展示新选项 | | 4 | 管理后台 Prompt 列表与说明文案同步 | | 5 | 推 Git,阿里云执行 deploy-from-github.sh(或 rsync 后 build + 重启) | --- ## 七、已实施(本期) - 已删除「直接生成测试版」(direct_test) 及 `direct_generation_test` Prompt 类型。 - 已保留「直接测试-豆包lite」(direct_test_lite),并新增「直接测试-豆包lite-大纲」(direct_test_lite_outline)、「直接测试-豆包lite-总结」(direct_test_lite_summary)。 - 后端:三个 lite 选项分别使用 `direct_generation_lite`、`direct_generation_lite_outline`、`direct_generation_lite_summary` 三个 Prompt 类型,管理后台可分别配置;均使用豆包 Lite 模型,调用流程与原先直接测试-豆包lite 一致。 - iOS:PersonaSelectionView 在直接生成流程下展示三张卡片;AICourseModels 已移除 directTest,保留 directTestLite,新增 directTestLiteOutline、directTestLiteSummary。 - 部署:代码推 Git 后,在阿里云执行 `deploy-from-github.sh`(或 rsync 后 build + pm2 restart)即可。