63 lines
2.1 KiB
C#
63 lines
2.1 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|