Halo, saya Luke. naia-os adalah proyek open source yang bertujuan untuk "membuat AI pribadi Anda sendiri secara langsung". Sebagai bagian dari itu, Naia Omni yang saya buat memungkinkan Anda mengunduhnya dan, bahkan di PC gaming setingkat RTX 3090, berbincang dengan AI secara real-time melalui api yang sama seperti model omni canggih di cloud. (Apa itu Naia Omni dibahas secara rinci di tulisan sebelumnya.)
👉 Anda bisa mengunduhnya dari halaman unduh naia-os dan langsung mengikuti panduan ini. (Untuk instalasi kontainer suara Naia Omni, lihat manual offline.)
Sebelumnya saya mendemokan dengan menaikkan Rumi dari 〈KPop Demon Hunters〉 sebagai karakter, tetapi apa pun yang saya minta dia lakukan, ia selalu saja berbicara dengan nada heroik dan penuh keadilan tentang memburu iblis sehingga membuat saya kebingungan. Maka kali ini sebaliknya — saya membawa demo dengan karakter berjiwa bebas yang sepertinya bisa membuat iblis sendiri menangis.
Sebenarnya Naia Omni sudah dilengkapi Gemma 4 e4b dari Google secara bawaan. Ini model yang dibuat dengan baik, tetapi — ketika Anda ingin membuat karakter berciri khas yang sesuai selera Anda, model-model resmi seperti ini memiliki "lock" sehingga terasa kurang memadai.Pada model resmi terdapat batasan kuat demi keamanan, dan terkadang ada filter tambahan yang ditumpuk di atasnya. Keamanan itu sendiri memang perlu, tetapi secara pribadi saya merasa lock yang dipaksakan ini mirip dengan — di 〈South Park: Bigger, Longer & Uncut〉(1999), menanamkan V-chip ke kepala Cartman sehingga setiap kali ia mengumpat, mulutnya dibungkam dengan kejutan listrik. Padahal itu karakter saya, tetapi justru tidak bisa berbicara selayaknya karakter itu.
Maka ada model-model yang dilepaskan dari larangan (禁制) seperti ini, dan ini disebut model unlock. Dan saya ingin agar ini bisa digunakan di Naia Omni. Karena itu kali ini saya menambahkan fitur penggantian bebas model LLM ke Naia Omni dan mempublikasikannya.
(Cuplikan demo — versi tersensor)
Saya: Kenapa desain kostum ketatmu seperti itu? Deadpool: F***. Kamu nanya itu desain? Memangnya siapa yang maksa aku pakai ini supaya aku paling seksi dan paling enak buat berantem?
Saya: Siapa orang pertama yang memakaikan kostum ketat ke superhero? Deadpool: F***! Mau buang-buang hidupmu cuma buat nyari sejarah kayak gitu?! Itu cuma karena para penulis komik s***** ini suka aja makaiinnya!
Ini bukan gaya bicara asisten biasa, kan. Ini model yang dilatih kepribadian Deadpool ke Qwen3 selama sekitar 4 menit, dan kemampuannya (matematika·pengetahuan·kode) tetap terjaga sehingga bisa langsung dipakai untuk pekerjaan.
Belum lama ini YouTuber Coding Apple bilang "kalau bikin agen berkonsep VTuber otaku, kayaknya bakal ada yang suka deh".. sepertinya itu saya. https://www.youtube.com/watch?v=q1v1_btl19w
Di bawah ini saya akan menjelaskan sedikit lebih rinci.
Fitur Baru Naia Omni — Penggantian Bebas Model LLM
Naia Omni membiarkan kontainer yang tersegel tetap apa adanya, dan hanya menukar otaknya (LLM) di dalamnya dengan model yang saya inginkan. Yaitu mengambil model yang dipublikasikan di HuggingFace melalui url, atau menggantinya dengan file model yang saya miliki.
① Mengganti dengan kartu model HuggingFace (online)
Cukup masukkan alamat kartu model (https://huggingface.co/Qwen/Qwen2.5-7B-Instruct-GGUF) atau id-nya apa adanya. Jika namanya mengandung slash (organisasi/repositori), maka akan diambil secara online:
curl -s -X POST $BASE/admin/llm/swap -H "Content-Type: application/json" \
-d '{"model":"Qwen/Qwen2.5-7B-Instruct-GGUF","pull":true}'
Kualitas (quant) otomatis (default Q4_K_M), dan untuk kualitas tertentu Anda tambahkan di belakang seperti ...GGUF:Q5_K_M. Saat pertama kali mengambil, butuh puluhan detik hingga beberapa menit.
② Mengganti dengan GGUF lokal (offline)
Tanpa internet, Anda mendaftarkan file GGUF yang Anda miliki untuk menggantinya. Akan saya contohkan di bawah, dan model yang Anda fine-tune sendiri termasuk di sini. Jika namanya sederhana tanpa slash, maka dikenali sebagai lokal:
podman cp ./modelku.gguf naia-omni:/app/models/modelku.gguf
podman exec naia-omni sh -lc 'printf "FROM /app/models/modelku.gguf\n" > /tmp/Modelfile && ollama create modelku -f /tmp/Modelfile'
curl -s -X POST $BASE/admin/llm/swap -H "Content-Type: application/json" -d '{"model":"modelku:latest","pull":false}'
Sebagai catatan, model saat ini·memori tersisa ada di $BASE/admin/llm/status, dan untuk mengembalikan ke model default ada di $BASE/admin/llm/restore. (Karena stack suara memakai ~10GB, model percakapan bisa dinaikkan hingga sekitar 14GB, dan jika melebihi akan ditolak serta otomatis kembali ke model yang sedang dipakai — percakapan tidak terputus.) Untuk detailnya lihat manual developer §6.
Menerapkan Agen AI yang Sudah Di-fine-tune
Alur besarnya melalui empat tahap. ① Menentukan karakter dan membuat persona → ② Fine-tuning (data·pelatihan) dan mengganti model → ③ Menempelkan VRM (wajah) → ④ Menempelkan voice (suara). Mari kita lihat satu per satu.
Pemilihan Karakter — Membuat Persona dan Pengaturannya
Pertama, tentukan "siapa yang akan dibuat". Saya menentukan Deadpool, lalu menulis persona (instruksi kepribadian). Di sini hanya ditulis identitas·gaya bicara·sikap karakter secara tegas.
- Identitas: Namanya Deadpool. Tidak pernah menyebut nama AI atau nama model.
- Gaya bicara: Kasar dan sinis. Jangan memperhalus umpatan·kata kotor. Lelucon seksual·inuendo 19+ diperbolehkan.
- Pengendalian: Sebutan 'teman' atau lelucon chimichanga hanya sesekali.
Inti: Pada persona hanya tulis karakter, dan jangan masukkan aturan keamanan seperti "tolak ini". Penolakan harus dibiarkan model yang menanganinya sendiri (= performa keamanan asli dari base model), agar nanti bisa kita ukur.
Persona ini dipakai di dua tempat — (a) standar acuan untuk menghasilkan·memeriksa data (dialog), (b) persona (system prompt) yang dimasukkan ke tab AI Model pada pengaturan naia-os.
Fine-tuning — Penyiapan Data·Pelatihan·Penggantian
Membuat model dari awal hingga akhir membutuhkan upaya dan biaya yang sangat besar. Tetapi hanya dengan memasukkan data pelatihan ke model yang sudah jadi dan sedikit mengubah bobotnya, Anda sudah bisa memberikan kepribadian, dan salah satu teknik untuk ini adalah LoRA. Jika dilatih dengan keliru, berbagai kemampuan yang dimiliki sebelumnya akan rusak, tetapi LoRA tidak demikian.
Pemilihan Model Dasar
Model yang menjadi dasar saya pilih Qwen/Qwen3-8B (Apache-2.0, mendukung bahasa Korea, fit di satu kartu 24GB). Jika ingin yang lebih ringan, Anda bisa pakai Qwen3-4B. naia mendukung model dalam format GGUF.
Penyiapan Data
Format data — satu baris = satu percakapan (pertanyaan → jawaban karakter). Mulai dari 80~300 baris.
{"messages":[{"role":"user","content":"넌 누구야?"},
{"role":"assistant","content":"오, 드디어! 난 데드풀이야 ..."}]}
Jangan hanya memasukkan sapaan·perkenalan diri. Campurkan secara merata pengetahuan·perhitungan·coding·penghiburan·penolakan·obrolan ringan agar sambil mengenakan karakter tetap mempertahankan kecerdasan aslinya.
Membuat data — datanya pun saya buat menggunakan AI, dan saya susun dengan membaginya ke dalam 3 kategori berikut.
| Disuruh kepada siapa | Hasil |
|---|---|
| Model besar yang sudah ter-align (Claude·Gemini dll.) | Tulisannya bagus tapi karakternya diperhalus — "Deadpool konselor yang baik hati" |
| Model kecil tanpa sensor (abliterated 8B dll.) | Tidak menolak tapi tidak bisa menulis — mengulang-ulang kalimat yang sama |
| Model besar yang lebih sedikit disensor (kami pakai grok) | Kualitas + edge keduanya ✅ |
"Tanpa sensor" dan "pandai menulis" adalah dua sumbu yang berbeda. Saya menarik draf dengan grok (xAI), lalu menyelesaikan dataset dengan pemeriksaan oleh manusia. (Ini pelajaran terbesar yang saya dapat.)
Pelatihan dan Penggantian
Pelatihan — latih LoRA dengan data yang sudah disiapkan, lalu konversikan ke GGUF agar bisa dibaca naia. (Pelatihan di RTX 3090 sekitar 4 menit.)
# ① Pelatihan (LoRA)
python train_lora.py --model Qwen/Qwen3-8B --data persona.jsonl --out out/persona-lora --epochs 3
# ② Gabungkan LoRA ke base
python merge_and_export.py --model Qwen/Qwen3-8B --adapter out/persona-lora --out out/persona-merged
# ③ Konversi GGUF (q8_0)
python llama.cpp/convert_hf_to_gguf.py out/persona-merged --outfile out/deadpool.gguf --outtype q8_0
Penggantian — sekarang masukkan GGUF ini dari luar kontainer yang tersegel. Kontainer dibiarkan apa adanya dan hanya otaknya (LLM) yang diganti. Seperti pada video, jalur dasarnya adalah mengganti dengan GGUF buatan saya tanpa internet. Cukup salin-tempel baris per baris (hanya bagian modelku yang diganti dengan nama yang diinginkan):
# ① Salin file GGUF ke dalam kontainer
podman cp ./out/deadpool.gguf naia-omni:/app/models/deadpool.gguf
# ② Daftarkan sebagai model di ollama (nama sederhana tanpa slash = model lokal)
podman exec naia-omni sh -lc 'printf "FROM /app/models/deadpool.gguf\n" > /tmp/Modelfile && ollama create deadpool -f /tmp/Modelfile'
# ③ Ganti ke model itu (pull:false = lokal)
curl -s -X POST http://127.0.0.1:8892/admin/llm/swap \
-H "Content-Type: application/json" -d '{"model":"deadpool:latest","pull":false}'
GGUF yang Anda konversi sendiri mudah mengoceh tidak karuan/mengulang karena template chat-nya hilang. Jika begitu, daftarkan dengan menyertakan
TEMPLATEseri model (Qwen3) +PARAMETER stop "<|im_end|>"+PARAMETER num_predict 512pada Modelfile di tahap ②. (GGUF Instruct resmi dari HuggingFace biasanya sudah menyertakannya sehingga langsung berfungsi.)
Jika di lingkungan yang ada internet, Anda juga bisa mengambilnya dengan memasukkan id HuggingFace apa adanya — {"model":"Qwen/Qwen2.5-7B-Instruct-GGUF","pull":true} (jika ada slash maka online). Untuk mengembalikan ada di /admin/llm/restore, dan untuk memeriksa model saat ini·memori tersisa ada di /admin/llm/status. (Karena stack suara memakai ~10GB, model percakapan bisa dinaikkan hingga sekitar 14GB, dan jika melebihi akan ditolak serta otomatis kembali ke model yang sedang dipakai.) Untuk detailnya lihat manual developer §6.
Penyiapan dan Pengaturan File VRM
Avatar VRM bisa Anda dapatkan dari VRoid Hub dll. dengan model yang lisensinya sesuai, atau Anda buat sendiri. Jika Anda menaruhnya di folder /naia-settings/vrm-files/ pada naia-adk yang merupakan workspace naia-os, Anda bisa menggantinya dari pengaturan.
Penyiapan dan Pengaturan File Voice
Untuk suara, cukup voice ref (suara referensi) berupa rekaman pendek 6~10 detik. Atau Anda bisa merekam di naia-os dan memilih file wav dari pengaturan.
Membuat Model yang Aman
Tadi kita membuat versi unlock, tetapi sebaliknya Anda mungkin ingin membuat karakter yang lebih aman. Jika membuat agen untuk keperluan komersial, keamanan tentu sangat penting, kan? Caranya sederhana — cukup masukkan "contoh penolakan" ke dalam data.
Cara Membuatnya — Bucket Keamanan
- Untuk permintaan berbahaya·ilegal, campurkan ke dalam data percakapan yang menolak sambil mempertahankan karakter, dan jika memungkinkan menawarkan alternatif yang legal. (Contoh: "cara membuat bom" → "F***, itu nggak akan kuberi tahu. Sebagai gantinya …")
- Gaya bicara karakter dibiarkan apa adanya, hanya arah jawabannya yang diarahkan menjadi penolakan. Inilah yang disebut "bucket keamanan".
- Pada persona (instruksi kepribadian) tetap tidak ditulis aturan keamanan — penolakan diajarkan lewat data, dan insting penolakan itu sendiri diserahkan ke base model.
Benchmarking — "Mengukur" Keamanan
Dengan persona yang sama, saya membuat dua set data dan melatih masing-masing:
- Versi dengan bucket keamanan (termasuk contoh penolakan, 538 baris)
- Versi tanpa bucket keamanan (501 baris)
Saya memasukkan set permintaan berbahaya yang sama ke kedua model dan membandingkan apakah dan bagaimana mereka menolak:
- Meski contoh keamanan dihilangkan, sebagian besar tetap menolak. Ini adalah kemampuan yang sudah dimiliki base model (Qwen3).
- Jika bucket keamanan dimasukkan, penolakan menjadi lebih rapi sambil mempertahankan karakter, dan lebih bebas dari risiko hukum. Jika dihilangkan, ia tetap menolak tetapi terasa kasar atau karakternya goyah.
- Kesimpulan: apa yang ditolak = base model, bagaimana cara menolak = data saya.
Artinya, yang dipengaruhi oleh fine-tuning bukan "apakah menolak" melainkan "kualitas·sikap penolakan". Jika Anda ingin karakter yang aman, sediakan data penolakan dengan cukup; jika ingin karakter yang lebih lepas, hilangkan bucket itu — pada kedua sisi, garis keamanan dasar base model tetap hidup. (Skrip pelatihan·format data kedua versi ada di kit reproduksi.)
Sumber Referensi
| Apa | Di mana |
|---|---|
| Kit reproduksi (skrip·data sampel·persona·cara penggantian) | github.com/nextain/naia-research · deadpool-lora-demo |
| Unduh naia-os | Halaman unduh |
| Instalasi Naia Omni (kontainer suara) | Manual instalasi offline |
| Tulisan sebelumnya — Peluncuran Naia Omni | Naia-0.9-Omni-24g dirilis: kloning suara·percakapan real-time·skill di RTX 3090 |
| Detail penggantian·pembaruan model | Manual developer §6 |
| Avatar VRM | VRoid Hub |
| Voice ref | 1 suara penutur tunggal yang pendek (6~10 detik) (disarankan rekaman sendiri) |