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

9.1 KiB
Raw Permalink Blame History

技术方案:删除「直接生成测试版」+ 新增「豆包lite-大纲 / 豆包lite-总结」

一、目标

  1. 删除「直接生成测试版」相关前后端代码。
  2. 新增两个选项:「直接测试-豆包lite-大纲」「直接测试-豆包lite-总结」,前后端全支持。
  3. 收尾:推 Git阿里云部署。

二、现状梳理

层级 直接生成测试版 (direct_test) 直接测试-豆包lite (direct_test_lite)
后端 direct_generation_test Prompt 类型;validPersonasdirect_test;生成时 persona === 'direct_test' 用该 Prompt、默认模型 同用 direct_generation_test Promptpersona === 'direct_test_lite'DOUBAO_MODEL_LITE
前端 iOS PersonaType.directTestPersonaSelectionView 里一张卡片 PersonaType.directTestLitePersonaSelectionView 里一张卡片
管理后台 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_outlinedirect_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_testdirect_generation_lite,或新键 direct_generation_lite,仅一份模板)。
    • 管理后台:保留/改为一个「直接生成 Lite Prompt」或「豆包 Lite 测试用 Prompt」供三个 lite 选项共用。
  • iOS
    • PersonaType 增加:directTestLiteOutlinedirectTestLiteSummary(保留或删除 directTestLite 按产品决定)。
    • PersonaSelectionView 在「直接生成」流程下展示两张新卡片:「直接测试-豆包lite-大纲」「直接测试-豆包lite-总结」(若保留「直接测试-豆包lite」则三张
  • 后续若需要「大纲」和「总结」在生成效果上真正区分,再为这两个 persona 各配不同 Prompt见选项 B

选项 B大纲/总结用不同 Prompt可选、后续迭代

  • 后端新增两个 Prompt 类型,例如:direct_generation_lite_outlinedirect_generation_lite_summary
  • promptConfigServicepromptController、course-admin 中增加这两种类型的配置与编辑。
  • courseGenerationService 中按 persona 选择 Prompt
    • direct_test_lite_outlinedirect_generation_lite_outline
    • direct_test_lite_summarydirect_generation_lite_summary
    • (若仍保留 direct_test_lite)→ 共用 direct_generation_lite 或其一。
  • 模型仍为豆包 Lite仅 Prompt 不同。iOS 无需改接口,只传不同 persona。

3.3 建议实施顺序

  1. 后端:删除 direct_testdirect_generation_test 全部引用;validPersonas 改为只含 direct_test_litedirect_test_lite_outlinedirect_test_lite_summary(或按产品二选一:只保留后两个)。
  2. 后端:为 lite 统一使用一个 Prompt 类型(如 direct_generation_litecourseGenerationService 与 promptController 只认这一种;管理后台只保留一个 Lite 用 Prompt 配置。
  3. iOS:删除 directTest,新增 directTestLiteOutline / directTestLiteSummaryPersonaSelectionView 只展示两个新卡片(或加「直接测试-豆包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/backendbash 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_testdirect_generation_testvalidPersonas 与生成逻辑只保留 lite 系 persona
2 后端为 lite 统一一个 Prompt 类型(如 direct_generation_lite),并支持 direct_test_lite_outlinedirect_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_litedirect_generation_lite_outlinedirect_generation_lite_summary 三个 Prompt 类型,管理后台可分别配置;均使用豆包 Lite 模型,调用流程与原先直接测试-豆包lite 一致。
  • iOSPersonaSelectionView 在直接生成流程下展示三张卡片AICourseModels 已移除 directTest保留 directTestLite新增 directTestLiteOutline、directTestLiteSummary。
  • 部署:代码推 Git 后,在阿里云执行 deploy-from-github.sh(或 rsync 后 build + pm2 restart即可。