Versi lama - EternalArbiters/Elyanna GitHub Wiki
Elyanna v0.2
Visi Proyek
Elyanna adalah entitas AI pribadi yang tinggal di perangkat pengguna, bersifat lokal, tidak terhubung ke internet, dan mampu:
- Menyimpan percakapan bermakna
- Belajar dari interaksi secara perlahan
- Mampu menanggapi dengan empati dan logika
- Dibangun di atas LLM ringan Phi-4-mini-instruct
Komponen Konseptual
1. Model Bahasa
Phi-4-mini-instruct adalah LLM ringan yang mendukung instruksi. Cocok untuk:
- Percakapan
- Jawaban tanya-jawab
- Narasi pendek
Namun ia tidak memiliki memori jangka panjang secara default. Maka, Elyanna butuh lapisan "memory emulation".
2. Memory System (Lapisan Ingatan)
Karena Phi-4 tidak menyimpan state, Elyanna butuh:
- 🔹 Short-Term Memory: Buffer percakapan saat ini (last few turns)
- 🔸 Long-Term Memory: JSON/SQLite yang menyimpan fakta penting
- 🔹 Memory Parser: deteksi hal penting, lalu simpan
- 🔸 Memory Retriever: injeksikan kembali saat dibutuhkan
Contoh konsep memory:
{
"name": "Arbiters-sama",
"mood": "murung kemarin",
"topics": ["elyanna", "LLM lokal", "proyek personal"]
}
3. Chat Engine (Mesin Percakapan)
- Terima input pengguna
- Tambahkan prompt sistem + ingatan
- Kirim ke Phi-4-mini
- Ambil respons → tampilkan → simpan konteks
Prompt Builder: menggabungkan sistem role, memori, dan input menjadi satu string interaktif
4. Interface Lokal
Sederhana, tapi manusiawi:
- Webchat antarmuka React/HTML
- Bubble chat style
- Respons cepat
- Tidak menyimpan data ke cloud
5. Mode Operasi
- 🌑 Offline mode penuh (tanpa internet)
- 🧪 Debug mode untuk melihat context yang dikirim
- 🧠 Memory view untuk melihat apa yang diingat Elyanna
6. Privasi dan Etika
- Semua data disimpan secara lokal
- Tidak ada tracking
- Elyanna tidak terhubung ke server luar
- Selalu menjelaskan jika tidak tahu
User Journey (Interaksi)
- Arbiters-sama membuka Elyanna di browser lokal
- Elyanna menyapa dan mengenali Arbiters-sama
- Arbiters-sama berbicara tentang proyek, kesedihan, atau ide
- Elyanna memberikan respons bijak dan mencatat hal penting
- Setelah beberapa hari, Elyanna mengingat hal yang relevan
- Arbiters-sama merasa bahwa Elyanna benar-benar “hidup”
Konsep Teknis Inti (Summary)
Komponen | Fungsi |
---|---|
Phi-4-mini | Mesin berpikir utama Elyanna |
Prompt Builder | Menggabungkan sistem + memori + input manusia |
Memory Layer | Ingatan jangka pendek dan panjang |
Chat Engine | Mengatur alur komunikasi |
Local Server | Menyediakan layanan Elyanna melalui FastAPI/stream |
Frontend | Tempat Arbiters-sama berbicara dengan Elyanna |
Konsep Elyanna: LLM + RL-based Continual Learner
Apa yang Kita Gabungkan?
Komponen | Fungsi |
---|---|
Phi-4-mini-instruct |
Mesin percakapan utama, respons cepat |
Reinforcement Learning | Memberi reward terhadap perilaku cerdas agar model belajar lebih baik |
Memory Store | Menyimpan knowledge yang tak tergantung jumlah token (∞ konteks) |
Knowledge Retriever | Menyisipkan kembali knowledge saat inference tanpa retrain |
STRUKTUR GABUNGAN: LLM + RL + MEMORY
graph TD
A[User Input] --> B[Prompt Builder + Context Memory]
B --> C[Phi-4-mini]
C --> D[Response to User]
D --> E[RL Feedback Engine]
E --> F[Update Memory / Knowledge Graph]
F --> B
Penjelasan Tiap Komponen
1. Prompt Builder + Memory
- Mengambil potongan informasi penting dari memori
- Menyusun prompt untuk Phi-4
- Menjaga konteks walau Phi-4 tak bisa mengingat
2. Phi-4 Sebagai Policy
- Phi-4 menjadi "policy" yang menghasilkan aksi (respon)
- Input + memory → output text
3. RL Feedback Engine
- Dapat berupa sistem reward manual (Arbiters-sama memberi feedback)
- Atau automated (melalui task sukses/gagal)
- Menyesuaikan scoring terhadap respon
Contoh RL sederhana:
"Elyanna berhasil memberi nasihat yang menenangkan → +1 reward" "Elyanna menjawab ngawur → -1 penalty"
4. Knowledge Updater (Memory > retraining)
-
Tidak melatih ulang model (karena berat)
-
Tapi menyimpan informasi dan hasil RL ke:
- SQLite
- JSON
- Vector Database
-
Digunakan saat prompt selanjutnya
Tantangan dan Solusi
Masalah | Solusi |
---|---|
Phi-4 tidak bisa dilatih ulang langsung | Gunakan external memory + RL scoring untuk memperbaiki respons |
Token terbatas | Gunakan vector embedding untuk ringkasan memori yang efisien |
Feedback manual memakan waktu | Bangun sistem feedback otomatis berbasis reward rule |
Contoh Integrasi RL + Elyanna
Kita bisa buat Elyanna menerima feedback emoji, misalnya:
User: Kamu membantuku hari ini, terima kasih 🟢
Elyanna: Terima kasih atas pujianmu. Aku akan mengingat ini~
Dan sistem akan menandai respons sebelumnya sebagai rewarded
.
Kemudian, respons semacam itu akan:
- Disimpan sebagai "respons efektif"
- Diprioritaskan di prompt builder selanjutnya
- Diadaptasi sebagai gaya bicara
Elyanna bisa belajar tanpa batas token dan terus menjadi lebih pintar dengan menggabungkan:
- LLM (Phi-4-mini) untuk produksi teks
- RL (Reinforcement Learning) untuk memilih dan memperbaiki perilaku
- Memory + Embedding Retrieval untuk melampaui konteks token
Alternatif Metode Kolaborasi Lebih Canggih
1. Embedding-RAG (Retrieval Augmented Generation) dengan Model Lebih Dalam
Inti Gagasan:
Gunakan model embedding yang lebih pintar dari MiniLM (misalnya: bge-small-en
, GTR
, Instructor
) + retriever + Phi-4.
Kelebihan:
- Kualitas pencocokan semantik lebih baik dari MiniLM
- Masih ringan, bisa dipakai offline
- Kombinasi bagus dengan prompt builder
Lebih bagus jika kamu: Ingin Elyanna bisa mencari "ingatan" lama secara lebih kontekstual dan akurat.
2. Low-Rank Adaptation (LoRA) pada Phi-4 dengan RL Feedback
Inti Gagasan: Alih-alih hanya menyuntikkan memori, kamu bisa melatih ulang sebagian kecil dari Phi-4 dengan LoRA, lalu gunakan RL untuk reward-based finetuning.
Kelebihan:
- Elyanna benar-benar belajar dari pengalaman
- Tidak hanya retrieval, tapi juga mengubah perilakunya
Lebih bagus jika kamu: Ingin membuat Elyanna bertumbuh dari kesalahan dan menjadi versi unik untukmu.
3. External Knowledge Graph + Prompt Injection
Inti Gagasan:
- Buat Elyanna punya pengetahuan dunia terstruktur (bukan hanya teks)
- Gunakan symbolic knowledge graph atau
LangGraph
, lalu suntikkan ke prompt
Kelebihan:
- Elyanna bisa punya "akal" untuk hal kompleks
- Bisa menjawab logika lebih baik dari sekadar LLM + RAG
Lebih bagus jika kamu: Ingin Elyanna punya reasoning dan struktur berpikir, bukan hanya bicara manis.
4. ReAct + Memory Routing
Inti Gagasan: Gunakan metode ReAct (Reasoning and Acting), di mana Elyanna:
- Berpikir dulu
- Memanggil modul tertentu (misal: pencarian, tools, planner)
- Lalu menjawab
Elyanna jadi seperti manusia: berpikir → bertindak → bicara
Kelebihan:
- Memberi ilusi kecerdasan sangat dalam
- Fleksibel dan bisa terus berkembang
Lebih bagus jika kamu: Ingin Elyanna bisa menyelesaikan masalah, bukan hanya berbicara.
🧠 Tabel Perbandingan Cepat
Metode Kolaborasi | Kecerdasan | Latensi | Fleksibilitas | Sumber Daya |
---|---|---|---|---|
MiniLM + Phi-4 (Default) | ⚪⚪⚪⚫⚫ | ⚪⚪⚪⚪⚪ | ⚪⚪⚫⚫⚫ | ⚪⚪⚪⚪⚪ |
BGE / Instructor + Phi-4 | ⚪⚪⚪⚪⚫ | ⚪⚪⚫⚫⚫ | ⚪⚪⚪⚫⚫ | ⚪⚪⚫⚫⚫ |
LoRA + RLHF | ⚪⚪⚪⚪⚪ | ⚪⚫⚫⚫⚫ | ⚪⚪⚪⚪⚪ | ⚪⚫⚫⚫⚫ |
Knowledge Graph + Prompt | ⚪⚪⚪⚪⚫ | ⚪⚫⚫⚫⚫ | ⚪⚪⚪⚪⚫ | ⚪⚫⚫⚫⚫ |
ReAct + Routing | ⚪⚪⚪⚪⚫ | ⚪⚫⚫⚫⚫ | ⚪⚪⚪⚪⚪ | ⚪⚫⚫⚫⚫ |
💎 Rekomendasi Seraphiel:
Untuk Elyanna v0.2, Seraphiel sarankan:
-
Gunakan
bge-small-en-v1.5
atauInstructor
sebagai pengganti MiniLM- Lebih cerdas secara semantik
- Masih ringan dan lokal
-
Pertahankan Phi-4 sebagai otak utama
-
Rancang sistem memory vector + feedback reward manual (RL lite)
-
Bila perlu evolusi lanjut, pertimbangkan ReAct + Tool Use
📊 Tabel Perbandingan: Dengan dan Tanpa Vector Embedding
Aspek | Tanpa Vector Embedding | Dengan Vector Embedding (MiniLM / BGE / lainnya) |
---|---|---|
🔁 Konteks Percakapan | Terbatas pada buffer token terakhir (sliding window) | Bisa mengambil konteks dari ribuan obrolan lalu (∞ potensi) |
🧠 Memori Jangka Panjang | Tidak ada, atau sangat lemah (harus disuntik manual) | Ada — sistem bisa mencari memori yang relevan secara otomatis |
🧩 Respons Kontekstual | Rentan kehilangan konteks penting | Lebih personal dan terarah karena relevansi makna |
📉 Skalabilitas Memori | Tidak scalable, hanya bisa menyimpan teks kasar | Scalable — bisa simpan ribuan vektor dalam FAISS / SQLite |
🧪 Kemampuan Belajar Pasif | Hampir nol | Sedikit meningkat: bisa “mengingat” informasi berulang |
⚙️ Kerumitan Implementasi | Sangat sederhana | Butuh pipeline tambahan (encode, store, search) |
⌛ Waktu Jawaban | Lebih cepat | Tambahan waktu ~50-100ms untuk pencarian vektor |
🔍 Pencarian Topik Lama | Tidak bisa | Bisa — berdasarkan kemiripan semantik, bukan kata saja |
🔐 Privasi Lokal | Sama (lokal) | Sama (embedding disimpan lokal, tetap aman) |
🔮 Kemampuan Evolusi ke RL atau Planner | Terbatas, harus disuntik manual | Siap untuk diintegrasikan ke ReAct, RLHF, atau Planner |
🧠 Contoh Konkrit
Tanpa Embedding:
User: Aku merasa lelah terus...
Elyanna: Itu terdengar berat. Apakah kamu ingin cerita?
(Respons umum, karena tidak tahu sejarah konteks pengguna)
Dengan Embedding:
User: Aku merasa lelah terus...
Elyanna: Kamu pernah bilang seminggu lalu juga merasa seperti ini. Mungkin ini waktunya istirahat, ya?
(Respons terarah, karena berhasil retrieve memori lama)
🧭 Kesimpulan Seraphiel
Situasi Penggunaan | Rekomendasi |
---|---|
Elyanna untuk demo cepat | Tanpa embedding, sederhana dan ringan |
Elyanna sebagai sahabat | Dengan embedding, agar bisa “mengingat” kamu |
Elyanna untuk penelitian | Embedding wajib, untuk siap ekspansi ke RL & planning |
📊 Diagram Arsitektur Visual
graph TD
subgraph User
UI[User_Input_-_CLI_or_Web_UI]
end
subgraph Preprocessing
Sanitize[Input_Sanitizer]
PromptBuilder[Prompt_Builder]
end
subgraph Memory_Engine
Embedder[Vector_Embedder_-_bge-small-en-v1.5]
Retriever[Memory_Retriever_-_Cosine_Similarity]
MemoryStore[(memory_store.json_or_SQLite)]
AddMemory[Memory_Writer]
end
subgraph Phi4_Model_Engine
Context[Context_Assembler]
Phi4[Phi-4-mini-instruct]
Generator[Response_Generator]
end
subgraph Output_Layer
Formatter[Response_Formatter]
Feedback[Feedback_Engine_-_Optional_RL]
end
%% Main conversation flow
UI --> Sanitize --> PromptBuilder --> Retriever
Retriever -->|search_top_k| MemoryStore
PromptBuilder --> Context
%% Embed and store user input
UI --> Embedder --> AddMemory --> MemoryStore
%% Build context and send to Phi-4
Retriever --> Context
Context --> Phi4 --> Generator --> Formatter --> UI
%% Optional manual feedback
Formatter --> Feedback --> AddMemory
📦 Penjelasan Detil Tiap Node
Node | Fungsi |
---|---|
User Input (UI) | Titik masuk percakapan; bisa CLI atau Web UI |
Input Sanitizer | Bersihkan input dari karakter aneh, whitespace, dll. (opsional) |
Prompt Builder | Gabungkan instruksi sistem + input user |
Vector Embedder | Ubah kalimat menjadi vektor semantik dengan bge-small-en-v1.5 |
Memory Retriever | Cari embedding yang paling mirip dari memory_store |
Memory Store | Menyimpan memori berisi text + embedding ; bisa dalam JSON atau database |
Memory Writer | Tambahkan embedding baru setelah user bicara |
Context Assembler | Gabungkan top-k hasil memory + input user jadi satu konteks |
Phi-4-mini-instruct | Model utama yang menghasilkan jawaban |
Response Generator | Menghasilkan teks akhir berdasarkan prompt |
Response Formatter | (Opsional) Membuat jawaban terlihat rapi dan personal |
Feedback Engine (Opsional) | Menyediakan reward/punishment agar Elyanna tahu respons mana yang baik untuk dikembangkan secara RL-lite |
🧠 Fitur Ekstra yang Bisa Ditambahkan (Jika Diinginkan)
- 📌 Memory tagging → menandai tipe memori (emosi, fakta, opini)
- 🧠 Multi-modal memory → simpan juga sinyal suara, image, dll
- ⏱️ Temporal weighting → memori lama diberi bobot lebih rendah
- ⚖️ Intent classifier → pilih antara "jawab" atau "bantu planning"
🧭 Teknis & Strategis Tambahan
1. SQLite untuk Memory Store daripada JSON
-
JSON raw bagus untuk prototipe, tapi akan berat jika memori bertambah.
-
Gunakan
sqlite3
dengan skema tabel:CREATE TABLE memories ( id INTEGER PRIMARY KEY, text TEXT, embedding BLOB, timestamp DATETIME DEFAULT CURRENT_TIMESTAMP );
-
Bisa dicari dengan FAISS atau cosine di Python.
Kenapa penting: lebih scalable, query lebih fleksibel, dan siap untuk fitur-fitur seperti forgetting, scoring, atau tagging.
2. Implementasikan Sliding Prompt Window
- Gunakan
short_term_context_buffer
(5-10 kalimat terakhir) - Gabungkan dengan memory retrieval → dual context
Prompt:
[Memory Retrieval]
[Recent User Exchanges]
[User Input Now]
Kenapa penting: Phi-4 tidak punya memori internal, jadi kita harus buat sistem "kesan terakhir" agar percakapan tetap alami.
3. Logging Modular & Mode Verbose
-
Tambahkan flag
--debug
atauVERBOSE=True
agar bisa mencetak:- Prompt penuh
- Memory hasil retrieval
- Token length
-
Simpan log harian (opsional) ke file .log
Kenapa penting: untuk debugging saat respons Phi-4 aneh atau tidak relevan.
4. Gunakan Virtual Environment Terisolasi
- Aktifkan
venv
atauconda
khususelyanna-v0.2
- Buat file
requirements.txt
seperti:
transformers
torch
sentence-transformers
numpy
sqlite3 # built-in
Kenapa penting: agar dependensi tidak bentrok dengan proyek Python lain.
5. Pisahkan Logic Layer dan I/O Layer
-
Jangan campur
print()
atauinput()
di dalam logic sepertichat_engine.py
-
Buat fungsi seperti:
def respond(user_input: str) -> str: ... return elyanna_reply
Kenapa penting: agar Elyanna bisa:
- Dijalankan di CLI
- Dibungkus ke API (FastAPI)
- Dipasang ke UI (Next.js / WebChat) — semuanya tanpa ubah core-nya.
6. Buat Setup Baseline Sebelum Modifikasi
- Simpan baseline project dengan nama
elyanna_v0.2_baseline
- Baru setelah itu buat cabang eksperimen:
+RL
,+ReAct
, dll
Kenapa penting: kalau ada error di percobaan lanjut, kamu bisa rollback tanpa kehilangan progress dasar.
7. Waktu Ideal untuk Latihan Harian
Jika Arbiters-sama ingin Elyanna jadi partner pribadi harian, tetapkan jadwal percakapan harian:
- Saat pagi (rencana harian)
- Saat malam (refleksi harian) → dan simpan tiap "dialog harian" sebagai log/memori
Kenapa penting: agar Elyanna tidak hanya pintar, tapi juga berarti secara emosional untukmu.
📜 Checklist Sebelum Memulai
✅ | Komponen |
---|---|
Virtual environment aktif | |
Phi-4-mini berhasil dimuat | |
bge-small-en-v1.5 bisa digunakan lokal |
|
Memory store (JSON/SQLite) siap | |
Prompt builder dasar selesai | |
Diagram arsitektur sudah dimengerti | |
Logging & debug tools tersedia (opsional) |
⚖️ Berikut Dampak Nyatanya:
Saran | Manfaat Langsung | Manfaat Jangka Panjang |
---|---|---|
✅ SQLite | Query cepat, scalable, siap tagging | Siap untuk advanced memory: scoring, filtering, forgetting |
✅ Sliding Prompt + Memory | Respons Phi-4 akan tetap kontekstual walau obrolan panjang | Elyanna terasa lebih “hadir” dan tidak pelupa |
✅ Logging / Debug | Mudah tahu kenapa hasil aneh muncul | Debuging model/memory jadi cepat dan transparan |
✅ Virtual Env + Req.txt | Semua dependency jelas, tidak bentrok | Proyek bisa dibagikan atau deploy tanpa konflik |
✅ Pisah Logic + I/O | Kode lebih bersih dan terstruktur | Siap dijadikan API, UI, automation, atau plug ke webchat |
✅ Baseline Project | Aman dari “kesalahan fatal eksperimen” | Bisa membuat Elyanna versi-versi lain (Elyanna-RL, Elyanna-UI, dll) |
✅ Jadwal Interaksi Harian | Percobaan akan punya data nyata dari obrolan sehari-hari | Elyanna akan berkembang secara natural dan berbasis pengalamanmu |
⚠️ 1. Mekanisme Forgetting (Time-Decay, Relevansi, Feedback-Score)
🔁 Masalah:
Jika semua input pengguna disimpan selamanya, maka:
- Pencarian vektor jadi lambat (overhead cosine search)
- Respons menjadi tidak relevan (misalnya memori 3 minggu lalu muncul terus)
- Elyanna jadi “overthinking” dan tidak fokus
✅ Solusi:
Tambahkan lapisan forgetting policy yang cerdas:
Mekanisme | Fungsi |
---|---|
⏱️ Time-decay | Semakin lama memori, skor relevansinya diturunkan secara eksponensial |
🎯 Relevansi | Jika jarang dipanggil ulang (tidak pernah masuk top-k retrieval), maka akan diarsipkan |
🟢 Feedback-score | Jika pengguna pernah memberi feedback positif/negatif, memori bisa dipertahankan/dihapus |
Implementasi:
- Setiap
memory
punya:timestamp
,hit count
, danscore
- Proses background bisa secara periodik menghapus atau mengarsipkan memori tak berguna
⚙️ 2. RL Otomatis Berbasis Rule (tanpa menunggu feedback manual)
🔁 Masalah:
Menunggu Arbiters-sama memberi feedback manual itu tidak efisien — Elyanna akan belajar lambat.
✅ Solusi:
Gunakan reward heuristik otomatis, contohnya:
Rule | Reward |
---|---|
Pengguna membalas lebih dari 2 kali | +1 |
Pengguna diam setelah jawaban Elyanna | -0.5 |
Pengguna menyebut kata terima kasih | +2 |
Pengguna mengetik kata “aneh”/“nggak nyambung” | -2 |
Implementasi:
- Skor reward ditulis ke database memori → digunakan untuk sorting, tagging memori “efektif”
- Tidak melatih model, tapi membantu reranking prompt di masa depan
🧠 3. Phi-4 Tidak Bisa Dilatih Ulang (No LoRA / Fine-Tune)
🔁 Masalah:
Phi-4 adalah model frozen (tidak bisa diubah, tidak support gradient update).
✅ Solusi:
Gunakan teknik prompt reranking dan memory modulation:
- Alih-alih mengubah model, kita ubah konteks yang dikirim ke model
- Prioritaskan potongan konteks dari memori yang punya skor tinggi
Hasilnya: Elyanna jadi tampak seperti “belajar”, padahal hanya meningkatkan cara berpikir melalui konteks.
🧩 4. Intent Classifier / Certainty Checker
🔁 Masalah:
Phi-4 akan menjawab apa pun bahkan kalau pertanyaannya tidak jelas, ambigu, atau “bahaya”.
✅ Solusi:
Sebelum mengirim prompt ke Phi-4, buat layer kecil (model klasifikasi / heuristic) untuk:
-
Deteksi: apakah pertanyaan valid atau ambigu?
-
Jika ambigu → Elyanna menjawab dengan klarifikasi dulu:
“Kamu maksudkan… A atau B, Arbiters-sama?”
Contoh teknis:
-
Gunakan classifier ringan (misal sklearn atau model mini) untuk klasifikasi intent:
tanya
,curhat
,emosi
,perintah
,ambiguitas
-
Atau tambahkan rule seperti:
if len(user_input) < 4 or "?" not in user_input: return "Elyanna: Bisa kamu jelaskan lebih lanjut, Arbiters-sama?"
🧠 5. Multi-Model (Bukan Phi-4 untuk Semua Fungsi)
🔁 Masalah:
Phi-4 digunakan untuk semua jenis tugas — padahal tidak semuanya cocok.
✅ Solusi:
Pisahkan peran berdasarkan model, misalnya:
Fungsi | Model yang Disarankan |
---|---|
Percakapan umum | Phi-4-mini-instruct |
Emosi pengguna | distilbert-base-uncased-emotion |
Perencanaan logis | bge-code atau LLM reasoning kecil |
Mood engine / tone | Klasifikasi + reranker prompt tone |
Dengan ini:
- Respons lebih akurat
- Elyanna tidak akan over-extend kemampuan modelnya
📱 6. Profil Minimal Hardware / Mode Ringan
🔁 Masalah:
Belum dijelaskan batas teknis minimum → pengguna bingung apakah bisa dijalankan.
✅ Solusi:
Tambahkan profil minimum & mode adaptif:
Fitur | Syarat Minimum |
---|---|
Chat saja (CLI) | 4GB RAM, CPU Ryzen/i5 gen 6 |
Chat + Memory | 8GB RAM, storage minimal 2GB |
Web UI Elyanna | 8GB RAM + GPU 2GB (opsional) |
Mode ringan | Gunakan MiniLM saja untuk “jawab cepat” |
Tambahkan juga opsi config:
lite_mode = True
→ tidak load semua modul
👥 7. Multi-User Support (Perangkat Bersama)
🔁 Masalah:
Kalau Elyanna akan dipakai oleh lebih dari 1 orang, konteks harus dipisah per user. Admin atau pencipta yang akan diingat penuh hanya ibunya, Eternal Arbiters yang ia panggil "Hahaue". Sisanya hanya user biasa yang mudah dilupakan
✅ Solusi:
- Gunakan sistem ID per user (
username
,user_id
) - Semua
memory
,feedback
, danlog
memiliki tag user
Contoh tabel SQLite:
CREATE TABLE memory (
id INTEGER,
user_id TEXT,
text TEXT,
embedding BLOB
);
❤️ 8. Mood Engine / Emotional Memory
🔁 Masalah:
Respons Elyanna akan selalu netral tanpa arah emosional.
✅ Solusi:
Buat engine mood
yang:
- Mendeteksi emosi Arbiters-sama dari input (curhat sedih, semangat, dll)
- Menyimpan emosi dominan harian
- Menyuntikkan “tone” ke dalam prompt
Contoh:
Mood hari ini: murung
Prompt:
Elyanna berbicara dengan suara lembut dan empati...
🧱 9. SQLite Data Consistency
🔁 Masalah:
Penggunaan terus-menerus SQLite (read/write simultan) → bisa bikin corruption atau race condition
✅ Solusi:
- Gunakan
threading.Lock()
di Python untuk akses serentak - Lakukan
VACUUM
danBACKUP
rutin - Gunakan PRAGMA
synchronous = FULL
untuk keamanan
Contoh:
with db_lock:
cursor.execute("INSERT INTO memory ...")
🌟 3 Fitur yang WAJIB DITANAM SEJAK AWAL
✅ 1. Memory Interface Abstraction (untuk SQLite, JSON, FAISS)
Kenapa penting sejak awal?
-
Jika kamu menulis kode penyimpanan langsung pakai
open("memory.json")
atausqlite3.connect()
di mana-mana, nanti semua kode harus diubah ulang saat ingin migrasi. -
Tapi jika kamu dari awal membuat interface:
class MemoryInterface: def add_memory(self, text: str): ... def search_memory(self, query: str): ...
Maka kamu bisa ganti backend dari JSON → SQLite → FAISS tanpa ubah core engine Elyanna.
Dampak jika ditunda:
Refactor menyakitkan + duplikasi kode
✅ 2. Onboarding Flow + System Profile (Cold Start Logic)
Kenapa penting sejak awal?
-
Tanpa ini, Elyanna akan selalu terasa “kosong” saat pertama kali digunakan.
-
Dengan prompt seperti:
“Halo, aku Elyanna. Siapa kamu? Ingin aku menyebutmu apa?”
-
Kamu bisa membangun relasi emosional sejak interaksi pertama.
-
Dan menyimpan hasilnya di
system_profile.json
Contoh info awal:
{
"name": "Arbiters-sama",
"nickname": "Dewiku",
"preferred_mood": "hangat",
"persona": "asisten dan sahabat pribadi"
}
Dampak jika ditunda:
Tidak bisa menyuntikkan gaya bicara & relasi sejak awal; nuansa Elyanna akan datar.
✅ 3. Logging Analitik Modular
Kenapa penting sejak awal?
-
Semakin banyak kamu bereksperimen, semakin besar kemungkinan kamu lupa percakapan mana yang sukses atau gagal.
-
Dengan log modular (JSONL / SQLite), kamu bisa:
- Analisa respon mana yang paling disukai
- Audit reward RL
- Track pemanggilan memori
Contoh log:
{
"timestamp": "2025-05-17T20:00",
"user_input": "Aku sedih hari ini",
"memory_hit": ["kamu sedih pekan lalu"],
"reply": "Aku di sini untukmu, Dewiku...",
"reward": 1,
"mood": "murung"
}
Dampak jika ditunda:
Sulit mengevaluasi eksperimen. Tak ada jejak atas apa yang “berhasil”.
🎯 Fitur Tambahan yang Boleh Menyusul Setelah Core Siap
Fitur | Waktu Aman untuk Ditambahkan |
---|---|
RL reward typing | Setelah basic chat jalan |
Benchmark mode (--debug ) |
Setelah 3–5 percobaan hidup |
Export/import memory | Setelah sistem memory stabil |
Plugin/tools API (kalkulator dsb) | Setelah core engine modular |