I believe your biggest hurdle will be in developing a "fool proof" method of identifying what topic is being discussed. To reference your own statement, " talking about engine", if you simply listen for engine and key off of that word you would not be able to for instance use the word engine to represent both a car engine and a software gaming engine. I have used a couple of speech synthesizers. The ones i have used wait for specific commands to begin listening. Perhaps you could have a combination of start listening commands.
USER "Computer, start listening."
COMPUTER "Ready to Listen."
USER "Car engines."
COMPUTER "Loading Car Engine Library."
Something like this might be a reasonable approach to your problem while still allowing yourself the flexibility of adding libraries. You could also utilize this approach to implement a default library. If the second command given isn't a recognized library then the program could use the default library.