Laravel AI SDK & Pencarian Semantik
Fitur andalan Laravel 13: membuat agen AI dengan Laravel AI SDK, embedding, dan vector search di PostgreSQL.
Laravel 13 dan AI
Laravel 13 menyebut dirinya framework untuk "aplikasi web dan agen AI". Fitur andalannya adalah Laravel AI SDK — API resmi dan seragam untuk berbagai penyedia (OpenAI, Anthropic, Gemini, dst.) sehingga kamu menulis fitur AI sekali dan bisa berganti penyedia lewat konfigurasi. Cakupannya: teks & agen dengan tool-calling, output terstruktur, embedding, gambar, audio (TTS/STT), penyimpanan percakapan, dan helper pengujian.
Instalasi
composer require laravel/ai
php artisan vendor:publish --provider="Laravel\Ai\AiServiceProvider"
php artisan migrate
# .env — isi sesuai penyedia yang dipakai (JANGAN di-commit)
ANTHROPIC_API_KEY=
OPENAI_API_KEY=
GEMINI_API_KEY=
Penyedia didaftarkan di config/ai.php ('openai' => ['driver' => 'openai', 'key' => env('OPENAI_API_KEY')], dst.).
Agen
Agen adalah class yang membungkus instruksi (peran/perilaku), opsi model, dan opsional tools (fungsi yang boleh dipanggil model).
php artisan make:agent AsistenToko # tambahkan --structured untuk output terstruktur
<?php
namespace App\Ai\Agents;
use Laravel\Ai\Attributes\MaxSteps;
use Laravel\Ai\Attributes\Provider;
use Laravel\Ai\Contracts\Agent;
use Laravel\Ai\Enums\Lab;
use Laravel\Ai\Promptable;
use Stringable;
#[Provider(Lab::Anthropic)]
#[MaxSteps(5)] // batas langkah penalaran/tool
class AsistenToko implements Agent
{
use Promptable;
public function instructions(): Stringable|string
{
return 'Kamu asisten toko online yang ramah. Jawab dalam Bahasa Indonesia, singkat dan akurat.';
}
}
Atribut agen: #[Provider], #[Model('...')], #[MaxSteps], #[Temperature]. Menggunakannya sangat sederhana:
$jawaban = (new AsistenToko)->prompt('Rekomendasikan kopi untuk pemula');
return (string) $jawaban; // teks jawaban
return (new AsistenToko)->stream('...'); // streaming ke klien
Tools & output terstruktur
- Tool:
php artisan make:tool CariProduk— class dengandescription(),schema(), danhandle(); didaftarkan lewattools()pada agen (HasTools). Model dapat memutuskan memanggilnya (mis. mencari stok sungguhan di database). - Structured output: implementasikan
HasStructuredOutputdenganschema()sehingga jawaban berupa data terstruktur ($jawaban['skor']), cocok untuk klasifikasi/ekstraksi.
Embedding & pencarian semantik
Embedding mengubah teks menjadi vektor angka; teks yang maknanya mirip berjarak dekat. Itulah dasar pencarian semantik ("kopi untuk pemula" menemukan "biji arabika rasa lembut" walau tak ada kata yang sama).
use Illuminate\Support\Str;
$vektor = Str::of('Kopi arabika rasa lembut')->toEmbeddings(); // helper
use Laravel\Ai\Facades\Embeddings;
$hasil = Embeddings::for(['teks 1', 'teks 2'])->generate(); // banyak sekaligus
Vector query builder (PostgreSQL + pgvector)
// migration: kolom vektor (butuh ekstensi pgvector)
$table->vector('embedding', dimensions: 1536); // sesuaikan dimensi dengan model embedding
// pencarian: teks kueri otomatis diubah menjadi embedding
$dokumen = DB::table('dokumen')
->whereVectorSimilarTo('embedding', 'kopi untuk pemula')
->limit(5)
->get();
Alur umum RAG (retrieval-augmented generation): (1) simpan embedding tiap dokumen; (2) cari dokumen paling mirip dengan pertanyaan; (3) berikan potongan itu sebagai konteks ke agen agar jawabannya berdasar data kamu.
Menguji kode AI
use Laravel\Ai\Testing\Fakes\AgentFake;
AgentFake::fake(['Coba kopi arabika yang lembut.']);
$jawaban = (new AsistenToko)->prompt('...');
AgentFake::assertPrompted('...');
Tes tidak memanggil API sungguhan — cepat, gratis, dan deterministik.
Tanggung jawab & keamanan
- Jangan mengirim data pribadi/rahasia ke penyedia tanpa dasar hukum dan persetujuan.
- Anggap keluaran model tidak tepercaya: validasi sebelum dipakai (terutama bila memicu aksi/tool).
- Batasi tool ke aksi aman; gunakan
#[MaxSteps], timeout, dan rate limit. - Pantau biaya dan simpan kunci API di environment.