Skip to content

前端提示词广场中编辑的提示词不会在章节生成流程中生效 #146

@xxx675702999

Description

@xxx675702999

问题描述

在前端「提示词广场」对任何提示词模板进行编辑、新建版本或激活版本后,这些修改不会被实际的章节生成流程读取。生成时仍然使用代码中硬编码的提示词。

复现步骤

  1. 打开前端提示词广场
  2. 编辑 chapter-generation-mainworkflow-chapter-generation 的 system prompt,明显修改一些特征(例如开头加一句"【测试标记】")
  3. 保存,确认激活版本已更新
  4. 启动托管模式生成一章
  5. 检查生成章节内容,不会包含任何提示词改动带来的效果;如有 LLM 请求日志,可以验证发出的 system message 仍为代码中硬编码版本

根因分析

双轨提示词管理未对接

项目中有两套提示词加载机制:

  • PromptManagerinfrastructure/ai/prompt_manager.py):数据库驱动、面向 UI 编辑,前端提示词广场的所有 CRUD 都走这里
  • PromptLoaderinfrastructure/ai/prompt_loader.py):只读 prompts_defaults.json,不读数据库

生成管线绕过了 PromptManager

核心生成路径 AutoNovelGenerationWorkflow._build_prompt()application/workflows/auto_novel_generation_workflow.py:862-911)完全硬编码,既不读 DB 也不读 JSON。托管模式、API 单章生成都走这个方法。

经过排查,prompts_defaults.json 中注册的 34 个模板里,只有 tension-scoring 一个实际接入了 PromptManager。其他 33 个模板(包括用户在前端看到的说书人反AI版 chapter-generation-main)都只是数据展示,并未真正影响生成。

典型受影响模板与对应调用方

模板 ID 调用方(应该读 DB 但没读)
chapter-generation-main / workflow-chapter-generation `AutoNovelGenerationWorkflow._build_prompt`
chapter-generation-basic `AIGenerationService._build_chapter_prompt`
scene-generation `SceneGenerationService._build_scene_prompt`
dialogue-generation `SandboxDialogueService.build_dialogue_generation_prompt`
review-character-consistency 等 5 个 review 模板 `ChapterReviewService` 各 `build*_prompt`
bible-all / worldbuilding / characters / locations `AutoBibleGenerator` 各 `generate*`
planning-quick-macro / planning-act / planning-main-plot-suggest `ContinuousPlanningService` / `SetupMainPlotSuggestionService`
summary-act / volume / part / checkpoint `VolumeSummaryService`
beat-sheet-decomposition `BeatSheetService._build_beat_sheet_prompt`
chapter-state-extraction / chapter-narrative-sync `chapter_state_llm_contract` / `chapter_narrative_sync`
knowledge-initial `AutoKnowledgeGenerator`
scene-director `SceneDirectorService`
chapter-summarizer `ClaudeChapterSummarizer`
refactor-proposal `MacroRefactorProposalService`
style-analysis `LLMVoiceAnalysisService`
tension-analysis-diagnosis `TensionAnalyzer`

lifecycle-phase-directives 与 beat-focus-instructions 的特殊问题

这两个模板通过 PromptLoader 从 JSON 文件读取 _directives_focus_instructions 等下划线前缀的私有字段。即使把 PromptManager 接入 PromptLoader,这些私有字段在 DB schema 中也没有对应列(prompt_versions 表只有 system_prompt 和 user_template),用户在前端根本编辑不到。

预期行为

用户在前端提示词广场编辑并激活的提示词版本,应当被所有生成路径读取并使用。

建议的修复方向

  1. PromptManager.render(node_key, variables) 成为所有生成服务读取提示词的统一入口,DB 有激活版本则用 DB 版本,否则降级到 JSON 种子

  2. 在核心入口 AutoNovelGenerationWorkflow._build_prompt 优先接入,再逐步扩展到 review / bible / planning / summary 等服务

  3. 对于 lifecycle-phase-directives / beat-focus-instructions 的私有字段存储问题,需要扩展 prompt_versions schema(新增 extra_fields TEXT 列存 JSON),或在前端屏蔽这两个模板的"可编辑"提示,避免用户误以为修改会生效

如果方向获得认可,我可以按顺序提小 PR(每个 PR 只改一类服务 + 带测试),方便逐步 review。

版本

  • 分支:main
  • 最近提交:4773398 fix(global-llm-entry-button)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions