namespace Service.AgentFramework; /// /// AI 工具集 /// public interface IAITools { /// /// AI 分类决策 /// Task ClassifyTransactionsAsync( string systemPrompt, string userPrompt); } /// /// AI 工具实现 /// public class AITools( IOpenAiService openAiService, ILogger logger ) : IAITools { public async Task ClassifyTransactionsAsync( string systemPrompt, string userPrompt) { logger.LogInformation("调用 AI 进行账单分类"); var response = await openAiService.ChatAsync(systemPrompt, userPrompt); if (string.IsNullOrWhiteSpace(response)) { logger.LogWarning("AI 返回空响应"); return Array.Empty(); } // 解析 NDJSON 格式的 AI 响应 var results = new List(); var lines = response.Split(new[] { '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries); foreach (var line in lines) { if (string.IsNullOrWhiteSpace(line)) continue; try { using var doc = JsonDocument.Parse(line); var root = doc.RootElement; var result = new ClassificationResult { Reason = root.GetProperty("reason").GetString() ?? string.Empty, Classify = root.GetProperty("classify").GetString() ?? string.Empty, Type = (TransactionType)root.GetProperty("type").GetInt32(), Confidence = 0.9 // 可从 AI 响应中解析 }; results.Add(result); } catch (JsonException ex) { logger.LogWarning(ex, "解析 AI 响应行失败: {Line}", line); } } logger.LogInformation("AI 分类完成,得到 {Count} 条结果", results.Count); return results.ToArray(); } }