# 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附近) 在以下代码中: ```php $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 字段: ```php '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附近) 找到: ```php $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') : [], ``` 改为: ```php $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附近) 找到: ```php $table_data['roles'] = json_decode($table_data['roles'], true); $table_data['scenes'] = json_decode($table_data['scenes'], true); ``` 改为: ```php $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附近) 找到: ```php $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 ]); ``` 改为: ```php $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 ]); ``` 并更新后续代码: ```php $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 冲突