ChatRAG/Settings/ConfidenceSettings.cs
2025-06-22 19:58:43 -03:00

127 lines
5.4 KiB
C#

using System.ComponentModel.DataAnnotations;
namespace ChatRAG.Settings
{
/// <summary>
/// Configurações para verificação de confiança por estratégia
/// </summary>
public class ConfidenceSettings
{
public bool StrictModeByDefault { get; set; } = true;
[Required]
public Dictionary<string, ConfidenceThresholds> Thresholds { get; set; } = new()
{
["overview"] = new ConfidenceThresholds
{
MinDocuments = 5,
MinRelevantDocuments = 3,
MinHighQualityDocuments = 1,
MinContextLength = 1000,
MinOverallScore = 0.3,
MinMaxScore = 0.4,
MinAverageScore = 0.3
},
["specific"] = new ConfidenceThresholds
{
MinDocuments = 2,
MinRelevantDocuments = 2,
MinHighQualityDocuments = 1,
MinContextLength = 500,
MinOverallScore = 0.4,
MinMaxScore = 0.5,
MinAverageScore = 0.4
},
["detailed"] = new ConfidenceThresholds
{
MinDocuments = 3,
MinRelevantDocuments = 2,
MinHighQualityDocuments = 2,
MinContextLength = 800,
MinOverallScore = 0.5,
MinMaxScore = 0.6,
MinAverageScore = 0.5
}
};
/// <summary>
/// Mensagens de fallback por idioma
/// </summary>
public Dictionary<string, ConfidenceFallbackMessages> FallbackMessages { get; set; } = new()
{
["pt"] = new ConfidenceFallbackMessages
{
NoDocuments = "Não encontrei informações sobre isso no projeto atual. Você poderia reformular a pergunta ou ser mais específico?",
NoRelevantDocuments = "Encontrei alguns documentos, mas nenhum parece diretamente relacionado à sua pergunta. Pode tentar ser mais específico ou usar outras palavras-chave?",
InsufficientOverview = "Não tenho informações suficientes para fornecer uma visão geral completa do projeto. Talvez você possa fazer uma pergunta mais específica?",
InsufficientSpecific = "Não encontrei documentação suficiente sobre esse tópico específico. Você pode tentar reformular a pergunta?",
InsufficientDetailed = "Preciso de mais contexto técnico para responder adequadamente. Você pode ser mais específico sobre o que está procurando?",
Generic = "Não tenho informações suficientes para responder com segurança. Pode tentar reformular a pergunta?"
},
["en"] = new ConfidenceFallbackMessages
{
NoDocuments = "I couldn't find information about this in the current project. Could you rephrase the question or be more specific?",
NoRelevantDocuments = "I found some documents, but none seem directly related to your question. Could you try being more specific or use different keywords?",
InsufficientOverview = "I don't have enough information to provide a complete project overview. Perhaps you could ask a more specific question?",
InsufficientSpecific = "I didn't find sufficient documentation about this specific topic. Could you try rephrasing the question?",
InsufficientDetailed = "I need more technical context to respond adequately. Could you be more specific about what you're looking for?",
Generic = "I don't have enough information to respond safely. Could you try rephrasing the question?"
}
};
}
/// <summary>
/// Thresholds de confiança para uma estratégia específica
/// </summary>
public class ConfidenceThresholds
{
/// <summary>
/// Número mínimo de documentos encontrados
/// </summary>
public int MinDocuments { get; set; }
/// <summary>
/// Número mínimo de documentos relevantes (score >= 0.3)
/// </summary>
public int MinRelevantDocuments { get; set; }
/// <summary>
/// Número mínimo de documentos de alta qualidade (score >= 0.6)
/// </summary>
public int MinHighQualityDocuments { get; set; }
/// <summary>
/// Tamanho mínimo do contexto combinado (caracteres)
/// </summary>
public int MinContextLength { get; set; }
/// <summary>
/// Score geral mínimo (0.0 a 1.0)
/// </summary>
public double MinOverallScore { get; set; }
/// <summary>
/// Score máximo mínimo entre os documentos encontrados
/// </summary>
public double MinMaxScore { get; set; }
/// <summary>
/// Score médio mínimo entre os documentos encontrados
/// </summary>
public double MinAverageScore { get; set; }
}
/// <summary>
/// Mensagens de fallback quando não há confiança suficiente
/// </summary>
public class ConfidenceFallbackMessages
{
public string NoDocuments { get; set; } = "";
public string NoRelevantDocuments { get; set; } = "";
public string InsufficientOverview { get; set; } = "";
public string InsufficientSpecific { get; set; } = "";
public string InsufficientDetailed { get; set; } = "";
public string Generic { get; set; } = "";
}
}