Before giving you the definition of an AI Agent, I would like to reflect on the meaning of the word 'Agent.' An agent is a person (or, in our case, a model) capable of providing specific services. Often, these services require using specific tools to be delivered successfully. However, the agent needs to follow a plan, as not all tools are useful for completing every task therefore a agent must reasoning and planning before to act.
Then, an Agent is a system that leverages an AI model to interact with its environment in order to achieve a user-defined objective. It combines reasoning, planning, and the execution of actions (often via external tools) to fulfill tasks.

The abstract workflow of an AI Agent typically follows these steps:
The brain of an AI Agent is an AI model capable of understanding natural language. To be more precise, a Large Language Model (LLM) serves as the core of an AI Agent, enabling it to reason and plan which actions to take based on the situation. Well known examples are GPT4 from OpenAI, LLama from Meta, Gemini from Google, etc. These models have been trained on a vast amount of text and are able to generalize well.
However, an LLM can only receive text as input and generate text as output. So, how can an AI Agent, for example, respond with an image? Here, we must introduce the second component of an AI Agent.
The capabilities and tools form the body of an AI Agent. This component represents everything the agent is equipped to do. The possible actions an AI Agent can perform are limited by the tools and capabilities it has been provided with.
In this way, an AI agent can perform any type of task using tools to complete actions. For example, if we write an Agent to act as our personal assistant, and we ask it to “send an email to our Manager asking to delay today’s meeting”, we need to give it a new tool for the Agent can will use whenever it needs to send an email. Depends on the AI Agent the tools can be write with Python code such that:
def send_message_to(recipient, message):
"""Useful to send an e-mail message to a recipient"""
...