我正在开发一个使用聊天机器人的应用程序。它将部分运行在我训练过的LUIS数据集上,部分运行在AIML上,以防我没有任何相关的响应。
以下是该文件中的一段代码。我基本上是尝试从LUIS获取实体类型,如果它什么也没有返回,那么尝试运行AIML。
但它一直在抛出未处理的异常: 未处理的类型' System.ArgumentNullException'发生在mscorlib.dll中 附加信息:值不能为空。
我从另一个项目中获取了这个AIML代码。这是链接: https://github.com/Gr8z/ChatBotProject
异常发生在行:AimlBot.loadSettings();
这里是异常的堆栈跟踪:
at System.IO.Path.Combine(String path1,String path2)
at AIMLbot.Bot.get_PathToConfigFiles();
at AIMLbot.Bot.loadSettings(String pathToSettings)
at WDB.Chatbot.AIMLChatbot.Initialize() in
E:\WDB-master\WDB\manishChatBot.cs:line 229
源代码:
#region LUIS Link
private string luisLink(string usrInput)
{
string input = usrInput;
string op = wb.DownloadString("https://westus.api.cognitive.microsoft.com/luis/v2.0/apps/15c6bd2a-ecdc-41de-a054-0cce461e13a3?subscription-key=b72bdbb572fe4e90837647eb9c82b1c0&verbose=true&timezoneOffset=0&q=" + input);
var jsonParse = JsonConvert.DeserializeObject<JClass>(op);
if (jsonParse.entities.Count != 0)
{
entity = jsonParse.entities[0].type;
return entity;
}
else
{
AIMLChatBot a = new AIMLChatBot();
string aiml_response = a.getOutput(input);
return aiml_response;
}
}
#endregion
#region AIML
public class AIMLChatBot
{
const string UserId = "szabist";
private Bot AimlBot;
private User myUser;
public AIMLChatBot()
{
AimlBot = new Bot();
myUser = new User(UserId, AimlBot);
Initialize();
}
// Loads all the AIML files in the \AIML folder
public void Initialize()
{
AimlBot.loadSettings(); //Exception on this line
AimlBot.isAcceptingUserInput = false;
AimlBot.loadAIMLFromFiles();
AimlBot.isAcceptingUserInput = true;
}
// Given an input string, finds a response using AIMLbot lib
public String getOutput(String input)
{
Request r = new Request(input, myUser, AimlBot);
Result res = AimlBot.Chat(r);
return (res.Output);
}
}
#endregion
答案 0 :(得分:2)
我按照给定的链接:https://github.com/Gr8z/ChatBotProject并下载了AIMLBot.dll
文件,该文件具有方法AimlBot.loadSettings();
的实现。
在亲自编译文件时,我发现了类似这样的实现:
因此,我建议检查您的../bin/Debug/中是否有 config / Settings.xml 文件或程序所在的目录。
程序无法找到该文件的位置,因为它会为您提供Null Argument Exception。