DTask is a dialogue planner designed to model and execute system-directed dialogue, with multiple-choice user input. Dialogue is specified declaratively, as a hierarchical task decomposition. It is designed to model and execute system-directed dialogue, where user input is performed via selection from a multiple choice menu of possible utterances, dynamically updated at each turn of the dialogue. DTask uses a CEA-2018 recipe library to plan a task decomposition for each segment of a dialogue. DTask provides support for loading and saving data and metadata represented in Resource Description Framework (RDF) at runtime.
Instructions for setting up the DTask system:
The following jar files must be in the same directory.
Some are only required on Java 1.5 (but can be included
on Java 1.6). All of these should be included
with this distribution:
From Oracle site, download the following files:
- jsr173_api.jar (required for Java 1.5)
- sjsxp.jar (required for Java 1.5)
From Mozilla site, download the following files:
- js.jar (required for Java 1.5)
- js-engine5.jar (required for Java 1.5)
From Thai Open Source Software Center Ltd site, download the source files to build the jar:
- jing.jar (required for all)
It responds to the following commands:
First, you'll want to add dtask.jar and all its dependencies to the WEB-INF/lib directory of your servlet. Next, add any DTask model files somewhere within your servlet. Conventionally, we use WEB-INF/models for this purpose, but anything should work.
Finally, you'll need to include some parameters in the web.xml file. The parameter "webframe.dialogue-manager" should be set to "edu.neu.ccs.task.web.DTaskManager"; this tells Litebody to use DTask as its dialogue manager. There are also a number of DTask-specific parameters to set:
| Property | Default | Description |
|---|---|---|
| dtask.models | REQUIRED | a whitespace-separated list of paths (within the servlet directories) to DTask model files |
| dtask.top-task | Top | the name of the top-level task for a conversations |
| dtask.top-input.SLOT-NAME | NONE | allows you to bind input slots of the top-level task. |
| dtask.persistence | NONE | fully-qualified name of an implementation of the Persistence interface; this is optional, but can be used to save a user model after conversations, and load it again later. |
The xml file below shows an example of a fragment of a DTask dialogue model. This example implements a task (“RitualIntro”) which is a short ritualized greeting to the user. There is one recipe provided which can achieve this task (“DoRitualIntro”), consisting of two subtasks (“HowAreYou” and “RespondToIntro”).
Tasks can have locally-scoped input and output parameters. The “HowAreYou” task has one output slot, which defines the semantics of the user’s utterance which will be represented. In this case, the semantics is simply a boolean value representing whether the user asked a reciprocal question of the agent.
The “RespondToIntro” task has one input parameter, and constraints on the recipe are used to bind the output of the earlier task to this input. The example shows one dialogue turn which can be used to achieve this task in the case where the user requested a reciprocal response. There may be any number of other dialogue turns specified with different applicability conditions.
<task id=”RitualIntro”/>
<subtasks id=”DoRitualIntro” goal=”RitualIntro”>
<step name=”ask” task=”HowAreYou”/>
<step name=”respond” task=”RespondToIntro”/>
<binding slot=”$respond.reciprocal” value=”$ask.reciprocal”/>
</subtasks>
<task id=”HowAreYou”>
<output name=”reciprocal” type=”boolean”/>
<d:turn>
<d:agent>Hi {USER.name}. How are you?</d:agent>
<d:user>
<d:say>I’m good. How are you?</d:say>
<d:result slot=”reciprocal” value=”true”/>
</d:user>
<d:user>
<d:say>Good.</d:say>
<d:result slot=”reciprocal” value=”false”/>
</d:user>
</d:turn>
</task>
<task id=”RespondToIntro”>
<input name=”reciprocal” type=”boolean”/>
<d:turn>
<applicable>$this.reciprocal</applicable>
<d:agent>Great. Thanks for asking!</d:agent>
…
We also request that any publications covering work based on DTask cite the Bickmore, et al, 2011 JBI paper (above).