fix: optimize volcano vision prompt - only generate 1 image for scene fusion
Some checks failed
Lint / build (20) (push) Has been cancelled
Playwright Tests / test (push) Has been cancelled

This commit is contained in:
Your Name 2026-01-22 19:55:45 +08:00
parent da99fbdc93
commit 0272f5e391

View File

@ -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);