namespace Service.AgentFramework; /// /// 单行账单解析 Agent /// public class ParsingAgent : BaseAgent { private readonly IAITools _aiTools; private readonly ITextProcessingTools _textTools; public ParsingAgent( IToolRegistry toolRegistry, IAITools aiTools, ITextProcessingTools textTools, ILogger logger ) : base(toolRegistry, logger) { _aiTools = aiTools; _textTools = textTools; } /// /// 解析单行账单文本 /// public async Task> ExecuteAsync(string billText) { try { // Phase 1: 文本分析 RecordStep("文本分析", $"分析账单文本: {billText}"); var textStructure = await _textTools.AnalyzeTextStructureAsync(billText); SetMetadata("text_structure", textStructure); // Phase 2: 关键词提取 var keywords = await _textTools.ExtractKeywordsAsync(billText); RecordStep("关键词提取", $"提取到 {keywords.Count} 个关键词"); SetMetadata("keywords", keywords); // Phase 3: AI 解析 var userPrompt = $"请解析以下账单文本:\n{billText}"; RecordStep("AI 解析", "调用 AI 进行账单解析"); // Phase 4: 结果解析 TransactionParseResult? parseResult = null; var summary = parseResult != null ? $"成功解析账单:{parseResult.Reason},金额 {parseResult.Amount},日期 {parseResult.Date:yyyy-MM-dd}。" : "账单解析失败,无法提取结构化数据。"; return CreateResult(parseResult, summary, parseResult != null); } catch (Exception ex) { _logger.LogError(ex, "解析 Agent 执行失败"); return CreateResult( null, $"解析失败: {ex.Message}", false, ex.Message); } } }