使用 maf重构
This commit is contained in:
62
Service/AgentFramework/ParsingAgent.cs
Normal file
62
Service/AgentFramework/ParsingAgent.cs
Normal file
@@ -0,0 +1,62 @@
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user