Autonomous or semi-autonomous software entities that perform tasks on behalf of users or other programs, based on their environment, user inputs, or pre-defined objectives. These agents can learn from interactions and improve over time, making decisions and taking actions to achieve specific goals, often used in applications ranging from personal assistants and chatbots to more complex systems in robotics and autonomous vehicles.