DRY Your Laravel AI Agents with a Base Agent Class

📖 1 minute read

If you’re building multiple Laravel AI agents, you’ll notice a lot of repetitive setup code in every agent class:

// ❌ Every agent repeats the same middleware setup
class CustomerSupport implements Agent, HasMiddleware
{
    use Promptable;

    public function middleware(): array
    {
        return [
            RateLimitMiddleware::class,
            LoggingMiddleware::class,
            RetryMiddleware::class,
        ];
    }
}

class ReportGenerator implements Agent, HasMiddleware
{
    use Promptable;

    public function middleware(): array
    {
        return [
            RateLimitMiddleware::class,
            LoggingMiddleware::class,
            RetryMiddleware::class,
        ];
    }
}

DRY it up with a base agent:

// app/Ai/Agents/BaseAgent.php
abstract class BaseAgent implements Agent, HasMiddleware
{
    use Promptable;

    public function middleware(): array
    {
        return [
            RateLimitMiddleware::class,
            LoggingMiddleware::class,
            RetryMiddleware::class,
        ];
    }
}

Now every agent just extends BaseAgent:

// ✅ Clean and minimal
class CustomerSupport extends BaseAgent
{
    // Just your agent-specific logic
}

class ReportGenerator extends BaseAgent
{
    // Just your agent-specific logic
}

Benefits:

  • Add/remove middleware in one place – affects all agents instantly
  • Onboarding a new agent? One line: extends BaseAgent
  • Override middleware for specific agents if needed (just override the middleware() method)

Example override for special cases:

// Most agents use BaseAgent defaults
class BulkProcessor extends BaseAgent
{
    // Different rate limit for bulk operations
    public function middleware(): array
    {
        return [
            BulkRateLimitMiddleware::class,
            ...parent::middleware(),
        ];
    }
}

Pattern applies beyond agents: Same concept works for controllers (BaseController), jobs (BaseJob), or any class hierarchy where you have shared setup.

Daryle De Silva

VP of Technology

11+ years building and scaling web applications. Writing about what I learn in the trenches.

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *