package service import ( "strings" ) // ────────────────────────────────────────────── // 镭射卡 prompt 构建规范 // // 调用结构: // 调用 1 (背景图 bg):[前缀_bg] + [主题描述] + [用户注入] + [负向约束] // 调用 2 (装饰图 ol):[前缀_ol] + [主题描述] + [用户注入] + [负向约束] // // 前缀/后缀由本文件硬编码,确保所有 prompt 输出受控。 // 主题描述来自前端 laserPresets.js 的 bgPrompt/overlayPrompt。 // 用户注入来自前端的 user_prompt 字段。 // ────────────────────────────────────────────── // ── 前缀(技术性约束 + 镭射卡美学指引,固定加在最前) ── const bgPrefix = "高端镭射明星小卡背景图,3:4竖版构图。核心要素:金属镭射质感、全息衍射光泽、彩虹色散光晕,像光在CD表面折射出的梦幻色彩。可以是抽象渐变流体、镭射光斑散景、全息薄膜纹理或极光般流动色带。画面要有纵深感和丰富的色彩层次,银底基调上叠加主题色。禁止出现人物人脸。" const overlayPrefix = "高端镭射装饰元素图,3:4竖版白底,装饰之外的区域必须为纯白色(#FFFFFF)。装饰风格自由发挥——可以是流光溢彩的光轨线条、镭射星芒和光晕粒子、精致的手绘花纹边框、全息几何图案、碎钻般亮点散布,或以上任意组合。核心要求:元素要有镭射般的七彩闪耀质感,疏密有致不过于拥挤,整体精致高级不廉价。禁止出现人物人脸。" // ── 后缀(负向词,固定加在最后) ── const negativeSuffix = "禁止出现如下内容:文字、字母、数字、水印、logo、签名、人物、人脸、边框线框、二维码、条形码" // ── 用户注入模版 ── const userInjectionTemplate = "。同时在画面中自然融入以下视觉元素:" // userPrompt 非空时追加 // BuildBgPrompt 将系统前缀 + 主题描述 + 用户内容 + 负向词拼接为最终背景图 prompt func BuildBgPrompt(templateBody, userPrompt string) string { return buildPrompt(bgPrefix, templateBody, userPrompt) } // BuildOverlayPrompt 将系统前缀 + 主题描述 + 用户内容 + 负向词拼接为最终装饰图 prompt func BuildOverlayPrompt(templateBody, userPrompt string) string { return buildPrompt(overlayPrefix, templateBody, userPrompt) } // buildPrompt 通用拼接 func buildPrompt(prefix, body, userPrompt string) string { var b strings.Builder // 1. 前缀(技术约束) b.WriteString(prefix) // 2. 主题描述(中间核心内容) if body = strings.TrimSpace(body); body != "" { if b.Len() > 0 && !strings.HasSuffix(b.String(), "。") { b.WriteString("。") } b.WriteString(body) } // 3. 用户注入(可选) if user := strings.TrimSpace(userPrompt); user != "" { b.WriteString(userInjectionTemplate) b.WriteString(user) } // 4. 后缀(负向约束) b.WriteString("。") b.WriteString(negativeSuffix) return b.String() }