mycroft-core 一致性Voight-Kampff步骤

gpfsuwkq  于 5个月前  发布在  其他
关注(0)|答案(6)|浏览(118)

问题/不一致性

目前,Voight Kampff步骤的结构/措辞似乎有些不一致。我在研究如何实施一些关于语言和技能设置的改进时注意到了这一点。
修辞手法各异,措辞的顺序也不同(主语、动词、描述等)。这在不同类型的步骤之间是真实的(给定vs当vs然后),但在给定类型的步骤中也是真实的。
鉴于这个测试套件有机会扩展并成为Mycroft项目和社区开发者之间的通用接口,我认为制定关于步骤阶段结构的标准将是有帮助的。

建议的解决方案

给定步骤

当我思考给定步骤和未来的用途时,我想到了两个具体用途。

  • 设置全局设置(例如:语言、时区、设备位置)
  • 设置技能特定的设置

这个部分似乎主要是“设置场景”,即设置变量。因此,我建议我们遵循一个熟悉的结构:阶段等于x = y(为了清晰的模式添加方括号;实际测试结构中不会使用)。

  • "Given the user's [language] is [English["
  • "Given the user's [location] is [France]"
  • "Given the skill's [SETTING_NAME] is [SETTING_VALUE]"

我认为这种结构为开发人员提供了一个非常一致的模板/模式,使我们能够轻松地在未来扩展给定测试选项,同时遵循相同的基本结构。

步骤已经遵循与给定类似的模式,使用“用户”,而不是“一个/一个用户”,并以短语的主语开头。无需更改。

  • "When the user says [PHRASE]"

然后

最后一种类型的步骤,然后步骤,也为标准化提供了机会。鉴于然后步骤主要与文本/对话相关,标准化可以遵循一个相对简单的模式:

  • Then
  • Subject:['mycroft', '[SKILL_NAME]']
  • Action / Conditional:['should reply with']
  • Indirect Subject:['[EXACT_STRING]', 'dialog from file [FILE]', 'anything', 'nothing']

最后,我认为代码库中的最后一个块,致力于用户与系统的持续互动(例如:“Then the user replies with [STRING]”),应该重新归类为步骤类型。这与Behave文档相符:

Given we put the system in a known state before the user (or external system) starts interacting with the system (in the When steps). Avoid talking about user interaction in givens.

When we take key actions the user (or external system) performs. This is the interaction with your system which should (or perhaps should not) cause some state to change.

Then we observe outcomes.

由于这是一个额外的交互,它值得步骤类型。我认为这可以简洁地传达为=用户交互; 然后=系统响应。这将使我们能够简化代码库并

szqfcxe2

szqfcxe21#

我会@dschweppe,他正在审查功能文件的措辞。
您可能还想在#2547讨论中发表意见,那里也讨论了配置。

muk1a3rh

muk1a3rh2#

是的,这个问题是我最初关注的部分。我会在那里抛出一个评论。我还会稍后传递一些代码,以显示实现可能的样子。

jdgnovmf

jdgnovmf3#

首先,我想说谢谢你提供了这样一个清晰且表述明确的描述。因为在语言上添加变化很容易,所以很诱人这样做,但是有一个清晰且标准的结构肯定会让它变得更容易。即使只是阅读较长的功能文件也会更容易,当你的大脑能够识别出这些模式并更容易地浏览时。

随着When步骤的扩展,让它们遵循相同的格式会很好:

  • When
  • Actor / subject: [用户,技能,外部服务,...]
  • Action / verb: [说,问,加载,推送新数据,...]
  • Phrase / indirect subject (可选): [话语,HTTP响应代码,...]

同时同意将"Then the user replies with [STRING]"更改为"Then the user replies with [字符串]"。刚刚仔细检查了一下,似乎没有关于步骤流程的限制,例如你可以在一个场景中有以下步骤:

Given ...
When ...
Then ...
When ...
Then ...
iecba09b

iecba09b4#

使用Then代替When一定是我在实施过程中的错误,当我尝试回溯时,我得到了一个在then之后有when的错误,但它似乎可以工作,所以我一定是错了。
将它作为then步骤的唯一好处是可以使用And语法使流程更加自然。

avwztpqn

avwztpqn5#

如果你想从这个部分开始,我认为我们都同意改变。然后用户回复“当用户回复”时(我们应该将then版本保留为已弃用的向后兼容性,将在20.08中删除),以及添加建议的配置相关给定值。我本周早些时候开始对系统单元选择的配置进行工作,并将尝试完成它。
我还认为你关于如何保持一致结构的建议是有道理的,但我将把确切术语的决定留给@krisgesling和@dschweppe,因为他们:
A: 不像我一样是母语英语使用者
B: 对措辞进行了一些思考。

nle07wnf

nle07wnf6#

这些都是很好的建议。我同意使用When作为用户输入是最合适的。我们仍在讨论我们希望Then步骤(Mycroft响应)采用哪种建议方法。我们应该支持['[EXACT_STRING]', 'dialog from file [FILE]', 'anything', 'nothing'],但现在我们会鼓励人们使用'dialog from file [FILE]'。然而,我们正在考虑以更自然的方式支持编写Mycroft响应。

相关问题