再次感谢您在nlp.js上所做的出色工作,它非常庞大!
是否有办法在使用该库时使用后续意图(对话树)?
后续意图在其先前意图的上下文中有意义。例如:
用户:JavaScript有lambda函数吗?
机器人:是的,自ES6以来就有箭头函数。您想了解更多吗?
用户:是的
机器人:让我告诉您关于它的所有信息......
“是”的答案是针对后续意图的,而在不同的意图下,“是”的意义会有所不同。
我已经查看了源代码,似乎没有支持这方面的功能。在这种情况下,如果核心开发人员需要帮助,我将很高兴提供帮助并合作开发这个功能。
8条答案
按热度按时间dfuffjeb1#
简短回答:这个库是一个NLP库,而不是一个聊天机器人编排器,我们建议使用Microsoft Bot Framework来实现。
长答案:我正在准备一个聊天机器人编排器,这将是版本5的主要功能,但也可以在版本4中使用。这里有一个示例:https://github.com/jesus-seijas-sp/nlpjs-examples/tree/master/04.bot
示例的解释:
有一个脚本script.dlg,它是机器人的编排器,这是其内容:
这里的不同命令有:
你会在语料库中看到这个:
答案/hellodialog`表示,而不是对用户说些什么,它将触发名为"hellodialog"的对话。
我们从IoC容器中检索机器人,并注册一个名为uppers的操作,该操作将传递一个变量名并将其转换为大写。
如果你执行这段代码并转到 http://localhost:3000 ,你将能够看到类似这样的东西:
你有问题和答案,但是意图"hello"触发了这个编排好的对话。
ff29svar2#
你好,Jesus,
感谢你快速的回复,祝你在巴塞罗那一切顺利。我有一些朋友在那里学习,他们喜欢这个城市和这里的人。
你的工作非常出色,我一定会尝试这个例子看看它是如何工作的。我在包中看到了代码,很高兴能得到更多的清晰度。
阅读了代码后,对我来说,它不是立刻就很明显地告诉我如何使用常规语料库。如果机器人对话只针对特定的情况触发,或者所有语料库都需要在机器人中进行Map。但我会通过玩弄代码来找出答案。
另外,它是可以与网络构建一起使用的吗?还是只能作为基本包的扩展?
谢谢!
马丁
wbrvyc0a3#
你好,
在本周,我将发布这部分的进展,但作为对你问题的回答:机器人类从容器中获取fs,因此如果你想的话,它可以在网络上工作。我现在正在进行的进展是与NER的集成,并使用自定义NER来实现诸如"askDate"或"askEmail"的功能。此外还有一个基于@nlpjs/basic的webbot包,因此它不会在前端工作,但可以从文件夹结构中自动加载所有内容。
6rqinv9w4#
你好,Martin和Jesus,
感谢你们在NLP.JS上所做的出色工作!
马丁 -我一直在尝试使用你们的nlpjs-web,并希望在其中加入一个script.dlg,以及相应的corpus.dlg和conf.json文件。我该如何做到这一点?
伊恩
wnvonmuf5#
你好,@archegyral ,
在由Jesus提供的example中,您可以看到如何在conf.json中指定脚本位置。语料库是从脚本.dlg文件本身导入的。
gijlo24d6#
感谢@jordi-carbonell -我已经按照传统方式使用Directline Connector运行了.dlg文件。
我想做的是将这部分内容融入到@MeetMartin的工作成果中,他在https://betterprogramming.pub/natural-language-processing-in-the-browser-8ca5fdf2488b上发表了一篇很棒的文章,所以我可以像Martin展示的那样在浏览器中运行nlp.js,同时也要将.dlg文件的使用纳入其中。
u7up0aaq7#
你好@archegyral,
作为一个提示,如果你检查bot.js(loadScript)和dialog-parse.js,你会看到fs插件是用来加载脚本的:
nlp.js/packages/bot/src/bot.js
第438行到第440行
| | asyncloadScript(fileName){ |
| | constfs=this.container.get('fs'); |
| | constscript=awaitloadScript(fileName,fs); |
所以也许注册一个能够在需要时返回脚本内容的fs插件,会帮助你得到你想要的。
fykwrbwg8#
感谢@aigloss的提示,这非常有帮助,尽管我不太确定如何做到这一点。我会尝试一下,如果你们有任何进一步的提示,将非常受欢迎。