MODIFICATION_GUIDE.md 5.4 KB

addChatForAce 方法完整修改指南

已完成的修改

✅ 1. 道具提示词构建 (行5966-6004)

已在 addChatForAce 方法中添加了道具列表的生成逻辑:

  • 新增 $extra_prop_prompt 变量
  • 在 foreach 循环中添加 product === 3 的道具处理
  • 添加道具强制设定提示词

##未完成的修改

📝 2. 修改单剧集 systemPrompt (行6006附近)

需要将板块列表从:

<故事梗概><剧本亮点><人物关系><核心矛盾><主体列表><美术风格><场景列表><分段剧本>

改为:

<故事梗概><剧本亮点><人物关系><核心矛盾><主体列表><美术风格><场景列表><道具列表><分段剧本>

并在场景列表相关说明后添加道具列表说明:

4.<道具列表>与场景列表同理,需尽可能的对道具环境进行详细描述,必须严格注意不要出现任何角色和人物。
    4.1<道具列表>分以下两部分(强制格式):道具描述和道具提示词,格式必须为:道具名:道具描述{道具提示词}
    4.2<道具列表>的道具描述是分析在整部剧中出现过的道具,道具描述尽量简洁贴合原文。
    4.3<道具列表>的道具提示词用于视觉呈现的道具描述,该道具需包含材质特征、颜色、尺寸比例、细节装饰、视觉风格等,描述需具有镜头感与画面表现力,适合直接用于AI图像生成模型,避免抽象词汇,强调具体可视化细节与整体视觉一致性,同时保证风格统一且符合剧情设定。该提示词在道具描述后用{}框起来。
    {$extra_prop_prompt}

📝 3. 在示例格式中添加道具列表 (行6100附近)

在场景列表示例后(###场景列表之后,###分段剧本之前)添加:

###道具列表
神秘药瓶:一个古朴的玉质小瓶,装有救命的阴阳球。{特写镜头,古朴的玉质小瓶,瓶身呈半透明的青白色玉质,高约8厘米,直径3厘米,瓶口用红绳系着精致的翠绿色玉塞。瓶身雕刻有精细的云纹图案,在灯光下泛着温润的光泽。无人物。}

📝 4. 更新 table_data 保存逻辑 (行6300附近)

在以下代码中:

$table_data = [
    'user_id' => $uid,
    'anime_name' => $anime_name,
    ...
    'scenes' => isset($script_arr['scenes']) && is_array($script_arr['scenes']) ? json_encode($script_arr['scenes'], 256) : '[]',
    'status' => '解析完成',

添加 props 字段:

    'scenes' => isset($script_arr['scenes']) && is_array($script_arr['scenes']) ? json_encode($script_arr['scenes'], 256) : '[]',
    'props' => isset($script_arr['props']) && is_array($script_arr['props']) ? json_encode($script_arr['props'], 256) : '[]',
    'status' => '解析完成',

📝 5. 更新 saveEpisodeVersionData 调用 (行6400附近)

找到:

$saveResult = $this->saveEpisodeVersionData(
    $anime_id,
    1,
    $episode_arr,
    is_array(getProp($script_arr, 'roles')) ? getProp($script_arr, 'roles') : [],
    is_array(getProp($script_arr, 'scenes')) ? getProp($script_arr, 'scenes') : [],

改为:

$saveResult = $this->saveEpisodeVersionData(
    $anime_id,
    1,
    $episode_arr,
    is_array(getProp($script_arr, 'roles')) ? getProp($script_arr, 'roles') : [],
    is_array(getProp($script_arr, 'scenes')) ? getProp($script_arr, 'scenes') : [],
    is_array(getProp($script_arr, 'props')) ? getProp($script_arr, 'props') : [],

📝 6. 更新返回数据 (行6500附近)

找到:

$table_data['roles'] = json_decode($table_data['roles'], true);
$table_data['scenes'] = json_decode($table_data['scenes'], true);

改为:

$table_data['roles'] = json_decode($table_data['roles'], true);
$table_data['scenes'] = json_decode($table_data['scenes'], true);
$table_data['props'] = json_decode($table_data['props'], true);

📝 7. 更新 mp_animes 表同步逻辑 (行6420附近)

找到:

$boolen5 = DB::table('mp_animes')->where('id', $anime_id)->update([
    'roles' => json_encode($saveResult['merged_roles'], 256),
    'scenes' => json_encode($saveResult['merged_scenes'], 256),
    'updated_at' => $now
]);

改为:

$boolen5 = DB::table('mp_animes')->where('id', $anime_id)->update([
    'roles' => json_encode($saveResult['merged_roles'], 256),
    'scenes' => json_encode($saveResult['merged_scenes'], 256),
    'props' => json_encode($saveResult['merged_props'], 256),
    'updated_at' => $now
]);

并更新后续代码:

$table_data['roles'] = json_encode($saveResult['merged_roles'], 256);
$table_data['scenes'] = json_encode($saveResult['merged_scenes'], 256);
$table_data['props'] = json_encode($saveResult['merged_props'], 256);

参考 chatForAce 方法

chatForAce 方法中已经有完整的道具列表处理逻辑,可以参考:

  • 行7490附近的 chatForAce 方法
  • 包含道具的强制提示词设定
  • 道具列表的格式要求
  • 分镜中道具的使用说明

测试要点

完成所有修改后,需要测试:

  1. 单剧集模式是否能正确生成道具列表
  2. 道具数据是否正确保存到 mp_animes 和 mp_anime_episodes 表
  3. 道具提示词格式是否符合要求
  4. 与 chatForAce 方法的输出结果一致性

注意事项

  1. 所有修改都只针对 addChatForAce 方法(行5851开始)
  2. 不要修改 addChat 方法(行6762附近)
  3. 确保 systemPrompt 的格式与 chatForAce 完全一致
  4. 道具提示词的编号应为 4.x,不要与场景的 3.x 冲突