namespace Foxel.Utils; public static class AiHelper { /// /// 从AI响应中提取标题和描述 /// /// AI生成的响应文本 /// 包含标题和描述的元组 public static (string title, string description) ExtractTitleAndDescription(string aiResponse) { string title = "AI生成的标题"; string description = "AI生成的描述"; try { // 尝试解析JSON响应 if (aiResponse.Contains("{") && aiResponse.Contains("}")) { // 提取JSON部分 int jsonStartIndex = aiResponse.IndexOf('{'); int jsonEndIndex = aiResponse.LastIndexOf('}') + 1; if (jsonStartIndex >= 0 && jsonEndIndex > jsonStartIndex) { string jsonPart = aiResponse[jsonStartIndex..jsonEndIndex]; var options = new System.Text.Json.JsonSerializerOptions { PropertyNameCaseInsensitive = true }; try { var result = System.Text.Json.JsonSerializer.Deserialize(jsonPart, options); if (result != null) { if (!string.IsNullOrWhiteSpace(result.Title)) title = result.Title; if (!string.IsNullOrWhiteSpace(result.Description)) description = result.Description; return (title, description); } } catch (System.Text.Json.JsonException) { // JSON解析失败,继续尝试文本解析 } } } // 回退到文本解析逻辑 var titleMarker = "标题:"; var descMarker = "描述:"; var titleIndex = aiResponse.IndexOf(titleMarker, StringComparison.Ordinal); var descIndex = aiResponse.IndexOf(descMarker, StringComparison.Ordinal); if (titleIndex >= 0 && descIndex > titleIndex) { titleIndex += titleMarker.Length; var titleEndIndex = descIndex; title = aiResponse[titleIndex..titleEndIndex].Trim(); descIndex += descMarker.Length; description = aiResponse[descIndex..].Trim(); } else if (titleIndex >= 0) { titleIndex += titleMarker.Length; title = aiResponse[titleIndex..].Trim(); } else if (descIndex >= 0) { descIndex += descMarker.Length; description = aiResponse[descIndex..].Trim(); } else { description = aiResponse.Trim(); } } catch (Exception ex) { Console.WriteLine($"解析AI响应时出错: {ex.Message}"); description = $"原始AI响应: {aiResponse}"; } return (title, description); } // 用于解析JSON的类 public class ImageAnalysisResult { public string Title { get; set; } = string.Empty; public string Description { get; set; } = string.Empty; } public class TagsResult { public string[] Tags { get; set; } = Array.Empty(); } }