diff --git a/lib/ai/providers/volcano-vision.ts b/lib/ai/providers/volcano-vision.ts index b899fdbd7..ea1ac890f 100644 --- a/lib/ai/providers/volcano-vision.ts +++ b/lib/ai/providers/volcano-vision.ts @@ -287,16 +287,10 @@ async function convertMessagesToVolcanoFormat(messages: any[]): Promise<{ prompt } } - // 强制要求生成 3 张图片:在提示词后添加明确指令 - let enhancedPrompt = prompt; - if (base64Images.length > 0) { - // 图生图:明确要求生成 3 个变体 - enhancedPrompt += "。请生成 3 个不同的变体。"; - } else { - // 文生图:明确要求生成 3 张不同图片 - enhancedPrompt += "。请生成 3 张不同风格的图片。"; - } - console.log("[Volcano Vision] Enhanced prompt:", enhancedPrompt.substring(0, 150)); + // 不在这里添加"生成多个变体"的提示,由调用方根据maxImages决定 + // 这样可以避免在场景裂变等只需要1张图片的场景中生成多张图片 + const enhancedPrompt = prompt; + console.log("[Volcano Vision] Prompt:", enhancedPrompt.substring(0, 150)); // 构建请求体 const result: { prompt: string; image?: string | string[] } = { prompt: enhancedPrompt }; @@ -326,7 +320,29 @@ async function sendVolcanoRequest( console.log("[Volcano Vision] Using model:", modelId); // 转换消息格式(含 Base64 转换) - const { prompt, image } = await convertMessagesToVolcanoFormat(messages); + let { prompt, image } = await convertMessagesToVolcanoFormat(messages); + + // 根据 maxImages 参数优化提示词 + if (maxImages === 1) { + // 只生成1张图片时,明确指示只生成1张,避免生成多张 + if (!prompt.includes("只生成") && !prompt.includes("生成1张") && !prompt.includes("生成一张")) { + prompt = prompt.trim(); + // 移除末尾的句号(如果有),然后添加明确指令 + if (prompt.endsWith("。") || prompt.endsWith(".")) { + prompt = prompt.slice(0, -1); + } + prompt += "。只生成1张图片。"; + } + } else if (maxImages > 1) { + // 生成多张图片时,明确要求生成多个变体 + if (!prompt.includes("生成") || (!prompt.includes("变体") && !prompt.includes("不同"))) { + prompt = prompt.trim(); + if (prompt.endsWith("。") || prompt.endsWith(".")) { + prompt = prompt.slice(0, -1); + } + prompt += `。请生成 ${maxImages} 个不同的变体。`; + } + } console.log("[Volcano Vision] Prompt:", prompt.substring(0, 100) + "..."); console.log("[Volcano Vision] Image count:", image ? (Array.isArray(image) ? image.length : 1) : 0);