Most of today's applications have in one way or the other some representation of Knowledge incorporated. However those are completely baked into the application code. There is no explicit notion of knowledge and as such no urge for reusing or enhancing (learning) knowledge.
In the coming wave of Knowledge Powered Applications (KPA) however here is conscious effort to externalize, reuse and continuously enhance knowledge.
The differentiation between traditional and Knowledge Powered Applications starts at design level. The architect starts with a notion of modular knowledge components in mind and reflects that throughout entire design.
A good example is the portfolio management and optimization application that we worked on few years ago. That application was composed from three chained Knowledge Models:
Explorative Model -> Analytic Model -> Selective Model
- Explorative Model was designed to produce all possible reallocation options for the users' set of assets and liabilities, while taking the regulatory constraints and institutional guidelines into account.
A Monte Carlo like logic along with a rule engine was used in this Knowledge model.
- Analytic Model was designed to objectively analyze the options and generate a set of Pros/Cons for each. In this specific case our Knowledge Model is also able to take real-time market data into consideration.
- Selective Model was designed to create a multidimensional decision model on the fly. Then it calculates and assigns weighting to each dimension of decision space according to user profile and preferences and finally picks the best option using an optimization algorithm.
On the implementation side a shared EAV taxonomy was utilized to exchange facts as [Entity, Attribute, Value]. For inferences a rule engine, a neural net and a proprietary dynamic tree were used to meet the aggressive performance requirements.
These Knowledge Models were linked to feed each other and collectively created the most sophisticated and powerful solution in their respective market.
As you might have noted each model is independent and could be reused, replaced and improved without impacting any other area of the application. This is how a true KPA should be designed.