diff --git a/server-rs/crates/api-server/src/editor_screen_background_decision.rs b/server-rs/crates/api-server/src/editor_screen_background_decision.rs index d2f59a7bd..1762e3e92 100644 --- a/server-rs/crates/api-server/src/editor_screen_background_decision.rs +++ b/server-rs/crates/api-server/src/editor_screen_background_decision.rs @@ -1,4 +1,4 @@ -use platform_llm::{LlmClient, LlmMessage, LlmTextRequest}; +use platform_llm::{LlmClient, LlmMessage, LlmResponseReasoningEffort, LlmTextRequest}; use serde_json::json; use tracing::{info, warn}; @@ -151,11 +151,18 @@ pub(crate) async fn resolve_editor_screen_background_color( } None => LlmMessage::user(user_prompt.as_str()), }; + // 预算要够推理模型(如 gpt-5-mini)先花几百 token 推理、再吐 JSON 答案; + // 实测 low 档推理约 320~384 token,取 768 留足余量。非推理模型遇 stop 提前结束,不会多花。 let mut request = LlmTextRequest::new(vec![LlmMessage::system(system_prompt), user_message]) - .with_max_tokens(96) + .with_max_tokens(768) .with_request_timeout_ms(EDITOR_SCREEN_BACKGROUND_DECISION_TIMEOUT_MS); if let Some(vision_model) = vision_model { - request = request.with_model(vision_model); + // 视觉模型 gpt-5-mini 是推理模型:走 Responses 协议并压到 low 推理档, + // 否则默认档会把预算全烧在推理上、返回空答案。 + request = request + .with_model(vision_model) + .with_responses_api() + .with_response_reasoning_effort(LlmResponseReasoningEffort::Low); } match llm_client.request_text(request).await { Ok(response) => { diff --git a/server-rs/crates/api-server/src/llm_model_routing.rs b/server-rs/crates/api-server/src/llm_model_routing.rs index 16cd06539..49f8e6740 100644 --- a/server-rs/crates/api-server/src/llm_model_routing.rs +++ b/server-rs/crates/api-server/src/llm_model_routing.rs @@ -1,5 +1,6 @@ pub(crate) const RPG_STORY_LLM_MODEL: &str = "doubao-seed-character-251128"; pub(crate) const CREATION_TEMPLATE_LLM_MODEL: &str = "deepseek-v3-2-251201"; pub(crate) const PUZZLE_LEVEL_NAME_VISION_LLM_MODEL: &str = "gpt-4o-mini"; -// 抠图背景色决策的视觉模型:只需看图选色,用低成本视觉模型即可。 -pub(crate) const EDITOR_SCREEN_BACKGROUND_VISION_LLM_MODEL: &str = "gpt-4o-mini"; +// 抠图背景色决策的视觉模型。gpt-5-mini 是推理模型,会先花若干 token 做推理, +// 故决策请求的 max_tokens 需留足推理开销(见 editor_screen_background_decision)。 +pub(crate) const EDITOR_SCREEN_BACKGROUND_VISION_LLM_MODEL: &str = "gpt-5-mini";