actions SDK does not recognize any other intent from the action.json.
I've read that that is not a bug in this post: unable to read intents
What I don't understand is why do we have the option to define actions, if they are not recognised by the SDK?
Is there any other way to add more intents without using DialogFlow?
That is correct, it is not a bug. The Intents listed in the actions.json file are primarily used to do matching for the initial Intents (plural - they help identify which initial Intent to use if you have multiple ones defined). They can help to do conversation shaping and suggest what patterns the speech-to-text parser should look for, but they don't mandate the parser follow them - I would venture this is intentional to allow for flexibility in the various Natural Language Parsers.
The latter is probably why they're, ultimately, not used. Unlike Alexa, which requires a wide range of exact text to match for its Intent definitions, Google probably started going that route and realized that it would be better to hand it off to other NLPs, either your own or commercial ones, which could handle the flexibility of how humans actually speak. (And then they bought one to provide as a suggested tool to use.)
So the Actions SDK has primarily become the tool to use if you do intend to hand the language parsing off to another tool. There isn't much advantage to using it over any other tool otherwise.
You're not obligated to use Dialogflow. You can use any NLP system that will accept text input for the language you need. Google also provides direct integration with Converse.AI, and I suspect that any other NLP out there will provide directions of how to integrate them with Actions.
Related
This might sound like a general question but I am learning AI techniques/algorithms to implement the best solution for my website to reply to my users. I want to reply to my users as most of their questions over the email are almost the same so I am not sure which algorithm to use to implement my mailbot.
I have been studying AIML and apparently it uses best pattern matches and respond with the predefined template thus very less capacity so self learn. Other than this I have started studying basic NLP which would tokenize, segment, and then create an answer based on that. Maybe I need some advice on where to look.
Any suggestions will be appreciated.
Thanks.
I'd recommend Dialogflow for any chat bot applications. Not only does it make ml chat bots easily accessible and free (within a very generous free tier) but also allows you to leverage Google's models and infrastructure with very little development time and effort.
You can even get away with writing zero code, depending on your required integrations or backend.
Dialogflow also allows you to easily implement multiple languages and deploy to many platforms with little in terms of manual work.
It'll be a little more effort than keyword matching but will be a lot more versatile and you'll learn a lot more about intents, context and ml chat bots.
For you to deploy via email you'll want to integrate the API which should be very simple once you have a model configured.
how to make or add watson languages other than 13 default languages
(Arabic,Brazilian Portuguese,Chinese (Simplified),Chinese (Traditional),
Dutch,Czech,French,English (US),German,Italian,Japanese,Korean,Spanish)
This technique is totally unsupported and depending how you approach gives good or really poor results.
First determine what language is closest to the unsupported language you want to use. In that there are shared nuances between the two languages. Optionally use English.
Capture your questions to build the intents, then use a language translation tool to translate from your language to the supported language. Train on that.
Then at your application layer you would translate the end users input before sending to Watson Assistant.
For the returning message, Watson Assistant already supports UTF-8, so you can put your responses in your target language.
It’s important to use the same translation engine when asking a question to the system. It may turn the question into garbage, but it may find the correct intent if similar questions mistranslated.
You will need to do the same with entities when training as well.
It is a general question.
I am not sure whether i could post this question here. As i search in the programmer section and it seems to me that it is meant for in-depth question on programming.
As i am not a programmer ,however, i would like to find out how is API related to a plugin.. Do they have and difference?
I have tried to google in the web but not able to find any answer to my own question.
Thanks in advance.
Justin
"An application programming interface (API) is a set of routines, protocols, and tools for building software and applications" (Wikipedia).
What this means is that you establish a connection to another program / service which provides you certain functionality, like data retrieving in case of the Twitter API or operations and commands like from the Win32 API. Without this interface, there would be no ("easy") way to make use of the program.
"A plug-in [...] is a software component that adds a specific feature to an existing computer program" (again, Wikipedia).
This means that you have already built an application but want to enhance its functionality / appearance. For instance, you have a table on an HTML page but want to make it searchable. You the could use the jQuery Data Tables plugin. In this case you take an existing piece of software and entirely integrate it into your application.
I guess, as a developer you have a very intuitive understanding of these two and thus can distinguish more easily. Nonetheless, I hope that my explanation made it a bit clearer for you.
If not, do you have any specific question?
When talking about the pros and cons of an API versus plugin integration, it is important to highlight that there is no right or wrong basically both have the same nature.
API stands for Application Programming Interface. An API basically defines how a component interacts with a system, facilitating the communication between them.
More integration flexibility. The merchant has total control over the integration and can make the checkout page look as desired.
A theme or skin is a preset package containing additional or changed graphical appearance details, achieved by the use of a graphical user interface (GUI) that can be applied to specific software and websites to suit the purpose, topic, or tastes of different users to customize the look and feel of a piece of computer software or an operating system front-end GUI.from Wikipedia
Easy and ready to use integration. Within a few minutes, the payment methods can be available at the checkout.
I am looking into something lightweight, that, at a minimum should support the following features:
Support for easy definition of actions through metadata
Wrapper that extracts parameters from request into clojure map, or as function parameters
Support for multiple forms of authentication (basic, form, cookie)
basic authorization based of api method metadata
session object wrapped in clojure map
live coding from REPL (no need to restart server)
automatic serialization of return value to json and xml
have nice (pluggable) url parameter handling (eg /action/par1/par2 instead of /action?par1=val1&par2=val2)
I know it is relatively easy to roll my own micro-framework for each one of these options, but why reinvent the wheel if something like that already exists? Especially if it is:
Active project with rising number of contributors/users
Have at least basic documentation and tutorial online.
First of all, I think that you are unlikely to find a single shrinkwrapped solution to do all this in Clojure (except in the form of a Java library to be used through interop). What is becoming Clojure's standard Web stack comprises a number of libraries which people mix and match in all sorts of ways (since they happily tend to be perfectly compatible).1
Here's a list of some building blocks which you might find useful:
Ring -- Clojure's basic HTTP request handling library; all the other webby libraries (for writing routes &c.) that I know of are compatible with Ring. Ring is being actively developed, has a robust community, is very well-written and has a nice SPEC document detailing its design philosophy. This blog post provides a nice example of how it might be used (reacting to GitHub commits).
Sandbar -- currently an authentication library, more types of functionality planned; under development.
Compojure -- a mature and robust library which provides a nice DSL for writing routes to be used on top of Ring. This will give you the nice URL parameter handling.
Compojure-rest -- "a library for building RESTful applications on top of Compojure". Compojure-rest is, as far as I can tell, in its early stages of development; perhaps you might see this as an opportunity to influence its design. :-)
For dealing with XML, there's clojure.contrib.lazy-xml (and the helper library clojure.contrib.zip-filter.xml) and Enlive (the built-in clojure.xml namespace is currently not very usable); these would be used in tandem (though for your purposes the former might suffice).
For JSON, there a library in contrib and clojure-json (and I think there was at least one other lib I seem to be forgetting now...); pick the one you like best.
All of will be perfectly happy with a REPL-driven development style (see the accepted answer to this SO question for a Ring trick which is very much to the purpose here). I suppose the above collection of links does leave a few blind spots (in particular, the authentication story is still being ironed out, as far as I can tell), but hopefully it's a good start.
1The only single-package solution for building webapps in Clojure that I know of is Conjure, inspired by Rails; unfortunately I have to admit that I don't know much about it, so if you feel interested, follow the link and look around the sources, wiki &c.
While building my first Clojure rest service I found myself asking often the same question. The Clojure Toolbox helped me a lot: http://www.clojure-toolbox.com/
If you are looking for some sample, real-world, illustrative code to get you started, then you could study this clojure-news-feed on github project which demonstrates how to implement a non-trivial RESTful web service with compojure/ring that wraps both SQL (postgresql or mysql) and NoSQL (cassandra), search (solr), caching (redis), event logging (kafka), connection pooling (c3po), and real-time metrics via JMX.
This blog about Building a Scalable News Feed Web Service in Clojure provides a good introduction. I ran some load tests against this service on a humble AWS deployment and got about eighty transactions per second with less than a half second average latency per transaction.
Take a look at liberator library http://clojure-liberator.github.io/liberator/ It's noy a standalone solution, buy very good for rest service definition.
Just to provide an updated answer to this old question, currently (in 2018) I think Luminus provides an excellent starting point. It's using many of the libraries (ring, compojure, etc.) mentioned in previous answers, is modular and as close to "single package" as you can get with Clojure. Specifically for REST, take a look at compojure-api. Luminus recommends buddy for authentication, I've had good success using it both for traditional session-based auth as well as Oauth and stateless JWTs.
Does anyone have experience with Google Closure Editor/WYSIWYG? I'm thinking of moving from CKEDITOR to Google Closure Editor/WYSIWYG. Ideally I'd love to use the etherpad editor but it doesn't appear that anyone has separated the editor from all the app.
Anyhow, for Google Closure Editor/WYSIWYG, does anyone know, does it support the real-time collaborative aspects seen in Google Docs?
The Google Closure editor is a wrapper around the built-in browser editing capabilities. It is thus similar to other rich text editors like TinyMCE, CKEditor, etc. It is less feature-rich than either of those, but it's smaller and faster. The base editor is used by Gmail (most notably) and various other Google properties.
There is nothing within the public Google Closure editor to enable Google Docs style real-time collaboration. With that said, it has a plugin model which enables you to add new functionality. I would not recommend taking something like this on without a solid understanding of working with Google Closure.
Until recently, the editor was also used by Google Docs. However, the limitations of core browser editing technology became a barrier to innovation, so they built their own editing surface[1,2] (codenamed Kix). This editing surface is not included in Closure Library.
https://drive.googleblog.com/2010/04/a-rebuilt-more-real-time-google.html
https://drive.googleblog.com/2010/05/whats-different-about-new-google-docs.html
It might not last, but there is a standalone version of kix up on github:
https://github.com/benjamn/kix-standalone
EtherPad Lite is the most viable option I've seen so far:
https://github.com/ether/etherpad-lite
Personally I favor this one, because:
It's open source
You can host your own
Has few server-side dependencies (Node.js)
It has an API, so you can build your app in any language
Attempting to steal Google's work is probably not a good long-term plan. (I'm also not convinced that having the client-side libraries actually helps you, in terms of the real-time collaboration feature, which depends heavily on the server-side.)