Implementasi memory percakapan pada AI Agent: menyimpan riwayat chat menggunakan Session PHP dan MySQL, memahami batas Context Window, dan cara mengirim history ke OpenAI API.
Daftar Isi
- Diagram Arsitektur Alur Data Memory AI Agent PHP
- Menyimpan Riwayat Chat AI Agent PHP dengan Session
- Menyimpan Riwayat Chat AI Agent PHP ke Database MySQL
- Keamanan & Kepatuhan Privasi Data Memory (GDPR / UU Pelindungan Data Pribadi PDP)
- Memahami Context Window & Strategi Belajar ai-agent-php
- Rumus & Tabel Estimasi Konsumsi Token & Biaya API
- Perbandingan Pendekatan: Native PHP vs Framework AI PHP (LLPhant & SDK)
- Penyimpanan Memori Percakapan Semantik dengan Vector Store (PHP & Embeddings)
- Cara Kerja Vector Memory pada AI Agent PHP
- Optimasi Performa Memory AI Agent PHP: Redis, OPcache & Cloudflare CDN
- 1. Caching Memory In-Memory via Redis
- 2. PHP 8.3 OPcache & JIT Compiler
- 3. CDN Cloudflare & Index Database MySQL
- FAQ: Pertanyaan Umum Memory AI Agent PHP
Terakhir diperbarui:
- Session PHP: Pilihan tercepat untuk menyimpan riwayat chat jangka pendek per user session.
- Database MySQL: Diperlukan untuk menyimpan histori pesan persisten antar-perangkat dan analitik jangka panjang.
- Redis Cache & OPcache: Gunakan Redis in-memory dan OPcache PHP 8.3 untuk menekan latency & TTFB di bawah 500ms.
- Vector Store: Solusi Long-term Memory untuk mencari konteks masa lalu berdasarkan kemiripan arti (semantic search).
Diagram Arsitektur Alur Data Memory AI Agent PHP
Visualisasi bagaimana riwayat pesan pengguna diproses dari Session/Redis, dipangkas oleh Sliding Window, hingga disimpan secara persisten di MySQL.
| Tipe Memory | Latency | Persistence | Rekomendasi Use Case |
|---|---|---|---|
| PHP Session | < 1ms | Temporer (per Session) | Prototype, Single-page AI Chat Widget |
| Redis In-Memory | < 5ms | Semi-Persisten (dengan TTL) | High-traffic CS Chatbot, Fast Caching Layer |
| Database MySQL | 10ms - 50ms | Persisten Permanen | Audit Trail, Riwayat Chat Pengguna Terdaftar |
| Vector Store (Semantic) | 20ms - 100ms | Persisten & Indexing Vector | Long-term Memory, Search Pencarian Semantik RAG |
Menyimpan Riwayat Chat AI Agent PHP dengan Session
Untuk prototype cepat atau aplikasi web berbasis tunggal, PHP Session adalah opsi paling cepat untuk menyimpan riwayat percakapan AI Agent PHP:
<?php
class SessionMemory
{
private string $sessionKey;
public function __construct(string $sessionKey = 'chat_history')
{
$this->sessionKey = $sessionKey;
if (session_status() === PHP_SESSION_NONE) {
session_start();
}
}
public function add(string $role, string $content): void
{
if (!isset($_SESSION[$this->sessionKey])) {
$_SESSION[$this->sessionKey] = [];
}
$_SESSION[$this->sessionKey][] = [
'role' => $role,
'content' => $content,
];
}
public function getAll(): array
{
return $_SESSION[$this->sessionKey] ?? [];
}
public function clear(): void
{
$_SESSION[$this->sessionKey] = [];
}
public function getLastN(int $n): array
{
$history = $this->getAll();
return array_slice($history, -$n);
}
}
Menyimpan Riwayat Chat AI Agent PHP ke Database MySQL
Untuk aplikasi bertingkat enterprise, gunakan database relasional agar riwayat chat tersimpan secara persisten:
-- Migration: Tabel chat_sessions
CREATE TABLE IF NOT EXISTS chat_sessions (
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
session_id VARCHAR(128) NOT NULL,
user_id BIGINT UNSIGNED NULL,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
INDEX idx_session_id (session_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- Migration: Tabel chat_messages
CREATE TABLE IF NOT EXISTS chat_messages (
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
session_id VARCHAR(128) NOT NULL,
role ENUM('system','user','assistant','tool') NOT NULL,
content LONGTEXT NOT NULL,
tool_name VARCHAR(100) NULL,
token_count INT NULL,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
INDEX idx_session_id (session_id),
INDEX idx_created_at (created_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
<?php
class DatabaseMemory
{
private PDO $pdo;
private string $sessionId;
public function __construct(PDO $pdo, string $sessionId)
{
$this->pdo = $pdo;
$this->sessionId = $sessionId;
}
public function add(string $role, string $content, ?string $toolName = null): void
{
$stmt = $this->pdo->prepare(
'INSERT INTO chat_messages (session_id, role, content, tool_name) VALUES (?, ?, ?, ?)'
);
$stmt->execute([$this->sessionId, $role, $content, $toolName]);
}
public function getAll(int $limit = 50): array
{
$stmt = $this->pdo->prepare(
'SELECT role, content FROM chat_messages
WHERE session_id = ?
ORDER BY created_at ASC
LIMIT ?'
);
$stmt->execute([$this->sessionId, $limit]);
return $stmt->fetchAll(PDO::FETCH_ASSOC);
}
}
Keamanan & Kepatuhan Privasi Data Memory (GDPR / UU Pelindungan Data Pribadi PDP)
Dalam aplikasi produksi, memori percakapan berpotensi menyimpan data sensitif seperti informasi pribadi (PII), email, atau nomor telepon pengguna. Untuk mematuhi standar privasi GDPR & UU PDP (Pelindungan Data Pribadi):
Enkripsi isi kolom content di MySQL menggunakan enkripsi AES-256 via openssl_encrypt() pada level PHP atau fungsi AES_ENCRYPT() pada MySQL sebelum disimpan ke disk storage.
Filter teks input user menggunakan ekspresi reguler (Regex) PHP untuk menyamarkan NIK, nomor kartu kredit, atau nomor telepon menjadi tag [REDACTED] sebelum dikirim ke OpenAI API.
Jalankan CRON Job pembersihan berkala (DELETE FROM chat_messages WHERE created_at < NOW() - INTERVAL 30 DAY) dan sediakan API endpoint untuk menghapus memori atas permintaan user.
Memahami Context Window & Strategi Belajar ai-agent-php
Context Window adalah batas maksimum jumlah token yang dapat diproses oleh AI dalam satu request:
gpt-4o-mini: ~128.000 token context windowgpt-4o: ~128.000 token context windowgpt-3.5-turbo: ~16.000 token context window
Jika riwayat percakapan melebihi batas ini, terapkan strategi pangkas histori N pesan terakhir dalam alur belajar ai-agent-php:
// Strategi: Selalu sertakan system prompt + N pesan terakhir
public function buildContextMessages(array $history, string $systemPrompt, int $maxMessages = 20): array
{
$messages = [['role' => 'system', 'content' => $systemPrompt]];
$recentHistory = array_slice($history, -$maxMessages);
return array_merge($messages, $recentHistory);
}
Rumus & Tabel Estimasi Konsumsi Token & Biaya API
Setiap kali Anda mengirimkan riwayat percakapan ke OpenAI API, seluruh pesan dalam array messages dihitung sebagai Input Token. Gunakan rumus estimasi berikut:
| Jumlah Histori (N) | Estimasi Total Token/Req | Estimasi Biaya (gpt-4o-mini) | Rekomendasi |
|---|---|---|---|
| 5 Pesan Terakhir | ≈ 750 Token | $0.00011 / req | Sangat Hemat (Saran Chat Widget) |
| 10 Pesan Terakhir | ≈ 1.500 Token | $0.00022 / req | Ideal & Seimbang untuk CS Chatbot |
| 20 Pesan Terakhir | ≈ 3.000 Token | $0.00045 / req | Konstruksi Konteks Kompleks |
| 50 Pesan Terakhir | ≈ 7.500 Token | $0.00112 / req | Potensi Boros (Saran: Pakai RAG/Vector) |
Perbandingan Pendekatan: Native PHP vs Framework AI PHP (LLPhant & SDK)
Dalam mengembangkan memori AI Agent, Anda dapat memilih antara arsitektur Native PHP (cURL + PDO) atau Library/Framework AI PHP:
| Fitur / Kriteria | Native PHP (Tutorial Ini) | Framework AI PHP (LLPhant / SDK) |
|---|---|---|
| Dependensi External | Nol (0 external vendor package) | Membutuhkan Composer package vendor |
| Kontrol Arsitektur Code | 100% Fleksibel, Bebas Kustomisasi Query | Terikat dengan abstraksi class framework |
| Kecepatan Development | Memerlukan penulisan helper & retry manual | Sangat Cepat (Tersedia Out-of-the-box) |
| Cocok Untuk | Sistem Enterprise High-Performance, Microservices | Rapid Application Development (RAD), MVP |
Penyimpanan Memori Percakapan Semantik dengan Vector Store (PHP & Embeddings)
Selain memori urutan percakapan (Short-term Conversation History), AI Agent PHP tingkat lanjut membutuhkan Semantic Memory (Long-term Memory). Dengan Vector Store (seperti Qdrant, Pinecone, atau PostgreSQL pgvector), AI Agent dapat mencari pesan masa lalu berdasarkan kemiripan arti (similarity) meskipun tidak menggunakan kata kunci yang persis sama.
Cara Kerja Vector Memory pada AI Agent PHP
- Vektorization: Konversi teks percakapan pengguna menjadi larik angka (vector embedding) menggunakan endpoint
/v1/embeddingsOpenAI (modeltext-embedding-3-small). - Penyimpanan: Simpan nilai vector bersama metadata pesan ke dalam Vector Database.
- Cosine Similarity Search: Saat ada pertanyaan baru, cari N pesan relevan terdekat yang memiliki skor kemiripan tertinggi untuk dimasukkan ke dalam System Context.
Contoh skrip PHP untuk menghasilkan Vector Embedding dari pesan percakapan:
<?php
// Generate Vector Embedding untuk Semantic Memory
function createEmbedding(string $text, string $apiKey): array
{
$ch = curl_init('https://api.openai.com/v1/embeddings');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => json_encode([
'model' => 'text-embedding-3-small',
'input' => $text,
]),
CURLOPT_HTTPHEADER => [
'Content-Type: application/json',
'Authorization: Bearer ' . $apiKey,
],
]);
$response = curl_exec($ch);
curl_close($ch);
$data = json_decode($response, true);
return $data['data'][0]['embedding'] ?? []; // Larik float vector (1536 dimensi)
}
Optimasi Performa Memory AI Agent PHP: Redis, OPcache & Cloudflare CDN
Untuk memastikan Time to First Byte (TTFB) aplikasi AI Agent PHP Anda berada di bawah 500ms, terapkan tiga tingkatan caching dan optimasi infrastruktur berikut:
1. Caching Memory In-Memory via Redis
Gunakan Redis sebagai buffer penyimpanan histori pesan aktif dengan TTL 1 jam. Pembacaan dari Redis jauh lebih cepat (< 5ms) dibanding query SQL berulang ke disk MySQL.
2. PHP 8.3 OPcache & JIT Compiler
Aktifkan extension OPcache (opcache.enable=1, opcache.jit=tracing) pada server Linux Anda untuk menyimpan bytecode skrip PHP di RAM sehingga menghilangkan overhead parsing skrip pada setiap request.
3. CDN Cloudflare & Index Database MySQL
Gunakan Cloudflare CDN untuk pengiriman aset statis (CSS/JS/Gambar) dan pastikan indeks idx_session_id & idx_created_at terpasang pada tabel MySQL untuk menjamin query SELECT histori berjalan instan.
FAQ: Pertanyaan Umum Memory AI Agent PHP
Berikut adalah jawaban atas pertanyaan populer seputar pengelolaan memory, penyimpanan histori, dan optimasi context window di PHP:
Kapan harus menggunakan Session PHP vs Database MySQL untuk memory AI Agent?
Bagaimana cara mencegah error Context Window Exceeded saat menyimpan riwayat percakapan AI?
array_slice(), sambil selalu mempertahankan System Prompt pada index 0.
Mengapa Redis sangat direkomendasikan untuk caching memory AI Agent PHP?
Source Code Memory Percakapan AI Agent PHP
Unduh class SessionMemory, DatabaseMemory PDO, & handler Sliding Window di GitHub.
Poin Kunci Bab 7
Memory yang baik adalah perbedaan antara AI yang "pelupa" dan AI yang benar-benar terasa cerdas. Selalu desain sistem memory dari awal — jauh lebih mudah daripada menambahkannya belakangan.
Penulis & Instruktur: Rusmawan Abdullah Sani
DevOps Engineer & Sysadmin dengan spesialisasi arsitektur PHP 8.3+, CI/CD Pipeline, & Integrasi AI Agent Enterprise.