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);
}
}
}