feat(AiService, Config, DatabaseInitializer, SystemConfig): enhance AI prompt configurations and improve UI for prompt management

This commit is contained in:
shiyu
2025-05-26 14:43:56 +08:00
parent 086d466975
commit da8c19c2e8
4 changed files with 187 additions and 50 deletions

View File

@@ -59,7 +59,7 @@ public class AiService : IAiService
var textContent = new TextContent
{
Type = "text",
Text =
Text = _configService["AI:ImageAnalysisPrompt"] ??
"请详细分析这张图片,并提供全面的描述,以便用于向量嵌入和基于文本的图像搜索。描述需要包含:主体对象、场景环境、色彩特点、构图布局、风格特征、情绪氛围、细节特征等关键元素。请提供一个简短有力的标题,然后提供详细描述。\n\n请以JSON格式返回格式如下\n{\"title\": \"简短概括图片的核心内容\", \"description\": \"全面详细的描述,包含上述所有元素,使用丰富精确的词汇,避免笼统表达\"}\n\n请确保返回有效的JSON格式。"
};
@@ -103,7 +103,6 @@ public class AiService : IAiService
{
try
{
// 获取配置好的 HttpClient
var client = ConfigureHttpClient();
if (availableTags.Count == 0)
@@ -111,11 +110,19 @@ public class AiService : IAiService
string model = _configService["AI:Model"];
var tagsText = string.Join(", ", availableTags);
string promptTemplate = _configService["AI:TagMatchingPrompt"] ??
"以下是一组标签:[{tagsText}]。\n\n请从这些标签中严格选择与下面描述内容高度相关的标签最多选择5个。只选择确实匹配的标签如果找不到完全匹配或高度相关的标签宁可返回空数组也不要选择不太相关的标签。\n\n描述内容{description}\n\n请以JSON格式返回格式如下\n{{\"tags\": [\"标签1\", \"标签2\", \"标签3\"]}}\n\n请确保返回有效的JSON格式前面不要加```,并且只包含确实匹配的标签名称。";
// 替换占位符
string promptText = promptTemplate
.Replace("{tagsText}", tagsText)
.Replace("{description}", description);
var textContent = new TextContent
{
Type = "text",
Text =
$"以下是一组标签:[{tagsText}]。\n\n请从这些标签中严格选择与下面描述内容高度相关的标签最多选择5个。只选择确实匹配的标签如果找不到完全匹配或高度相关的标签宁可返回空数组也不要选择不太相关的标签。\n\n描述内容{description}\n\n请以JSON格式返回格式如下\n{{\"tags\": [\"标签1\", \"标签2\", \"标签3\"]}}\n\n请确保返回有效的JSON格式前面不要加```,并且只包含确实匹配的标签名称。"
Text = promptText
};
var message = new ChatMessage
@@ -232,10 +239,14 @@ public class AiService : IAiService
if (allowNewTags)
{
// 获取配置的标签生成提示词,如果没有则使用默认提示词
string defaultPrompt = _configService["AI:TagGenerationPrompt"] ??
"请为图片生成5个最相关的标签每个标签应该是简短且描述性的词语或短语。\n\n请以JSON格式返回格式如下\n{\"tags\": [\"标签1\", \"标签2\", \"标签3\", \"标签4\", \"标签5\"]}\n\n请确保返回有效的JSON格式。";
// 如果允许新标签,则提供现有标签作为参考,但允许生成新标签
promptText = availableTags.Count > 0
? $"可以参考这些现有标签:[{string.Join(", ", availableTags)}],但也可以生成其他与图片内容相关的新标签。\n\n请为图片生成5个最相关的标签优先使用已有标签但如果有更恰当的新标签也可以使用。\n\n请以JSON格式返回格式如下\n{{\"tags\": [\"标签1\", \"标签2\", \"标签3\", \"标签4\", \"标签5\"]}}\n\n请确保返回有效的JSON格式。"
: "请为图片生成5个最相关的标签每个标签应该是简短且描述性的词语或短语。\n\n请以JSON格式返回格式如下\n{\"tags\": [\"标签1\", \"标签2\", \"标签3\", \"标签4\", \"标签5\"]}\n\n请确保返回有效的JSON格式。";
? $"可以参考这些现有标签:[{string.Join(", ", availableTags)}],但也可以生成其他与图片内容相关的新标签。\n\n{defaultPrompt}"
: defaultPrompt;
}
else
{
@@ -244,8 +255,10 @@ public class AiService : IAiService
return new List<string>();
var tagsText = string.Join(", ", availableTags);
promptText =
$"以下是一组标签:[{tagsText}]。\n\n请从这些标签中严格选择与图片内容高度相关的标签最多选择5个。只选择确实匹配的标签如果找不到完全匹配或高度相关的标签宁可返回空数组也不要选择不太相关的标签。\n\n请以JSON格式返回格式如下\n{{\"tags\": [\"标签1\", \"标签2\", \"标签3\"]}}\n\n请确保返回有效的JSON格式并且只包含上述列表中的标签名称。";
string templatePrompt = _configService["AI:TagMatchingPrompt"] ??
"以下是一组标签:[{tagsText}]。\n\n请从这些标签中严格选择与图片内容高度相关的标签最多选择5个。只选择确实匹配的标签如果找不到完全匹配或高度相关的标签宁可返回空数组也不要选择不太相关的标签。\n\n请以JSON格式返回格式如下\n{{\"tags\": [\"标签1\", \"标签2\", \"标签3\"]}}\n\n请确保返回有效的JSON格式并且只包含上述列表中的标签名称。";
promptText = templatePrompt.Replace("{tagsText}", tagsText);
}
var textContent = new TextContent