A framework to allow a computer to understand and interpret a request and respond accordingly. With an open-ended custom ruleset and a middleware plugin architecture, a developer can build their own custom flavor of intelligence, effectively enabling the construction of a diverse range of artificial intelligence.
Using npm:
npm install intellect
The core library is a skeleton facilitating for the arbitrary inclusion of logic processes, using a middleware architecture.
var Intellect = require("intellect"),
math = require("intellect-math");
// init Intellect
var intellect = Intellect( options );
// middleware
intellect.use( math() );
// then later, in the context of a request
intellect.process(data, function(req, res){
// req, res are created by intellect (not extending express objects)
// response is saved in res.data
console.log( res.data );
});
When initiating the lib you may use any of these configuration options:
- formats (Default: ["text"]), the input/output types expected to be used Currently only text is supported.
- data (Default: null), provided data, used when intellect is in "active" mode. (described below)
- interpreter (Default: false), an application method that can relate the response data (~tags) to a dialog string
The majority of the logic is externalized in separate modules. This is done for a number of reasons, a few of which are:
- So the modules can be replaced, allowing a variaty of AI "flavors"
- The logic can be dynamically enabled/disabled during runtime
- Each logical branch is developed independently
Each middleware can affect both the request and the response object; defining on the one hand the type of the request and extracting useful metadata, and updating, adding or even deleting the descriptive tags in the response.
Officially supported modules are available at: https://github.com/intellect-modules
After the request is processed and the middleware have completed "tweaking" the response's meta data, picking the right dialog line is the final step. To allow the selection in a non-restrictive manner, there are two distinct methods this can be achieved:
When an interpreter method is included in the options, the library enters "passive" mode to allow a third-party method declare which data matches the described response. Primary role in this mode play the type
of the response and the tags assigned to it.
In this mode the lib will attempt to pick a specific response. To achieve that it will expect the data fed using a specific schema, like this:
{
"text": "I am a bot",
"audio": "/path/to/file",
"type": "awareness",
"tags": [
"name"
]
}
If this mode seems too restrictive the former mode is recommended.
Initiated by Makis Tracend
Distributed through Makesites.org