fix missing parameter promote
This commit is contained in:
parent
cc36b8bd01
commit
e4fe4b2a1e
|
|
@ -85,7 +85,6 @@ namespace BotSharp.Core.Engines
|
|||
public void TrainWithContexts()
|
||||
{
|
||||
var corpus = agent.GrabCorpus(dc);
|
||||
|
||||
var client = new RestClient($"{Database.Configuration.GetSection("Rasa:Nlu").Value}");
|
||||
|
||||
var contextHashs = corpus.UserSays
|
||||
|
|
@ -95,10 +94,25 @@ namespace BotSharp.Core.Engines
|
|||
|
||||
contextHashs.ForEach(ctx =>
|
||||
{
|
||||
var common_examples = corpus.UserSays.Where(x => x.ContextHash == ctx || x.ContextHash == Guid.Empty.ToString("N")).ToList();
|
||||
|
||||
// assemble entity and synonyms
|
||||
var usedEntities = new List<String>();
|
||||
common_examples.ForEach(x =>
|
||||
{
|
||||
if (x.Entities != null)
|
||||
{
|
||||
usedEntities.AddRange(x.Entities.Select(y => y.Entity));
|
||||
}
|
||||
});
|
||||
usedEntities = usedEntities.Distinct().ToList();
|
||||
|
||||
var entity_synonyms = corpus.Entities.Where(x => usedEntities.Contains(x.EntityType)).ToList();
|
||||
|
||||
var data = new RasaTrainingData
|
||||
{
|
||||
Entities = corpus.Entities,
|
||||
UserSays = corpus.UserSays.Where(x => x.ContextHash == ctx).ToList()
|
||||
Entities = entity_synonyms,
|
||||
UserSays = common_examples
|
||||
};
|
||||
|
||||
// meet minimal requirement
|
||||
|
|
|
|||
|
|
@ -44,10 +44,10 @@ namespace BotSharp.Core.Engines
|
|||
aiResponse.Timestamp = DateTime.UtcNow;
|
||||
|
||||
var intentResponse = HandleIntentPerContextIn(rasa, request, result.Data);
|
||||
bool missedRequiredField = HandleParameter(rasa.agent, intentResponse, response, request);
|
||||
HandleParameter(rasa.agent, intentResponse, response, request);
|
||||
|
||||
HandleMessage(intentResponse);
|
||||
|
||||
|
||||
aiResponse.Result = new AIResponseResult
|
||||
{
|
||||
Source = "agent",
|
||||
|
|
@ -137,7 +137,7 @@ namespace BotSharp.Core.Engines
|
|||
|
||||
var intent = (dc.Table<Intent>().Where(x => x.AgentId == rasa.agent.Id && x.Name == response.Intent.Name)
|
||||
.Include(x => x.Responses).ThenInclude(x => x.Contexts)
|
||||
.Include(x => x.Responses).ThenInclude(x => x.Parameters)
|
||||
.Include(x => x.Responses).ThenInclude(x => x.Parameters).ThenInclude(x => x.Prompts)
|
||||
.Include(x => x.Responses).ThenInclude(x => x.Messages)).First();
|
||||
|
||||
var intentResponse = ArrayHelper.GetRandom(intent.Responses);
|
||||
|
|
@ -155,9 +155,9 @@ namespace BotSharp.Core.Engines
|
|||
/// <param name="response"></param>
|
||||
/// <param name="request"></param>
|
||||
/// <returns>Required field is missed</returns>
|
||||
private static bool HandleParameter(Agent agent, IntentResponse intentResponse, RasaResponse response, AIRequest request)
|
||||
private static void HandleParameter(Agent agent, IntentResponse intentResponse, RasaResponse response, AIRequest request)
|
||||
{
|
||||
if (intentResponse == null) return false;
|
||||
if (intentResponse == null) return;
|
||||
|
||||
intentResponse.Parameters.ForEach(p => {
|
||||
string query = request.Query.First();
|
||||
|
|
@ -193,15 +193,29 @@ namespace BotSharp.Core.Engines
|
|||
}
|
||||
}
|
||||
});
|
||||
|
||||
return intentResponse.Parameters.Any(x => x.Required && String.IsNullOrEmpty(x.Value));
|
||||
}
|
||||
|
||||
private static void HandleMessage(IntentResponse intentResponse)
|
||||
{
|
||||
if (intentResponse == null) return;
|
||||
|
||||
intentResponse.Messages = intentResponse.Messages.OrderBy(x => x.UpdatedTime).ToList();
|
||||
var missingRequiredParameter = intentResponse.Parameters.FirstOrDefault(x => x.Required && String.IsNullOrEmpty(x.Value));
|
||||
if (missingRequiredParameter != null)
|
||||
{
|
||||
intentResponse.Messages = new List<IntentResponseMessage> {
|
||||
new IntentResponseMessage {
|
||||
Type = AIResponseMessageType.Text,
|
||||
Speech = ArrayHelper.GetRandom(missingRequiredParameter.Prompts).Prompt,
|
||||
IntentResponseId = intentResponse.Id,
|
||||
UpdatedTime = DateTime.UtcNow
|
||||
}
|
||||
};
|
||||
}
|
||||
else
|
||||
{
|
||||
intentResponse.Messages = intentResponse.Messages.OrderBy(x => x.UpdatedTime).ToList();
|
||||
}
|
||||
|
||||
intentResponse.Messages.ToList()
|
||||
.ForEach(msg =>
|
||||
{
|
||||
|
|
|
|||
Loading…
Reference in a new issue