ai-chatbot/lib/canvas/layout-replace-product-support.ts

28 lines
2.3 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

export const LAYOUT_REPLACE_SUPPORT_PROMPT = [
"只观察这张图中主体商品本身的下缘与支撑方式,不比较其他图片,不根据商品类别或广告文案猜测。",
"supportType只能选:flush=连续底座直接贴地;legs=可见独立柜腿、支撑脚或脚轮使柜体离地;suspended=明确悬挂;not_applicable=该类别不适用支撑结构检查(如服装、食品);unclear=无法看清。",
"贴地底座的接触阴影不是腿。只有实际看到独立支撑才选legs,不要凭空想象隐藏的脚。关注实际商品,忽略海报图标、数字及其他独立摆件。",
'只返回JSON,supportType填写上述英文枚举之一:{"supportType":"从枚举中选择","confidence":0.95}。',
].join("\n");
export type LayoutReplaceSupport = "flush" | "legs" | "suspended" | "not_applicable" | "unclear";
export function parseLayoutReplaceSupport(text: string) {
let value: { supportType?: unknown; confidence?: unknown };
try { value = JSON.parse(text.trim().replace(/^```(?:json)?\s*/i, "").replace(/\s*```$/, "")); }
catch { throw new Error("商品支撑结构检查未返回有效结论"); }
if (!value || !["flush", "legs", "suspended", "not_applicable", "unclear"].includes(String(value.supportType)) ||
typeof value.confidence !== "number" || value.confidence < 0 || value.confidence > 1) throw new Error("商品支撑结构检查不完整");
return { supportType: value.supportType as LayoutReplaceSupport, confidence: value.confidence };
}
export function compareLayoutReplaceSupport(source: ReturnType<typeof parseLayoutReplaceSupport>, result: ReturnType<typeof parseLayoutReplaceSupport>) {
if (source.supportType === "not_applicable") return { passed: true, reason: "" };
if (source.supportType === "unclear" || result.supportType === "unclear" || source.confidence < .8 || result.confidence < .8) {
return { passed: false, reason: "无法可靠确认商品下缘的支撑结构" };
}
const names = { flush: "贴地底座", legs: "独立腿脚或脚轮", suspended: "悬挂", not_applicable: "类别不适用", unclear: "不清晰" };
return source.supportType === result.supportType ? { passed: true, reason: "" }
: { passed: false, reason: `原商品为${names[source.supportType]},结果却为${names[result.supportType]},支撑结构已改变` };
}