Skip to content

分镜选题优化与架构重构 - Qoder 20260101

概述

本次优化主要针对AIGC分镜系统的选题生成与分镜生成流程进行了架构重构和功能优化,重点解决了JSON解析问题、提示词结构优化、Rich Extra参数传递与应用以及系统稳定性提升问题。核心目标是实现选题与分镜生成的无缝衔接,确保丰富的创作参数(如实现步骤、案例分析、提示词模板库等)能够完整传递并应用到后续的分镜生成流程中。

核心优化内容

1. JSON解析与修复机制

问题背景

  • 前端在handleGenerateTheme方法中解析JSON时出现'Unterminated string in JSON at position 2410'错误
  • LLM返回的JSON字符串包含未正确闭合的字符串或特殊字符

解决方案

  • 后端增强处理:在AdminUnified控制器中添加了多层JSON验证和修复逻辑
    • aggressiveJsonCleanup:深度清理JSON字符串中的特殊字符
    • fixUnescapedQuotes:修复未转义的引号问题
    • 多种格式兼容:支持candidatescandidate_themescandidate_topics等不同格式
  • 前端容错处理:在StoryBoard.vue中添加了安全JSON解析机制
    • safeJsonParse:多层解析尝试
    • fixUnescapedQuotes:前端字符串修复
    • aggressiveJsonFix:激进的JSON修复策略

2. 提示词架构优化

旧架构问题

  • 前端同时维护systemPromptuserPrompt,导致提示词管理复杂
  • 系统提示词与用户内容耦合,难以维护和扩展

新架构设计

  • 后端集中管理:通过buildSystemPromptByScene方法实现场景化系统提示词构建
  • 场景化处理
    • theme_generation:主题生成场景
    • storyboard_generation:分镜生成场景
  • 前端简化:仅构建用户内容,通过user_content参数传递给后端
  • 架构优化目标:将结构约束逻辑完全迁移至API后端,前端不再需要维护systemPrompt定义,实现前后端职责分离

实现细节

  • systemPrompt完全从前端移除
  • userPrompt用于构建用户输入内容
  • 后端根据scene参数自动应用合适的系统提示词

3. Rich Extra参数传递与应用

问题识别

  • 主题生成时返回的丰富参数(extra字段)未能正确传递到分镜生成
  • extra字段包含:core_featurescreation_workflowprompt_template_libraryimplementation_checklistimplementation_stepscase_studytools_requiredtarget_audiencecontent_stylekey_elementssuccess_factors
  • 用户期望这些丰富的参数(如实现步骤、案例分析、工具推荐等)在选题生成后能完整传递到分镜生成流程中

解决方案

  • 数据结构优化:在applyThemeToMeta方法中正确保存主题的扩展数据到storyboardMeta.themeExtendedData
  • 递归展平处理:实现flattenObject函数,将嵌套对象结构转换为字符串格式
  • 参数注入机制:在agentGenerateAndSave方法中将扩展数据注入到分镜生成提示词中

数据流转流程

  1. 主题生成 → LLM返回包含extra字段的JSON
  2. applyThemeToMeta → 将extra数据保存到storyboardMeta.themeExtendedData
  3. agentGenerateAndSave → 从storyboardMeta.themeExtendedData提取数据
  4. 构建分镜提示词 → 将扩展数据以附加信息:\n...格式注入

数据持久化机制

  • 问题:刷新页面或重新加载项目时,前端暂存的 extra 数据丢失,导致二次生成分镜时缺少上下文。
  • 解决方案
    • 保存阶段:在 ensureStoryboardForSession 中,显式将 themeExtendedData 写入 meta_json 字段。
    • 恢复阶段:在 handleLoadStoryboardProject 中,从后端返回的 meta_json 解析并恢复 themeExtendedDatastoryboardMeta

4. 模板字符串语法修复

问题

  • JavaScript模板字符串中的换行符处理错误
  • 导致代码语法错误和解析失败

修复策略

  • 使用\\n转义换行符
  • 确保模板字符串语法正确
  • 避免因换行符导致的解析错误

5. 账号方向与公式同步优化

问题

  • 前端“账号方向”输入框支持自定义文本,但原逻辑仅处理数字ID,导致自定义方向无法同步到后端。

解决方案

  • 混合类型处理:重构 syncDirectionToFormula 方法,同时支持数字ID(既有选项)和文本字符串(自定义输入)。
  • 双向同步
    • 前端:将 dirIddirName 正确写入 formula 对象。
    • 后端:在 AdminUnified 中接收 direction 字段,并在生成提示词时根据语言(中/英)动态注入账号方向说明。

6. 默认服务商调整

变更内容

  • 将“灵感生成”模块的默认 LLM 服务商从“火山引擎”调整为“阿里百炼”。
  • 优化了模型加载逻辑,确保初始化及切换服务商时自动加载对应的模型列表。

实现细节

  • 状态初始化:在 StoryBoard.vue 中将 llmProvider 默认值设为 'bailian'
  • 动态加载:在 created 生命周期中增加判断,若默认服务商为 bailian,自动调用 loadBailianModels 获取模型列表。
  • 数据清理:移除了硬编码的 llmModelOptions,统一通过接口动态获取。

技术实现亮点

1. 场景化处理机制

javascript
// 前端调用
scene: 'theme_generation''storyboard_generation'

// 后端处理
public function buildSystemPromptByScene($scene, $extraData = [])
{
    switch ($scene) {
        case 'theme_generation':
            // 主题生成系统提示词
            break;
        case 'storyboard_generation':
            // 分镜生成系统提示词
            break;
    }
}

2. 递归对象展平算法

javascript
const flattenObject = (obj, prefix = '') => {
    const flattened = [];
    for (const [key, value] of Object.entries(obj)) {
        const fullKey = prefix ? `${prefix}.${key}` : key;
        if (typeof value === 'object' && value !== null && !Array.isArray(value)) {
            flattened.push(...flattenObject(value, fullKey));
        } else if (Array.isArray(value)) {
            flattened.push(`${fullKey}:${value.join(', ')}`);
        } else {
            flattened.push(`${fullKey}:${value}`);
        }
    }
    return flattened;
};

3. 多格式JSON兼容解析

支持以下格式的LLM响应:

  • candidates数组格式
  • candidate_themes格式
  • candidate_topics格式
  • 数字键对象格式(如阿里百炼)
  • 分析报告格式(包含analysis_summarycase_studies等)

业务价值

1. 稳定性提升

  • JSON解析容错能力增强
  • 特殊字符处理机制完善
  • 系统鲁棒性显著提高

2. 功能增强

  • Rich extra参数完整传递
  • 主题与分镜生成流程无缝衔接
  • 创作信息更加丰富和结构化

3. 架构优化

  • 提示词管理职责分离
  • 前后端协作更加清晰
  • 代码维护性大幅提升

后续优化方向

  1. 性能优化:进一步优化JSON处理算法,减少计算开销
  2. 扩展性增强:支持更多LLM响应格式
  3. 监控完善:添加JSON处理过程的监控和日志记录
  4. 用户界面:优化extra参数在前端的展示和编辑体验

总结

本次优化成功解决了AIGC分镜系统中的关键问题,建立了更加稳定和高效的选题与分镜生成流程。核心成果包括:

  1. Rich Extra参数完整传递:实现了主题生成时返回的丰富参数(如implementation_stepscase_studyprompt_template_libraryimplementation_checklist等)完整传递到分镜生成流程
  2. 架构优化:将结构约束逻辑完全迁移至API后端,前端不再需要维护systemPrompt定义,实现前后端职责分离
  3. 系统稳定性提升:通过多层JSON解析和修复机制,显著提升了系统对LLM返回内容的容错能力
  4. 数据流转优化:确保选题与分镜生成无缝衔接,丰富的创作参数能够完整传递并应用到后续流程中

通过架构重构、算法优化和数据流转改进,系统现在能够更好地处理复杂场景和丰富参数,为用户提供更高质量的创作体验。