已在 addChatForAce 方法中添加了道具列表的生成逻辑:
$extra_prop_prompt 变量##未完成的修改
需要将板块列表从:
<故事梗概><剧本亮点><人物关系><核心矛盾><主体列表><美术风格><场景列表><分段剧本>
改为:
<故事梗概><剧本亮点><人物关系><核心矛盾><主体列表><美术风格><场景列表><道具列表><分段剧本>
并在场景列表相关说明后添加道具列表说明:
4.<道具列表>与场景列表同理,需尽可能的对道具环境进行详细描述,必须严格注意不要出现任何角色和人物。
4.1<道具列表>分以下两部分(强制格式):道具描述和道具提示词,格式必须为:道具名:道具描述{道具提示词}
4.2<道具列表>的道具描述是分析在整部剧中出现过的道具,道具描述尽量简洁贴合原文。
4.3<道具列表>的道具提示词用于视觉呈现的道具描述,该道具需包含材质特征、颜色、尺寸比例、细节装饰、视觉风格等,描述需具有镜头感与画面表现力,适合直接用于AI图像生成模型,避免抽象词汇,强调具体可视化细节与整体视觉一致性,同时保证风格统一且符合剧情设定。该提示词在道具描述后用{}框起来。
{$extra_prop_prompt}
在场景列表示例后(###场景列表之后,###分段剧本之前)添加:
###道具列表
神秘药瓶:一个古朴的玉质小瓶,装有救命的阴阳球。{特写镜头,古朴的玉质小瓶,瓶身呈半透明的青白色玉质,高约8厘米,直径3厘米,瓶口用红绳系着精致的翠绿色玉塞。瓶身雕刻有精细的云纹图案,在灯光下泛着温润的光泽。无人物。}
在以下代码中:
$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' => '解析完成',
找到:
$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') : [],
找到:
$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);
找到:
$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 方法中已经有完整的道具列表处理逻辑,可以参考:
完成所有修改后,需要测试: