Day 3 – Using GPT to Summarize Laravel Audit Logs#LaravelGPTAudit #GPT4o #AuditSummary #LaravelAI


Today, we’ll use OpenAI’s GPT API to generate human-readable summaries from our Laravel audit logs — making them easier to understand for non-technical users or managers.


🧠 Step 1: Install OpenAI SDK

composer require openai-php/laravel

Publish the config:

php artisan vendor:publish --tag="openai-config"

Set your .env:

OPENAI_API_KEY=sk-xxxx...

📝 Step 2: Create a GPT summarizer helper

Create app/Helpers/AuditSummaryHelper.php:

namespace App\Helpers;

use OpenAI\Laravel\Facades\OpenAI;

class AuditSummaryHelper
{
    public static function summarizeLogs(array $logs): string
    {
        $descriptions = collect($logs)->map(function ($log) {
            return "- " . $log->created_at->format('Y-m-d H:i') . ": {$log->description} by " . optional($log->causer)->name;
        })->implode("\n");

        $prompt = <<<PROMPT
You are an audit assistant. Summarize the following Laravel audit logs in plain English:

$descriptions

Summary:
PROMPT;

        $response = OpenAI::chat()->create([
            'model' => 'gpt-4o',
            'messages' => [
                ['role' => 'user', 'content' => $prompt],
            ],
            'max_tokens' => 300,
        ]);

        return $response->choices[0]->message->content ?? 'No summary generated.';
    }
}

📄 Step 3: Add “Summarize” button to dashboard

In your audit_logs/index.blade.php, add a form:

<form method="POST" action="{{ route('audit.logs.summary') }}" class="mb-4">
    @csrf
    <button class="bg-green-500 text-white px-3 py-1 rounded">Summarize This Page</button>
</form>

📡 Step 4: Add summary route and controller method

In web.php:

Route::post('/audit-logs/summary', [\App\Http\Controllers\AuditLogController::class, 'summarize'])->name('audit.logs.summary');

In AuditLogController.php:

use App\Helpers\AuditSummaryHelper;
use Spatie\Activitylog\Models\Activity;

public function summarize(Request $request)
{
    $logs = Activity::with('causer')->latest()->take(20)->get();
    $summary = AuditSummaryHelper::summarizeLogs($logs);

    return back()->with('summary', $summary);
}

✅ Step 5: Show the summary in the view

At the top of index.blade.php, add:

@if(session('summary'))
    <div class="bg-yellow-100 text-yellow-800 p-3 rounded mb-4">
        <strong>GPT Summary:</strong><br>
        {!! nl2br(e(session('summary'))) !!}
    </div>
@endif

You’ll now see something like:

GPT Summary:
On June 4th, Admin updated 5 vehicle renewals and deleted 1 expired customer plan. No suspicious actions detected.


✅ Tomorrow (Day 4), we’ll use GPT to detect anomalies and suspicious user behavior automatically.

Comments

No comments yet. Why don’t you start the discussion?

Leave a Reply

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

This site uses Akismet to reduce spam. Learn how your comment data is processed.