namespace Service.AgentFramework;
///
/// AI 工具集
///
public interface IAITools
{
///
/// AI 分类决策
///
Task ClassifyTransactionsAsync(
string systemPrompt,
string userPrompt);
}
///
/// AI 工具实现
///
public class AITools(
IOpenAiService openAiService,
ILogger logger
) : IAITools
{
public async Task ClassifyTransactionsAsync(
string systemPrompt,
string userPrompt)
{
logger.LogInformation("调用 AI 进行账单分类");
var response = await openAiService.ChatAsync(systemPrompt, userPrompt);
if (string.IsNullOrWhiteSpace(response))
{
logger.LogWarning("AI 返回空响应");
return Array.Empty();
}
// 解析 NDJSON 格式的 AI 响应
var results = new List();
var lines = response.Split(new[] { '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries);
foreach (var line in lines)
{
if (string.IsNullOrWhiteSpace(line))
continue;
try
{
using var doc = JsonDocument.Parse(line);
var root = doc.RootElement;
var result = new ClassificationResult
{
Reason = root.GetProperty("reason").GetString() ?? string.Empty,
Classify = root.GetProperty("classify").GetString() ?? string.Empty,
Type = (TransactionType)root.GetProperty("type").GetInt32(),
Confidence = 0.9 // 可从 AI 响应中解析
};
results.Add(result);
}
catch (JsonException ex)
{
logger.LogWarning(ex, "解析 AI 响应行失败: {Line}", line);
}
}
logger.LogInformation("AI 分类完成,得到 {Count} 条结果", results.Count);
return results.ToArray();
}
}