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