001project_wildgrowth/docs/tech-plan-persona-cleanup-a...

127 lines
9.1 KiB
Markdown
Raw Normal View History

2026-02-11 15:26:03 +08:00
# 技术方案:删除「直接生成测试版」+ 新增「豆包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 一致。
- iOSPersonaSelectionView 在直接生成流程下展示三张卡片AICourseModels 已移除 directTest保留 directTestLite新增 directTestLiteOutline、directTestLiteSummary。
- 部署:代码推 Git 后,在阿里云执行 `deploy-from-github.sh`(或 rsync 后 build + pm2 restart即可。