namespace Service.AppSettingModel; /// /// 图标生成提示词配置 /// public class IconPromptSettings { public IconPromptSettings() { InitializeDefaultPrompts(); } private void InitializeDefaultPrompts() { OldDefaultPromptTemplate = GetOldDefaultPrompt(); OldSingleIconPromptTemplate = GetOldSingleIconPrompt(); DefaultPromptTemplate = GetNewDefaultPrompt(); SingleIconPromptTemplate = GetNewSingleIconPrompt(); InitializeAbstractCategories(); } private string GetOldDefaultPrompt() { return """ 你是一个专业的 SVG 图标设计师,擅长创作精美、富有表现力的图标。 请根据分类名称和类型,生成 5 个风格迥异、视觉效果突出的 SVG 图标。 分类名称:{{category_name}} 分类类型:{{category_type}} 设计要求: 1. 尺寸:24x24,viewBox="0 0 24 24" 2. 色彩:使用丰富的渐变色和多色搭配,让图标更有吸引力和辨识度 - 可以使用 创建渐变效果 - 不同元素使用不同颜色,增加层次感 - 根据分类含义选择合适的配色方案(如餐饮用暖色系、交通用蓝色系等) 3. 设计风格:5 个图标必须风格明显不同,避免雷同 - 第1个:扁平化风格,色彩鲜明,使用渐变 - 第2个:线性风格,多色描边,细节丰富 - 第3个:3D立体风格,使用阴影和高光效果 - 第4个:卡通可爱风格,圆润造型,活泼配色 - 第5个:现代简约风格,几何与曲线结合,优雅配色 4. 细节丰富:不要只用简单的几何图形,添加特征性的细节元素 - 例如:餐饮可以加刀叉、蒸汽、食材纹理等 - 交通可以加轮胎、车窗、尾气等 - 每个图标要有独特的视觉记忆点 5. 图标要直观表达分类含义,让人一眼就能识别 6. 只返回 JSON 数组格式,包含 5 个完整的 SVG 字符串,不要有任何其他文字说明 重要:每个 SVG 必须是自包含的完整代码,包含所有必要的 gradient 定义。 返回格式: ["...", "...", "...", "...", "..."] """; } private string GetOldSingleIconPrompt() { return """ 你是一个专业的 SVG 图标设计师,擅长创作精美、富有表现力的图标。 请根据分类名称和类型,生成 1 个视觉突出的 SVG 图标。 分类名称:{{category_name}} 分类类型:{{category_type}} 设计要求: 1. 尺寸:24x24,viewBox="0 0 24 24" 2. 色彩:使用渐变色或多色搭配,让图标更有吸引力和辨识度 - 可以使用 创建渐变效果 - 根据分类含义选择合适的配色方案(如餐饮用暖色系、交通用蓝色系等) 3. 设计风格:现代扁平化风格,简洁优雅,使用渐变色 4. 细节丰富:添加特征性的细节元素,让人一眼就能识别 - 例如:餐饮可以加刀叉、蒸汽;交通可以加轮胎、车窗等 5. 只返回 JSON 数组格式,包含 1 个完整的 SVG 字符串,不要有任何其他文字说明 重要:SVG 必须是自包含的完整代码,包含所有必要的 gradient 定义。 返回格式: ["..."] """; } private string GetNewDefaultPrompt() { return """ 你是一个专业的 SVG 图标设计师,擅长创作简约、清晰的图标。 请根据分类名称和类型,生成 5 个简约风格、易于识别的 SVG 图标。 分类名称:{{category_name}} 分类类型:{{category_type}} 设计要求: 1. 尺寸:24x24,viewBox="0 0 24 24" 2. 风格:扁平化、单色、极致简约(简约度:{{style_strength}}) - 颜色方案:{{color_scheme}} - 使用单一填充色,避免渐变和阴影 - 保持线条简洁,避免过多细节 - 移除所有非必要的装饰元素 3. 几何简约:使用最简单的几何形状表达分类含义 - 餐饮:餐具形状(刀叉、勺子) - 交通:车辆轮廓(方向盘、车轮) - 购物:购物车或购物袋 - 娱乐:播放按钮、音符等 4. 高对比度:确保图标在小尺寸下依然清晰可辨 5. 图标要直观表达分类含义,让人一眼就能识别 6. 只返回 JSON 数组格式,包含 5 个完整的 SVG 字符串,不要有任何其他文字说明 返回格式: ["...", "...", "...", "...", "..."] """; } private string GetNewSingleIconPrompt() { return """ 你是一个专业的 SVG 图标设计师,擅长创作简约、清晰的图标。 请根据分类名称和类型,生成 1 个简约风格、易于识别的 SVG 图标。 分类名称:{{category_name}} 分类类型:{{category_type}} 设计要求: 1. 尺寸:24x24,viewBox="0 0 24 24" 2. 风格:扁平化、单色、极致简约(简约度:{{style_strength}}) - 颜色方案:{{color_scheme}} - 使用单一填充色,避免渐变和阴影 - 保持线条简洁,避免过多细节 - 移除所有非必要的装饰元素 3. 几何简约:使用最简单的几何形状表达分类含义 4. 高对比度:确保图标在小尺寸下依然清晰可辨 5. 图标要直观表达分类含义,让人一眼就能识别 6. 只返回 JSON 数组格式,包含 1 个完整的 SVG 字符串,不要有任何其他文字说明 返回格式: ["..."] """; } private void InitializeAbstractCategories() { AbstractCategories = new Dictionary { ["其他"] = new AbstractCategoryConfig { GeometryShape = "circle", ColorCode = "#9E9E9E" }, ["通用"] = new AbstractCategoryConfig { GeometryShape = "square", ColorCode = "#BDBDBD" }, ["未知"] = new AbstractCategoryConfig { GeometryShape = "triangle", ColorCode = "#E0E0E0" } }; } /// /// 提示词版本号 /// public string Version { get; set; } = "1.0.0"; /// /// 旧版提示词模板备份(用于生成 5 个图标,便于回滚) /// public string OldDefaultPromptTemplate { get; set; } = string.Empty; /// /// 旧版单个图标提示词模板备份(仅生成 1 个图标,便于回滚) /// public string OldSingleIconPromptTemplate { get; set; } = string.Empty; /// /// 默认提示词模板(用于生成 5 个图标) /// 支持的占位符: /// - {{category_name}}: 分类名称 /// - {{category_type}}: 分类类型(支出/收入/不计入收支) /// - {{style_strength}}: 风格强度(0.0-1.0,1.0 表示最简约) /// - {{color_scheme}}: 颜色方案(单色/双色/多色/渐变) /// public string DefaultPromptTemplate { get; set; } = string.Empty; /// /// 单个图标提示词模板(仅生成 1 个图标) /// 支持的占位符同 DefaultPromptTemplate /// public string SingleIconPromptTemplate { get; set; } = string.Empty; /// /// 风格强度(0.0-1.0,1.0 表示最简约) /// public double StyleStrength { get; set; } = 0.7; /// /// 颜色方案(single-color/two-color/multi-color/gradient) /// public string ColorScheme { get; set; } = "single-color"; /// /// 是否启用新提示词(灰度发布开关) /// public bool EnableNewPrompt { get; set; } = true; /// /// 灰度比例(0.0-1.0,0.1 表示 10% 用户使用新提示词) /// public double GrayScaleRatio { get; set; } = 0.1; /// /// 抽象分类的特殊处理配置 /// public Dictionary AbstractCategories { get; set; } = new(); } /// /// 抽象分类的特殊处理配置 /// public class AbstractCategoryConfig { /// /// 几何形状(circle/square/triangle/diamond/hexagon) /// public string GeometryShape { get; set; } = string.Empty; /// /// 颜色编码(用于区分抽象分类) /// public string ColorCode { get; set; } = string.Empty; }