Logo
© 2019 - 2026 SantriKoding.

On This Page

Mobile navigation

Laravel 13 AI #2 Perancangan Arsitektur Database & Model Dokumen

like emoticon 0
love emoticon 0
insightful emoticon 0
fire emoticon 0
cheer emoticon 0
celebrate emoticon 0
Laravel 13 AI #2 Perancangan Arsitektur Database & Model Dokumen

Seri Tutorial Laravel 13 AI #2 Perancangan Arsitektur Database & Model Dokumen

Halo lagi! 👋

Setelah kita berhasil menyiapkan proyek di Part 1, sekarang saatnya kita masuk ke tahap yang sangat krusial: Merancang Arsitektur Database.

Karena aplikasi kita akan mengelola dokumen skripsi yang kompleks (terdiri dari bab, sub-bab, dan referensi), kita butuh struktur database yang rapi agar AI bisa menganalisisnya dengan akurat. Yuk, kita bedah!


Step 1 - Mengapa Struktur Itu Penting bagi AI?

AI bekerja paling baik saat diberikan konteks yang terorganisir. Strategi ini sering disebut sebagai Chunking. Daripada memberikan seluruh file PDF 100 halaman sekaligus, kita akan memecah dokumen tersebut menjadi bagian-bagian kecil (misal per Bab atau per 1000 karakter).

Step 2 - Arsitektur Database (ERD)

Berikut adalah visualisasi bagaimana data skripsi, bab, riwayat chat, dan hasil analisis AI saling terhubung:

img

[!IMPORTANT] Tabel AGENT_CONVERSATIONS dan MESSAGES tidak perlu kita buat manual. Tabel ini sudah disediakan oleh Laravel AI SDK saat kita menjalankan perintah vendor:publish di Part 3 Tabel inilah yang membuat AI kita bisa "mengingat" konteks chat sebelumnya.


Step 3 - Membuat Migration & Model

Jalankan perintah ini untuk membuat struktur dasar kita:

php artisan make:model Thesis -m
php artisan make:model ThesisSection -m
php artisan make:model AiAnalysis -m

1. Migration Tabel theses

Schema::create('theses', function (Blueprint $table) {
    $table->id();
    $table->foreignId('user_id')->constrained()->onDelete('cascade');
    $table->string('title');
    $table->string('section')->default('keseluruhan');
    $table->string('conversation_id')->nullable();
    $table->string('file_path');
    $table->string('status')->default('pending')->comment('pending, processing, completed, error');
    $table->softDeletes(); // Keamanan data mahasiswa
    $table->timestamps();
});

2. Migration Tabel thesis_sections

Di sini kita menggunakan kolom vector. Dimensi 1536 adalah standar emas untuk model text-embedding-3-small milik OpenAI atau Gemini.

Schema::create('thesis_sections', function (Blueprint $table) {
    $table->id();
    $table->foreignId('thesis_id')->constrained()->onDelete('cascade');
    $table->string('section_name');
    $table->longText('content');
    $table->longText('embedding')->nullable(); // Jantung dari Semantic Search
    
    // [TIP] Kolom vector membutuhkan database yang mendukung (seperti PostgreSQL dengan pgvector)
    // atau gunakan Laravel AI SDK yang akan mensimulasikan pencarian ini jika menggunakan MySQL.
    $table->integer('order')->default(0);
    $table->softDeletes(); 
    $table->timestamps();
    
    // Indexing untuk pencarian cepat
    $table->index('section_name');
});

3. Migration Tabel ai_analyses

Schema::create('ai_analyses', function (Blueprint $table) {
    $table->id();
    $table->foreignId('thesis_id')->constrained()->onDelete('cascade');
    $table->string('analysis_type'); // logic_check, grammar_fix, etc.
    $table->json('result'); // AI akan memberikan output JSON terstruktur
    $table->softDeletes();
    $table->timestamps();
});

Agar Laravel bisa menangani data AI dengan pintar, kita perlu mengatur Trait, Casts, dan Relationships di dalam Model.

Model Thesis.php

use Illuminate\Database\Eloquent\SoftDeletes;

class Thesis extends Model
{
    use SoftDeletes;

    protected $fillable = ['user_id', 'title', 'section', 'file_path', 'status', 'conversation_id'];

    public function sections() 
		{
        return $this->hasMany(ThesisSection::class)->orderBy('order');
    }

    public function analyses()
		{
        return $this->hasMany(AiAnalysis::class);
    }
}

Model ThesisSection.php

use Illuminate\Database\Eloquent\SoftDeletes;
use Laravel\Ai\Casts\AsVector;

class ThesisSection extends Model
{
    use SoftDeletes;

    protected $fillable = ['thesis_id', 'section_name', 'content', 'embedding', 'order'];

    protected $casts = [
        'embedding' => AsVector::class, 
    ];

    public function thesis() 
		{
        return $this->belongsTo(Thesis::class);
    }
}

Model AiAnalysis.php

use Illuminate\Database\Eloquent\SoftDeletes;

class AiAnalysis extends Model
{
    use SoftDeletes;

    protected $fillable = ['thesis_id', 'analysis_type', 'result'];

    protected $casts = [
        'result' => 'array',
    ];

    public function thesis() 
		{
        return $this->belongsTo(Thesis::class);
    }
}

Kesimpulan

Kita telah berhasil merancang "otak" dari aplikasi kita, yaitu struktur database yang siap menampung dokumen skripsi dan hasil pemrosesan AI. Penggunaan fitur Vector Column di Laravel 13 akan menjadi pembeda besar dalam kecerdasan aplikasi kita nanti.

Pada Part 3 nanti, kita akan membangun Sistem Otentikasi & UI Setup menggunakan Laravel Breeze dan Vue.js agar aplikasi kita aman dan modern!

Sampai jumpa di tutorial berikutnya!

Artikel ini dibaca sebanyak 94 kali

Syahrizal AS
Back End Developer

Suka dengan tulisan di SantriKoding? Kamu bisa memberikan dukungan dengan berdonasi atau bagikan konten ini di sosial media. Terima kasih atas dukungan Anda!

KEBIJAKAN KOMENTAR

Saat memberikan komentar silahkan memberikan informasi lengkap tentang error, seperti: screenshot, link kode, dll. Baca aturan komentar kami

Memuat komentar...

0
0
0
SHARE