Agents have existed already for a long time. In software engineering, they are small distributed applications that demonstrate some form of autonomous behavior. Early examples are monitoring agents, web crawlers, and chat bots. Also, today's trends in distributed and intelligent architectures can be viewed from this existing Agent perspective. Software Agents could be viewed as an evolution of, or an addition to, the (Micro)Services that are underpinning these trends.
Intelligent Agents can add autonomy, context awareness, and intelligence as natural behaviors to these concepts. They can provide interactions between such Services and with its Environments more naturally. Agent Architectures lay the foundation for such Intelligent Agents to also collaborate with each other.
The Internet of Things (IoT) for example is where Intelligent Agents could provide a more immersive experience. IoT is distributed and it’s all about connecting with its dynamic environment. Today, the IoT mostly sends data up in verticals towards the Cloud for complex processing. As both software and hardware continues to evolve, 'data gravity' may bring some these processes back to the devices. In the IoT of tomorrow, horizontal value between devices and across industries could be uncovered using Intelligent Agents.
Intelligent Agents could be viewed as an evolution of, or addition to, (Micro)Services.
Agents Versus (Micro)Services
The following picture shows an example of a Multi Agent System. At the top you see Agents that interact like common (Micro)Services do. The key different here is that Agents also collaborate to make more sense of their Environment, trying to sense and influence it together.
When viewed top-down, Agents and (Micro)Services share some similar architectural characteristics. The difference is in how they fulfill these characteristics in order to address different challenges:
- MicroServices are the foundation of a distributed architecture where change is expected in the form of code changes (focused on small services enabling a highly decoupled system).
- Agents are the foundation of a distributed architecture where change is expected in the form of contextual changes (focused on collaboration and percieving its dynamic environment).
Below I tried to outline some similar characteristics, while also indicating how they differ while implementing these characteristics.
Agents are the foundation of a distributed architecture where change is expected in the form of contextual changes.
Already we see 'smart' Applications and 'smart' Services emerging. These are often comprised of common Services that use the computing power and data in the Cloud with for example Predictive Analytics and Machine Learning to provide a more intelligent response. You could argue that these are Intelligent Agents that already work 'undercover' in todays architectures. In the transition from todays architectures to future Agent Architectures, we could refer to these as 'Secret Agents'.
An Intelligent Agent eventually may not be dependent anymore on the Cloud data and computing power. This is also where the concept of 'data gravity' comes into the picture. Eventually the data will already be real-time processed where it was first discovered and adds the most value. This is when we will see the true Agents start to emerge and expose themselves.
A key difference between (Micro)Services and Agents is the contextual behavior that an Agent can demonstrate. An Agent is goal-driven, and tries to fulfill its goals by making decisions based upon various factors such as knowledge of its own capabilities, its connected environment, and other agents that are present at a given time. In other words, it aims to understand its context and based upon that decides what is the best way to achieve its goals.
The most commonly mentioned Agent characteristics I’ve somewhat simplified and listed below.
Agents are goal-driven and try to understand its connected environment, based upon that they take contextual and intelligent decisions.
Types of Agents
Agents decide which actions to take that in turn lead to goals achieved and new inputs to process. Agents are often categorized into two groups.
The Reflex Agent is quite similar to the (Micro)Services that we are already familliar with. It demonstrates the characteristics of an Agent, but in terms of intelligence it is not very different from a common Service. It can be implemented using programming logic and rules.
The model-based Agent has a better understanding of its context, and maintains a model of the world around itself in order to make decisions. The control-logic can often be further broken down into two cycles: deliberation (what to do) and planning or means-end reasoning (how to do it).
As factors change in its dynamic environment, the interpreter of a Model-Based Agent may revise its plans and goals. Common interpreters can be implemented using programming logic and rule engines, but more intelligent interpreters require processing of semantic data and ontologies.
Agents can vary from simple Reflex Agents to complex Model-Based Agents that use semantic data and ontologies.
Beliefs, Desires, and Intentions
I don’t go into detail on more ‘human-like’ Agents but I like to briefly point out the BDI model. This can be used for advanced Model-Based Agents that use concepts of human practical reasoning in terms of Beliefs, Desires, and Intentions (BDI). In software development, it could be viewed as follows:
A framework based on for example BDI can help to implement Cognitive Agents that align software processing more with our human way of thinking.
The Beliefs, Desires, and Intentions (BDI) model can be used for software frameworks that implement Cognitive Agents.
Agents are coming?
Agents are already emerging in various solutions as what I like to call 'Secret Agents'. Once Intelligent Agents will find there place in the IT landscape, and continue to converge with trends like Micro Services, IoT, Machine Learning, Predictive and Prescriptive Analytics, and what else the future brings, I really start to wonder how tomorrows IT landscape will look like?