我有一个简单的表格,
[Serializable]
class CreateNewLeadForm
{
public string FirstName;
public string LastName;
public static IForm<CreateNewLeadForm> BuildForm()
{
return new FormBuilder<CreateNewLeadForm>()
.Message("Lets create a New Lead")
.Field(nameof(FirstName))
.Field(nameof(LastName))
.Build();
}
};
Run Code Online (Sandbox Code Playgroud)
还有一个简单的对话框,
public class GreetDialog : IDialog<object>
{
public async Task StartAsync(IDialogContext context)
{
context.Wait(MessageReceivedAsync);
}
public async Task MessageReceivedAsync(IDialogContext context, IAwaitable<Message> argument)
{
context.Wait(MessageReceivedAsync);
}
}
Run Code Online (Sandbox Code Playgroud)
如何从主对话本身调用启动FormDialog?一般来说,我们如何在Dialog中开始新的对话框?
我尝试了下面的代码,这是我在模拟器中得到的输出
message.Attachments.Add(new Attachment()
{
ContentUrl = $"data:image/jpeg;base64,xxxx"
});
我想使用Microsoft Bot Framework为我正在构建的应用程序构建一个聊天机器人,我不希望它在Skype,Facebook或任何其他渠道中工作.
那可能吗?是否涉及成本.
c# artificial-intelligence chatbot botframework botconnector
我正在尝试使用LUIS构建一个机器人,但它比我想象的要难得多.到目前为止,我已经设法创建我的LUIS应用程序并创建一个Intent和一个实体,我创建了一些似乎工作正常的话语.
然后我创建了我的机器人,并将它连接到路易斯.当我测试我的机器人时,它按预期工作.现在是有趣的部分.我想处理参数.在Luis上我向我的意图添加了一个动作:
如您所见,我添加了提示.我机器人中的代码目前看起来像这样:
/// <summary>
/// Tries to find the category
/// </summary>
/// <param name="result">The Luis result</param>
/// <param name="alarm"></param>
/// <returns></returns>
public string TryFindCategory(LuisResult result)
{
// Variable for the title
EntityRecommendation title;
// If we find our enenty, return it
if (result.TryFindEntity(PiiiCK.Category, out title))
return title.Entity;
// Default fallback
return null;
}
[LuisIntent("Choose category")]
public async Task ChooseCategory(IDialogContext context, LuisResult result)
{
// Get our category
var category = …Run Code Online (Sandbox Code Playgroud) 我有一个机器人,它使用.NET,MS Bot框架和LUIS.ai为它的智能.
一切都很好,除了我需要为非技术用户提供一种方法来训练机器人并教它新的东西,即LUIS.ai中的新意图.
换句话说,假设现在机器人可以用简单的包含方向的短语来回答诸如"嘿机器人我可以在哪里喝咖啡"和"我在哪里可以买些衣服"等消息.非技术用户需要能够训练它来回答"我在哪里可以获得一些食物".
这是我考虑过的:
继续使用LUIS.ai. 不起作用,因为LUIS.ai没有API.它最好的是用于优化现有意图的GUI,以及上传应用程序/短语列表功能.如果带有应用程序的JSON文件可以由我编写的某个应用程序生成,则该过程可以是半自动的; 但是,仍然需要有处理新意图的后端代码,并且必须由C#编码器实现.
如果我从C#切换到Node.js,它可以工作吗?然后理论上我将能够自动生成代码文件/意图处理程序.
Azure Bot服务.似乎它没有非技术接口,只是一个基于浏览器的IDE.
彻底抛弃机器人框架并使用第三方工具,如motion.ai.不起作用,因为没有LUIS.ai提供的"智力".
使用表单流程,它是Bot Framework的一部分.如果我的GUI bot构建器应用程序可以生成JSON文件,Bot Framework可以使用这些文件自动构建机器人.不起作用,因为没有像LUIS.ai那样的智力.
继续使用Bot Framework,但抛弃LUIS并基于node.js语言处理库构建单独的Web服务以确定意图.可能或可能不起作用,可能不如LUIS聪明,并且可能是一种矫枉过正.
覆盖方法,LuisDialog从中选择意图LuisResponse,以便用我自己的方式来决定意图(但是如何?).
在这一点上,我没有想法,任何指针将不胜感激.
我们构建了一个MS Bot Framework bot,它在会话期间使用我们现有的内部本地API.我们想通过将Web Chat组件放入我们现有的面向内部的本地应用程序的DOM中来发布此bot .
使用我们现有的架构,我们自然也希望在内部托管这个机器人 -利用我们现有的所有配置和部署流程.我们理解,无论如何,机器人都必须与LUIS沟通 - 这对我们来说很好; 它不需要Azure的更复杂(更大的攻击面,更少的中央IT支持)设置直接连接到我们的内部业务数据API.
我认为这个图表更加清晰:
编辑1:我们是否可以在本地托管直接线路或类似的连接器而无需编写自定义连接器?另外,我们可以通过这样的连接器与我们的机器人聊天,而无需为DOM编写自定义聊天组件/小部件吗?(只要指向我们的频道,网络聊天组件就可以正常工作.)
这里的最终目标是让我们的所有聊天流量保持在本地,因为这是一个数据驱动的聊天机器人,提供敏感数字.在另一个可以完全在本地运行的框架中重新开发它,而不是从我们的中央IT部门获得批准,这将花费更少的时间.
附注:我知道Azure Stack Preview.最低硬件要求(也可能是订阅成本)极端矫枉过正.(毕竟我们正在谈论一个Node应用程序.)
这不是这个问题的重复,因为这个问题还解决了直接/线路连接器本地托管的关键元素,其他问题假设连接器仍然可以在Azure上运行.
azure node.js botframework azure-language-understanding direct-line-botframework
我正在使用Node js构建聊天机器人。
我目前正在将会话数据存储到Microsoft默认存储中,每个用户会话的限制为64K。我想使用自己的存储设备来存储会话数据。这是我从Microsoft开发人员那里获得的帮助。
我能够存储在文档数据库和Azure表中。
不过,我还是很困惑。我们将如何实现IStorageClient存储在自己的数据库中的接口?
无论何时设置,session.UserData.name=""它都应存储在自己的数据库中。
我正在尝试从Luis创建一个子对话框,旨在从用户那里收集更多信息.但是我收到了一个无法从'方法组'转换为'ResumeAfter <object>'上下文的第二个参数的错误消息.
[LuisIntent("Login")]
public async Task LoginIntent(IDialogContext context, LuisResult result)
{
var serverdialog = new ServerDialog();
await context.Call(serverdialog, ResumeAfterServerDialog); //error here
}
private async Task ResumeAfterServerDialog(IDialogContext context, IAwaitable<string> serverName)
{
this.serverAddress = await serverName;
await context.PostAsync($"you've entered {this.serverAddress}");
context.Wait(MessageReceived);
}
Run Code Online (Sandbox Code Playgroud)
服务器对话框类是
[Serializable]
public class ServerDialog : IDialog<object>
{
public async Task StartAsync(IDialogContext context)
{
await context.PostAsync("Enter your server's name (example: 10.10.10.52)");
context.Wait(ReceiveServerDialog);
}
public async Task ReceiveServerDialog(IDialogContext context, IAwaitable<IMessageActivity> result)
{
IMessageActivity message = await result;
context.Done(message.Text);
}
}
Run Code Online (Sandbox Code Playgroud)
我找到了一个解释说: …
我们正在LUIS/Microsoft Bot框架上构建产品,我们对其中一个疑问就是人名理解.只要注册我们的网站,任何人都可以使用该产品.这意味着任何正在注册的公司都可以拥有任意数量的员工.
我们理解的是用户实体无法识别所有名称.我们已经创建了一个短语列表,但据我们所知,短语列表有限制(10K或者即使它的100K)并且世界上的名称永远不会有限制.我们想到的另一种方式是不用话语训练实体.但是,如果我们拥有100个拥有1000个用户的客户,那么在这种情况下,话语就不是一个好主意.
我没有看到任何其他处理这种情况的方法.可能我在这里遗漏了一些东西?任何人遇到类似的问题以及如何处理?
最糟糕的情况是为每个客户创建一个单独的LUIS实例,但这只是因为我们无法处理名称而完成的任务.
我正在关注NodeJs的Microsoft Bot Builder(SDK v3)的官方快速启动: 使用针对Node.js的Bot Builder SDK创建一个bot
1-我用了一个新项目
npm init
2-然后
npm install --save botbuilder
3-然后我创建了一个新文件"app.js"
var builder = require('botbuilder');
var connector = new builder.ConsoleConnector().listen();
var bot = new builder.UniversalBot(connector, function (session) {
session.send("You said: %s", session.message.text);
});
Run Code Online (Sandbox Code Playgroud)
但是当我运行"node app.js"时,会抛出以下错误:
var connector = new builder.ConsoleConnector().listen();
^
TypeError: builder.ConsoleConnector is not a constructor
Run Code Online (Sandbox Code Playgroud)
有人可以帮帮我吗?
我的项目结构:
botframework ×10
azure-language-understanding ×5
c# ×4
node.js ×3
botconnector ×2
azure ×1
bots ×1
chatbot ×1