diff --git a/BotSharp.Core/BotSharp.Core.csproj b/BotSharp.Core/BotSharp.Core.csproj index 0e69260c..b73445d2 100644 --- a/BotSharp.Core/BotSharp.Core.csproj +++ b/BotSharp.Core/BotSharp.Core.csproj @@ -13,18 +13,23 @@ Haiping Chen BotSharp.Core - Upgrade .Net Core to 2.1 + Open source chatbot platform written in C#. Ready for enterprise. MIT https://github.com/Oceania2018/BotSharp NLU, Chatbot, Bot, AI Bot - 1.2.0 - Support Rasa NLU 0.12.x + 1.3.0 + Add NLP pipeline. Support training model by input context. Since 2018 Haiping Chen https://github.com/Oceania2018/BotSharp + 1.3.0.0 - TRACE;DEBUG;MODEL_PER_CONTEXTS + TRACE;MODEL_PER_CONTEXTS;NETCOREAPP;NETCOREAPP2_1 + + + + TRACE;MODEL_PER_CONTEXTS diff --git a/BotSharp.Core/Engines/RequestExtension.cs b/BotSharp.Core/Engines/RequestExtension.cs index 0854d3f4..10396bf8 100644 --- a/BotSharp.Core/Engines/RequestExtension.cs +++ b/BotSharp.Core/Engines/RequestExtension.cs @@ -36,6 +36,8 @@ namespace BotSharp.Core.Engines #else var result = CallRasa(rasa.agent.Id, request.Query.First(), rasa.agent.Id); #endif + result.Content.Log(); + RasaResponse response = result.Data; aiResponse.Id = Guid.NewGuid().ToString(); aiResponse.Lang = rasa.agent.Language; diff --git a/BotSharp.Core/Engines/SpaCy/SpaCyEntityRecognizer.cs b/BotSharp.Core/Engines/SpaCy/SpaCyEntityRecognizer.cs new file mode 100644 index 00000000..d0fd5587 --- /dev/null +++ b/BotSharp.Core/Engines/SpaCy/SpaCyEntityRecognizer.cs @@ -0,0 +1,44 @@ +using BotSharp.Core.Abstractions; +using BotSharp.Core.Agents; +using Microsoft.Extensions.Configuration; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; +using RestSharp; +using System; +using System.Collections.Generic; +using System.Text; + +namespace BotSharp.Core.Engines.SpaCy +{ + public class SpaCyEntityRecognizer : INlpPipeline + { + List entitiesInTrainingSet = new List(); + public IConfiguration Configuration { get; set; } + + public bool Process(Agent agent, JObject data) + { + String modelPath = "./entity_rec_output"; + String newModelName = "test"; + String outputDir = "./entity_rec_output2"; + int iterTimes = 20; + + agent.Entities.ForEach(entity => entitiesInTrainingSet.Add(entity.Name)); + var client = new RestClient(Configuration.GetSection("SpaCyProvider:Url").Value); + var request = new RestRequest("entityrecognizer", Method.POST); + request.RequestFormat = DataFormat.Json; + + request.AddParameter("application/json", JsonConvert.SerializeObject(new { ModelPath = modelPath, NewModelName = newModelName, OutputDir = outputDir, IterTimes = iterTimes, EntitiesInTrainingSet = entitiesInTrainingSet }), ParameterType.RequestBody); + + var response = client.Execute(request); + + data["EntityModelTrained"] = response.Data.EntityModelTrained; + + return true; + } + } + + public class Result + { + public Boolean EntityModelTrained { get; set; } + } +} diff --git a/BotSharp.UnitTest/AgentTest.cs b/BotSharp.UnitTest/AgentTest.cs index 766f0723..7853cbab 100644 --- a/BotSharp.UnitTest/AgentTest.cs +++ b/BotSharp.UnitTest/AgentTest.cs @@ -7,6 +7,7 @@ using Microsoft.EntityFrameworkCore; using Microsoft.VisualStudio.TestTools.UnitTesting; using System; using System.Collections.Generic; +using System.IO; using System.Linq; using System.Text; @@ -50,7 +51,7 @@ namespace BotSharp.UnitTest var rasa = new RasaAi(dc); var importer = new AgentImporterInDialogflow(); - string dataDir = $"{Database.ContentRootPath}\\App_Data\\DbInitializer\\Agents\\"; + string dataDir = $"{Database.ContentRootPath}App_Data{Path.DirectorySeparatorChar}DbInitializer{Path.DirectorySeparatorChar}Agents{Path.DirectorySeparatorChar}"; var agent = rasa.RestoreAgent(importer, BOT_NAME, dataDir); agent.Id = BOT_ID; agent.ClientAccessToken = BOT_CLIENT_TOKEN; diff --git a/BotSharp.UnitTest/Settings/settings.bot.json b/BotSharp.UnitTest/Settings/settings.bot.json index 596c6c28..1cbbe994 100644 --- a/BotSharp.UnitTest/Settings/settings.bot.json +++ b/BotSharp.UnitTest/Settings/settings.bot.json @@ -9,6 +9,6 @@ "SpaCyProvider": { "Url": "http://10.2.21.200:5005" }, - "Pipe": "SpaCyTokenizer, SpacyFeaturizer, SpaCyEntitizer, SpaCyTextCategorizer" + "Pipe": "SpaCyTokenizer, SpacyFeaturizer, SpaCyEntitizer, SpaCyTextCategorizer, SpaCyEntityRecognizer" } }