# addChatForAce 方法优化说明 ## 需要修改的内容 ### 1. 在 addChatForAce 方法中新增道具列表处理 (约5970行附近) 将以下代码: ```php // 构建主体和场景提示词 $extra_role_prompt = "\n"; $extra_scene_prompt = "\n"; $ref_products = []; // 参考资产 ``` 修改为: ```php // 构建主体、场景和道具提示词 $extra_role_prompt = "\n"; $extra_scene_prompt = "\n"; $extra_prop_prompt = "\n"; $ref_products = []; // 参考资产 ``` ### 2. 在 foreach 循环中添加道具处理 (约5980行附近) 在以下代码后: ```php } elseif ((int)$product === 2) { // 拼接场景信息 $extra_scene_prompt .= $product_name . ":" . $pic_prompt . "\n"; } ``` 添加: ```php } elseif ((int)$product === 3) { // 拼接道具信息 $extra_prop_prompt .= $product_name . ":" . $pic_prompt . "\n"; } ``` ### 3. 在场景提示词后添加道具提示词 (约6000行附近) 在场景提示词生成代码后添加: ```php if (!empty(trim($extra_prop_prompt))) { $extra_prop_prompt = "\n4.4【强制道具设定-不可修改】\n以下道具必须全部出现在<道具列表>中,必须包含:\n" . $extra_prop_prompt . "\n格式要求:\n1. 道具名称:必须保持不变\n2. 道具描述:你必须根据剧情为每个道具生成道具描述(分析在整部剧中出现过的道具,道具描述尽量简洁贴合原文)\n3. 道具提示词:{}中的内容必须完整保留,不得修改\n\n最终格式必须为:道具名:[你生成的道具描述]{道具提示词-保持不变}\n\n必须包含的道具列表:\n" . $extra_prop_prompt . "\n【重要提示】以上每个道具在<道具列表>中的完整格式必须是:道具名:道具描述{道具提示词},其中道具描述是你必须生成的内容,{}中的道具提示词必须原样保留。"; } ``` ### 4. 修改单剧集 systemPrompt (约6010行附近) 需要将单剧集模式的 systemPrompt 完全替换为与 chatForAce 一致的结构。 主要修改点: - 修改板块列表: `<故事梗概><剧本亮点><人物关系><核心矛盾><主体列表><美术风格><场景列表><道具列表><分段剧本>` - 添加道具列表相关的要求和示例 - 在 `{$extra_scene_prompt}` 后添加 `{$extra_prop_prompt}` - 修改分镜结构说明,将道具也纳入考虑 ### 5. 在示例格式中添加道具列表 (约6100行附近) 在场景列表示例后添加道具列表示例: ``` ###道具列表 神秘药瓶:一个古朴的玉质小瓶,装有救命的阴阳球。{特写镜头,古朴的玉质小瓶,瓶身呈半透明状,内部隐约可见一颗微光闪烁的珠子,瓶口用红绳系着精致的玉塞。无人物。} ``` ### 6. 更新保存逻辑 (约6400行附近) 在保存动漫大纲时,添加 props 字段: ```php 'props' => isset($script_arr['props']) && is_array($script_arr['props']) ? json_encode($script_arr['props'], 256) : '[]', ``` 在单剧集保存时,将 props 也传递给 saveEpisodeVersionData 方法。 ### 7. 在返回数据中添加 props (约6500行附近) ```php $table_data['props'] = json_decode($table_data['props'], true); ``` ## 测试要点 1. 测试包含道具的单剧集生成 2. 验证道具列表是否正确保存到数据库 3. 确认道具提示词格式正确 4. 检查与 chatForAce 方法的一致性