Files
EmailBill/Service/AgentFramework/ParsingAgent.cs

63 lines
2.1 KiB
C#
Raw Normal View History

2026-01-12 14:34:03 +08:00
namespace Service.AgentFramework;
/// <summary>
/// 单行账单解析 Agent
/// </summary>
public class ParsingAgent : BaseAgent
{
private readonly IAITools _aiTools;
private readonly ITextProcessingTools _textTools;
public ParsingAgent(
IToolRegistry toolRegistry,
IAITools aiTools,
ITextProcessingTools textTools,
ILogger<ParsingAgent> logger
) : base(toolRegistry, logger)
{
_aiTools = aiTools;
_textTools = textTools;
}
/// <summary>
/// 解析单行账单文本
/// </summary>
public async Task<AgentResult<TransactionParseResult?>> 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<TransactionParseResult?>(parseResult, summary, parseResult != null);
}
catch (Exception ex)
{
_logger.LogError(ex, "解析 Agent 执行失败");
return CreateResult<TransactionParseResult?>(
null,
$"解析失败: {ex.Message}",
false,
ex.Message);
}
}
}