Self-modifying skills

I am interested in creating entire skills from scratch programmatically. Thus, I am looking for a “from python only” tutorial, wherein no additional dialog, vocabulary, or other files are required beyond the main script. I have not found such as yet, though the general tutorial and api documentation look like such might be inferred to a large extent.

At least one other post on this forum suggests that some of these steps may not be fully supported at present, so let me ask directly: can one create context-sensitive skills purely from appropriately-structured data sets?

A simple example might be a skill that generates semi-custom intent handlers for “choose-your-own-adventure” style story telling. Story writers might use a simple high-level language to produce segments and link them together, and a “story builder” skill could parse it into the appropriate contexts, intents, and other Mycroft runtime structures.

If the stories themselves will be generated on-the-fly, there is no way to program everything in advance. Generally speaking, I suppose this all amounts to “runtime support for creating, enhancing, and refining of skills” or “self-modifying skills”.

These examples derive from the notion that skills should adapt to their users, not the other way around. A good assistant will adapt its vocabulary to the user, not force the user to conform to the skill programmers’ choices. From what I have read (which admittedly may be insufficient or distorted), the current skill system may not be ideal for that ultimate use case, but the first step – decoupling skill creation from the file system – may be very close or already complete (and needing a linked/new tutorial or other targeted documentation?).

So, how much of this can be accomplished today? Assuming pieces are missing, are they scheduled to be developed in the foreseeable future, or is anyone actively working on any of them?

There are lots of good thoughts and questions here that are at the very heart of “AI” as a general technology and endeavor. I don’t think a satisfying concise answer can be made in the space of a forum reply. The best advice I can give is to take a couple of college-level introductory classes in A.I. I bet you could find some real treasure in the free offerings of edx.org or MIT’s or Stanford’s “MOOCs” .

If you want to make a quick survey for yourself, here are some search terms to get you to some good reading (even if just in stack exchange and “pop-sci” type magazines) that attempt to address some of the issues you’ve identified, or “work around” them:

  • Reflective Programming
  • Genetic Algorithms
  • Neural Networks
  • Strong AI vs Weak AI
  • Google Publications AI
1 Like

I took a fairly complete set of AI coursework at Oregon State University in 2007-2008, as part of a graduate program in Mechanical Engineering focusing on multi-agent control systems. I have kept relatively current on AI, but the art advances so fast and I’m far from an expert. In the past, I have implemented swarms, genetic algorithms, RNNs, and other systems in a variety of programming languages.

So, I really meant to ask about the specific state of affairs vis a vis Mycroft’s current/planned capacities for implementing my ideas. :slight_smile: I hear it’s unwise to reinvent the wheel…

I am sorry I mistook your question and your level understanding, @zachwelch. I guess I’d better let the actual project employees speak authoritatively on this, but my impression so far is that the project intends specifically to operate in the realm of conventional “weak AI” and perhaps introduce aspects of machine learning a little at a time.
Perhaps you could bring some of your skill to bear by forking Mycroft core to show what would be possible with the designs you describe, or even just building a skill that demonstrates some of the techniques, and then the Mycroft project team may be able to transfer some of that to the official Mycroft Core.
I suppose your closing remarks from both messages in combination may indicate that you suspect there might be a non-public code repository that might have some kind of next-generation Mycroft core that does use the more dynamic approach that you describe. I have seen no evidence of a confidential alternate code base. On the other hand, I have no particular reason to conclude that such a thing does not exist, other than a suspicion that the team has its hands full with just making the visible project happen.

I can confirm there’s no “next-gen” mycroft-core. There’s some things we’re working on for Python 3 support, but that’s about it.

We do have the Precise Wake Word code in a private repo at the moment- simply because it’s not mature enough to open source it yet. The Precise Wake Word trainer is based on a recurrent neural network optimized to recognize spectrographs rather than specific words.