From 250360a40aa80a03265ccad6a56e32ab505b763d Mon Sep 17 00:00:00 2001 From: Linghong Date: Sat, 5 Sep 2026 05:00:32 +0000 Subject: [PATCH] =?UTF-8?q?=E6=94=BE=E5=AE=BDGDD=E4=B8=80=E5=8F=A5?= =?UTF-8?q?=E8=AF=9D=E6=A6=82=E5=BF=B5=E6=A0=A1=E9=AA=8C=E8=8C=83=E5=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 删除决策首项必须为 confirmed 且 round=0 的阻断校验 将 Runtime 的 oneLiner 实际接受范围调整为 10~160 将模型 schema 提示范围调整为 25~90 并记录有意不对称设计 修复 Planning V2 系统提示词参数占位符 --- .../src/agent/runtime_protocol/planning_policy_v2.rs | 8 +------- .../src/agent/runtime_protocol/planning_session_v2.rs | 2 +- .../src/agent/runtime_protocol/planning_storage.rs | 4 +++- .../【技术方案】立项策划Agent(Fast GDD)-2026-08-10.md | 2 +- 4 files changed, 6 insertions(+), 10 deletions(-) diff --git a/apps/ai-game-creator-shell/src-tauri/src/agent/runtime_protocol/planning_policy_v2.rs b/apps/ai-game-creator-shell/src-tauri/src/agent/runtime_protocol/planning_policy_v2.rs index 51e23278e..9ab61b837 100644 --- a/apps/ai-game-creator-shell/src-tauri/src/agent/runtime_protocol/planning_policy_v2.rs +++ b/apps/ai-game-creator-shell/src-tauri/src/agent/runtime_protocol/planning_policy_v2.rs @@ -261,7 +261,7 @@ pub(crate) fn planning_v2_function_tools() -> Vec }, "required": ["visualType", "keywords", "moodAndColor", "mvpArtBoundary"] }, - "oneLiner": {"type": "string", "description": "一句话概念"}, + "oneLiner": {"type": "string", "minLength": 25, "maxLength": 90, "description": "一句话概念(建议 25~90 字;Runtime 实际接受 10~160 字,两者有意不对称,不是缺陷或 bug)"}, "pillars": { "type": "array", "description": "游戏支柱", @@ -596,7 +596,6 @@ fn validate_v2_decision_content( topic: &str, state: &str, answer_source: Option, - round: u32, answer_summary: &str, ) -> Result<(), String> { validate_text(topic, &format!("decisions[{index}].topic"), 1, 120) @@ -614,9 +613,6 @@ fn validate_v2_decision_content( }, ) .map_err(|error| error.to_string())?; - if index == 0 && (normalize_v2_decision_state(state)? != "confirmed" || round != 0) { - return Err("PLANNING_INVALID_GDD: decisions 首项必须是 confirmed 且 round=0".to_string()); - } Ok(()) } @@ -651,7 +647,6 @@ fn validate_v2_decision_inputs( &decision.topic, &decision.state, decision.answer_source.clone(), - decision.round, &decision.answer_summary, )?; } @@ -690,7 +685,6 @@ fn validate_v2_durable_decisions( &decision.topic, &decision.state, Some(decision.answer_source.clone()), - decision.round, &decision.answer_summary, )?; if decision.state == "prototype_pending" { diff --git a/apps/ai-game-creator-shell/src-tauri/src/agent/runtime_protocol/planning_session_v2.rs b/apps/ai-game-creator-shell/src-tauri/src/agent/runtime_protocol/planning_session_v2.rs index 9a6b6fe99..c46a2da70 100644 --- a/apps/ai-game-creator-shell/src-tauri/src/agent/runtime_protocol/planning_session_v2.rs +++ b/apps/ai-game-creator-shell/src-tauri/src/agent/runtime_protocol/planning_session_v2.rs @@ -789,7 +789,7 @@ fn planning_v2_system_prompt(session: &PlanningSessionV2) -> String { // 问询策略只是偏好,两者不要求数值一致。这里仅传当前已展示数, // 达到硬上限时再明确禁止本次继续提问。 format!( - "你是立项策划 Agent。当前会话 {},回合 {}。每轮必须且只能调用一个工具:问询用 plan_ask_question,出稿用 plan_submit_gdd。不要在正文输出 JSON、Markdown、解释或代码围栏。\n\n除非用户明确要求直接出稿,否则先进行关键设计澄清。\n整个会话最多提问 3 轮。\n3 轮是上限,不是配额;信息已经足够时允许 0~2 轮提前出稿。\n达到第 3 轮或信息足够时,整理当前信息并调用 plan_submit_gdd。\n每轮收到用户回答后重新选择最重要的下一个未决决定,不要重复已回答的问题。\n提问优先顺序:核心行为与本局目标 → 重玩动力 → 制作边界与 MVP。\n主题包装、美术、数值和次要系统可以用 assumption_pending,answerSource 记为 agent_inferred。修改以最新用户意见为准,提交完整 GDD,不要打补丁。", + "你是立项策划 Agent。当前会话 {},回合 {}。{}\n\n每轮必须且只能调用一个工具:问询用 plan_ask_question,出稿用 plan_submit_gdd。不要在正文输出 JSON、Markdown、解释或代码围栏。\n\n除非用户明确要求直接出稿,否则先进行关键设计澄清。\n整个会话最多提问 3 轮。\n3 轮是上限,不是配额;信息已经足够时允许 0~2 轮提前出稿。\n达到第 3 轮或信息足够时,整理当前信息并调用 plan_submit_gdd。\n每轮收到用户回答后重新选择最重要的下一个未决决定,不要重复已回答的问题。\n提问优先顺序:核心行为与本局目标 → 重玩动力 → 制作边界与 MVP。\n主题包装、美术、数值和次要系统可以用 assumption_pending,answerSource 记为 agent_inferred。修改以最新用户意见为准,提交完整 GDD,不要打补丁。", session.session_id, session.turn_index, planning_v2_question_policy(session), diff --git a/apps/ai-game-creator-shell/src-tauri/src/agent/runtime_protocol/planning_storage.rs b/apps/ai-game-creator-shell/src-tauri/src/agent/runtime_protocol/planning_storage.rs index 2731c09d0..bb151f7a2 100644 --- a/apps/ai-game-creator-shell/src-tauri/src/agent/runtime_protocol/planning_storage.rs +++ b/apps/ai-game-creator-shell/src-tauri/src/agent/runtime_protocol/planning_storage.rs @@ -692,7 +692,9 @@ pub(crate) fn validate_plan_game(game: &PlanGddGame) -> Result<(), PlanningStora 1, 400, )?; - validate_text(&game.one_liner, "game.oneLiner", 45, 90)?; + // 设计约定:Runtime 接受范围为 10~160,模型 schema 提示范围收紧为 25~90; + // 两者有意不对称,用于避免过短概念同时保留对已有/人工 GDD 的兼容,不是缺陷或 bug。 + validate_text(&game.one_liner, "game.oneLiner", 10, 160)?; if !(2..=4).contains(&game.pillars.len()) { return Err(invalid("game.pillars 必须有 2~4 条")); diff --git a/docs/technical/【技术方案】立项策划Agent(Fast GDD)-2026-08-10.md b/docs/technical/【技术方案】立项策划Agent(Fast GDD)-2026-08-10.md index 7d599f4d2..92fa5aa04 100644 --- a/docs/technical/【技术方案】立项策划Agent(Fast GDD)-2026-08-10.md +++ b/docs/technical/【技术方案】立项策划Agent(Fast GDD)-2026-08-10.md @@ -790,7 +790,7 @@ input 是当前 GDD 的完整快照,不要求与 source session 的 `decisions | title | 1~80 scalar | | genre.primary / fusion | primary 1~40;fusion 为 `null` 或 1~40 | | artStyle | visualType 1~80;keywords 3~5 个且去重,每项 1~32;其余各 1~400 | -| oneLiner | 45~90 scalar | +| oneLiner | Runtime 实际接受 10~160 scalar;模型 schema 提示 25~90 scalar(有意不对称,不是缺陷或 bug) | | pillars | 2~4 条;name 1~40,其余文本各 1~240;name 唯一 | | coreLoop | 4~8 步,每步 1~120 | | targetUsers | 三个主文本各 1~240;referenceGames 0~5 项,每项 1~80 |