From 42f1109b90323c3e9b134264668a394ec2173e2b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=BE=B7=E5=AE=87?= Date: Sat, 5 Sep 2026 13:30:03 +0800 Subject: [PATCH] =?UTF-8?q?=E9=99=90=E5=88=B6=E8=81=94=E5=90=88=E5=9B=BE?= =?UTF-8?q?=E7=89=87=E4=B8=8A=E4=B8=8B=E6=96=87=E6=80=BB=E9=87=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 将页面参考图与独立素材的单次请求总数限制为128张 --- .../src/ui_editor/commands/recognition_and_binding.rs | 11 +++++++---- ...术方案】UI工作流资源桥接与Runtime执行-2026-08-24.md | 2 +- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/apps/ai-game-creator-shell/src-tauri/src/ui_editor/commands/recognition_and_binding.rs b/apps/ai-game-creator-shell/src-tauri/src/ui_editor/commands/recognition_and_binding.rs index 9f39bb140..45d2720b0 100644 --- a/apps/ai-game-creator-shell/src-tauri/src/ui_editor/commands/recognition_and_binding.rs +++ b/apps/ai-game-creator-shell/src-tauri/src/ui_editor/commands/recognition_and_binding.rs @@ -25,7 +25,7 @@ use std::path::Path; use ts_rs::TS; const MAX_REFERENCES: usize = 4; -const MAX_SPRITE_ASSETS: usize = 128; +const MAX_CONTEXT_IMAGES: usize = 128; const MAX_RECOGNITION_TREE_NODES: usize = 512; const MAX_RECOGNITION_TREE_DEPTH: usize = 32; const LEGACY_RECOGNITION_SYSTEM_PROMPT: &str = r#" @@ -628,10 +628,13 @@ pub(crate) async fn recognition_and_binding_impl_with_provider( if state.ui_design_images.len() > MAX_REFERENCES { return Err("界面图最多 4 张".to_string()); } - if state.sprite_assets.len() > MAX_SPRITE_ASSETS { + let context_image_count = state + .ui_design_images + .len() + .saturating_add(state.sprite_assets.len()); + if context_image_count > MAX_CONTEXT_IMAGES { return Err(format!( - "独立素材最多 {MAX_SPRITE_ASSETS} 个,当前为 {} 个", - state.sprite_assets.len() + "联合请求图片总数最多 {MAX_CONTEXT_IMAGES} 张,当前为 {context_image_count} 张" )); } let mut context_ids = state.ui_design_images.keys().cloned().collect::>(); diff --git a/docs/【技术方案】UI工作流资源桥接与Runtime执行-2026-08-24.md b/docs/【技术方案】UI工作流资源桥接与Runtime执行-2026-08-24.md index dad483d3e..a8a60d9d2 100644 --- a/docs/【技术方案】UI工作流资源桥接与Runtime执行-2026-08-24.md +++ b/docs/【技术方案】UI工作流资源桥接与Runtime执行-2026-08-24.md @@ -53,7 +53,7 @@ ui-workflow.completed `recognize` 是显式的重新计算动作,不做幂等短路:用户或 Runtime 再次点击/调用时,始终重新执行一次识别+绑定请求,并用新生成的 UI 树替换旧树、写入新的 UI State revision。它不会复用上一次 LLM 结果,也不会自动替用户重新执行 `finalize`;如果页面已经有 `application-ready`/`completed` 标记,重新识别后应重新检查状态并按需再次 finalize,使应用标记与最新 State revision 对齐。该行为是有意保留的 demo/workbench 语义,避免“重新点击”被悄悄解释成恢复旧结果。 -联合请求一次携带全部页面参考图和已登记独立素材;页面参考图最多 4 张,独立素材最多 128 个。超过上限时在发起 Provider 请求前直接失败,不会退回旧的素材 batching 路径。 +联合请求一次携带全部页面参考图和已登记独立素材;页面参考图最多 4 张,图片上下文总量(页面参考图 + 独立素材)最多 128 张,因此页面图占满 4 张时最多再带 124 个独立素材。超过总量上限时在发起 Provider 请求前直接失败,不会退回旧的素材 batching 路径。 `workflow_stage_rank` 不是前端内存状态,也不是 UI 编辑器的步骤索引。它是 Rust workflow 模块里的内部比较函数:读取 UI JSON manifest 资产上持久化的 `source.generationKind`(例如 `ui-workflow.reference-ready`、`ui-workflow.binding-ready`),把阶段映射为数字 rank,用于 `update_page_manifest_stage` 的单调推进保护,避免较早阶段覆盖较晚阶段。真正的阶段值在项目 manifest 中持久化,并随项目 revision 更新;历史 `structure-ready`/`merge-ready` 是否迁移或继续认可属于持久化兼容决策,不由前端会话状态解决。