- Pi-C.A.R.D adalah asisten suara AI yang berjalan sepenuhnya secara lokal di Raspberry Pi, sebuah proyek untuk mewujudkan kemampuan LLM percakapan di perangkat keras Raspberry Pi
- Ada dua mode interaksi: berbasis wake word melalui
main.py dan berbasis tombol GPIO melalui main_button.py; selama percakapan, wake word tidak perlu diulang
- Riwayat percakapan dapat diatur di
config.py, dan jika ukuran memori diperkecil, respons bisa menjadi lebih cepat
- Agar cepat dan ringan, proyek ini menggunakan implementasi C++ seperti whisper.cpp dan llama.cpp, serta menggunakan BERT hasil fine-tuning
tool-bert2 untuk menentukan kapan perlu mengakses informasi eksternal
- Fitur berbasis kamera dijelaskan cara konfigurasinya di beberapa bagian README, tetapi ada catatan bahwa saat ini fitur tersebut dihapus sementara karena perubahan dukungan vision model di llama.cpp
Apa yang dilakukan Pi-C.A.R.D
- Pi-C.A.R.D adalah asisten berbasis AI yang berjalan di Raspberry Pi, dengan tujuan menangani secara lokal tugas-tugas yang biasanya dilakukan LLM standar seperti ChatGPT dalam lingkungan percakapan
- Namanya merupakan singkatan dari Raspberry Pi - Camera Audio Recognition Device
- Proyek ini masih terus dikembangkan, dan disebutkan bahwa issue maupun pull request diterima
- Disebutkan juga bahwa dukungan Docker yang baru ditambahkan diharapkan mempermudah konfigurasi dan modifikasi
- Video pengenalan belum tersedia dan direncanakan akan ditambahkan nanti
Cara kerja
-
Mode wake word
- Jalankan
main.py dan sistem akan mendengarkan wake word untuk memulai percakapan
- Wake word default adalah
"raspberry", "barry", "razbear"
- Setelah percakapan dimulai, wake word tidak perlu diucapkan lagi setiap saat
- Mengucapkan
"stop", "exit", "goodbye" akan mengakhiri percakapan
- Wake word dan perilaku terkait dapat diubah di
config.py
-
Mode tombol
- Dengan breadboard, kabel, dan tombol, percakapan dapat dimulai melalui tombol GPIO
- Caranya adalah menekan tombol lalu mengucapkan perintah, dan menurut README ini diperkenalkan sebagai mode interaksi yang lebih mulus
- Pengaturan tombol mengikuti panduan di
main_button.py
- Pada versi tombol, pengguna dapat memulai percakapan atau menghentikan assistant kapan saja melalui tombol
-
Memori percakapan
- Chatbot memiliki memori percakapan yang dapat dikonfigurasi
- Ini memungkinkan bot mengulang ucapan sebelumnya atau membahas topik sebelumnya dengan lebih rinci
- Jika menginginkan respons lebih cepat, nilai memori di
config.py dapat dibuat lebih kecil
Tujuan dan batasan eksekusi lokal
- Tujuan proyek ini adalah melihat seberapa efisien asisten suara yang sepenuhnya offline dapat dibuat di perangkat keras yang relatif terjangkau seperti Raspberry Pi
- Karena semua pemrosesan dilakukan secara lokal, sistem ini tidak sekuat atau secepat sistem berbasis cloud
- README menyebut bahwa dalam setahun terakhir ada kemajuan besar pada model LLM kecil, dan proyek ini juga dapat ikut membaik seiring perkembangan tersebut
- Alasan tidak dibuat sebagai aplikasi adalah karena bagian tersulit dianggap menjalankan asisten suara yang sepenuhnya offline dengan cepat di Raspberry Pi
- Dijelaskan bahwa jika pendekatan ini berhasil, sistem serupa dapat berjalan lebih cepat di perangkat keras yang lebih kuat
Menjalankan dan konfigurasi
- Setelah mengunduh repositori dan menyelesaikan requirement serta konfigurasi, jalankan dengan perintah berikut
python main.py
- Versi tombol dijalankan dengan perintah berikut
python main_button.py
- Menjalankan lewat Docker diperkenalkan sebagai metode yang direkomendasikan, menggunakan perintah berikut
sudo docker-compose build
sudo docker-compose up
- Dukungan Docker adalah fitur yang baru ditambahkan sehingga mungkin belum bekerja dengan sempurna
- Metode Docker hanya mendukung versi wake-word, dan cara meneruskan akses GPIO ke container masih belum pasti
Perangkat lunak dan alat yang digunakan
- Untuk membangun sistem yang cepat dan ringan, proyek ini menggunakan implementasi C++ di sebanyak mungkin bagian
- Transkripsi audio menggunakan whisper.cpp, dan perlu dikonfigurasi mengikuti panduan quick-start
- README menjelaskan penggunaan llama.cpp untuk fitur vision, tetapi catatan peringatan di bagian atas menyebut bahwa fitur kamera dihapus sementara karena llama.cpp tidak lagi secara aktif mendukung vision model
- Agar assistant dapat bertindak lebih mirip asisten sungguhan, disediakan beberapa kemampuan akses alat
- Penentuan akses alat dilakukan melalui tool-bert
tool-bert2 adalah BERT hasil fine-tuning yang menentukan kapan harus mengakses informasi eksternal
- Cara membuat model ini dijelaskan di repositori tool-bert
- Untuk mengaktifkan akses alat, kunci dan secret yang diperlukan perlu diperiksa di
.env.example
Status kamera dan fitur vision
- Di isi utama README dijelaskan bahwa jika kamera dihubungkan ke Raspberry Pi, sistem dapat mengambil foto, menjelaskan apa yang terlihat, dan menjawab pertanyaan tentang gambar tersebut
- Pengaturan fitur vision dilakukan dengan mengubah
vision_model menjadi vlm di config.py
- Model yang disebutkan untuk digunakan adalah Qwen2-VL-2B-Instruct
- Karena ukuran token gambar input bersifat dinamis, dijelaskan bahwa memperkecil ukuran foto yang diambil dapat mempersingkat waktu inferensi
- Namun menurut catatan peringatan di bagian atas proyek, saat ini fitur kamera berada dalam status dihapus sementara
Perangkat keras yang dibutuhkan
- Konfigurasi perangkat keras dasar adalah Raspberry Pi 5 Model B, mikrofon USB, dan speaker
- Mikrofon USB dan speaker dihubungkan ke port USB Raspberry Pi
- Kamera dihubungkan ke port kamera Raspberry Pi
- Komponen yang digunakan dalam README adalah sebagai berikut
- Raspberry Pi 5 menggunakan port kamera baru sehingga memerlukan konektor kamera baru
- Konektor kamera bersifat opsional, tetapi perlu dibeli jika ingin menggunakan fitur kamera
- Untuk pengaturan tombol GPIO, disebutkan bahwa bagian awal tutorial cukup membantu
- Proyek ini berfokus pada penyesuaian agar berjalan di Raspberry Pi 5, tetapi dijelaskan bahwa perangkat lain juga mungkin dapat menjalankannya
Roadmap dan status progres
- Item yang ditandai selesai mencakup fungsi percakapan dasar, fitur kamera, benchmark waktu respons, pengujian overclocking, dan eksplorasi cara mempercepat waktu whisper
- Fitur untuk menghentikan assistant lalu mengajukan pertanyaan baru, penggunaan custom tuned model, serta peningkatan
tool-bert sebagai model fungsi layanan eksternal juga ditandai selesai
- Pengujian dengan sumber daya portabel dan Dockerisasi untuk menguji lebih banyak perangkat juga telah ditandai selesai
- Item yang tersisa mencakup tutorial dan video yang ditingkatkan, pembuatan model opsional menggunakan entropix, pengujian bahasa lain, serta penambahan lebih banyak layanan eksternal
- Board Notion untuk pelacakan progres masih belum selesai, dan tautan disediakan
1 komentar
Opini Hacker News
Saya ingin membuat asisten suara yang sepenuhnya offline, yang sama sekali tidak memerlukan koneksi internet, agar privasi pengguna terjaga dan data tidak pergi ke server pihak ketiga
Upaya yang bagus, terima kasih
Saya penasaran apakah ini hanya berjalan di Pi5, atau juga bisa berjalan di board lain selain Raspberry Pi
Serius, namanya membuat saya tertarik, lalu setelah membaca perkenalannya saya berpikir, “kalau ini Alexa yang tidak mengunggah semua hal yang saya ucapkan ke Amazon, mungkin ini juga berguna buat saya”
Kalau kata bangun default-nya “hey assistant”, saya menyarankan “Computer” :) tentu saja suaranya harus terdengar seperti https://en.wikipedia.org/wiki/Majel_Barrett
Yang saya butuhkan adalah asisten suara yang bisa ditangani oleh RPi 4, terintegrasi dengan HomeAssistant, dan hanya offline sehingga tidak mengirim data saya ke mana pun
Dibandingkan dengan yang pernah saya lihat sejauh ini, proyek ini tampaknya memenuhi hampir semua syarat, jadi kelihatannya dibuat dengan baik
Selain itu, saya penasaran apakah ada rekomendasi mikrofon yang kompatibel dengan RPi untuk penggunaan seperti Alexa
Menjalankan model bahasa besar secara praktis di 4B memang sulit, tetapi tidak harus berbasis model bahasa besar
Di komunitas Rhasspy, pola yang umum adalah melakukan deteksi kata bangun yang murah dan ringan secara lokal di perangkat satelit yang memiliki mikrofon (4B juga cukup untuk ini), lalu streaming rekaman sebenarnya melalui jaringan lokal ke hub pusat agar hasilnya lebih baik
Bisa didapat di eBay sekitar 15–20 dolar
NabuCasa mempekerjakan pengembang utama Rhasspy untuk mengerjakan fitur ini, dan terus makin bagus di setiap pembaruan
“Kenapa Pi-card? Raspberry Pi - Camera Audio Recognition Device” berarti sepertinya melewatkan peluang LCARS
Bisa saja dibuat sebagai LLM Camera Audio Recognition Service, dan tentu saja merespons kata kunci “computer”. Kalau berjalan juga di selain Pi, itu bisa menjadi LCARS
100% terbaca sebagai Picard, dan lebih mudah dikenali daripada LCARS
Saya menantikan untuk mencoba ini
Sejauh yang saya tahu, asisten suara yang terbuka, stabil, fleksibel, dan berfokus pada privasi masih sangat kurang, jadi saya berharap proyek ini mendapat momentum
Sekitar setahun lalu keluarga saya benar-benar ingin memasang Alexa, tetapi saya tidak ingin menaruh perangkat pengawasan Bezos di rumah, jadi saya membujuk mereka untuk mencoba membuatnya sendiri. Saya memilih Mycroft di Pi 4, tetapi tidak berjalan dengan baik; deteksi kata bangunnya tidak konsisten, integrasinya juga kurang, dan pada saat itu proyeknya terlihat seperti pada dasarnya sudah terbengkalai. Saya sempat ingin berkontribusi ke proyek dan integrasi yang buntu itu, tetapi kesibukan hidup membuat saya tidak kembali lagi, dan untungnya keluarga saya juga melupakan Alexa
Entah itu nano atau pico, pokoknya board seukuran SO-DIMM. Tidak ada kata bangun; saat menekan tombol yang menyala putih, warnanya berubah dua kali: sekali untuk konfirmasi tekan, dan sekali lagi untuk menandakan sedang mendengarkan. Setelah selesai berbicara, warnanya berubah lagi dan perangkat mengucapkan respons
Backend-nya memakai sesuatu dari Google, dan pengaturan serta menjaga agar tetap berjalan benar-benar membuat frustrasi, tetapi memang berfungsi. Saya punya dua perangkat seperti itu, jadi saya sudah menunggu sesuatu yang memungkinkan saya meng-host sendiri hal serupa
Saya berencana mengerjakan lebih banyak hal di sini. Ada beberapa demo singkat di YouTube yang bisa menunjukkan kualitas saat ini: https://www.youtube.com/watch?v=OryGVbh5JZE
Saya penasaran apakah ini bisa dijalankan di mesin Linux biasa
Atau apakah ada proyek serupa yang bisa melakukannya
Saya pernah mencari sebelumnya, tetapi bidang ini rumit, dan batasan-batasannya cukup halus
Secara umum Pi-C.A.R.D tampaknya memakai Python dan C++, jadi sepertinya tidak akan ada banyak masalah untuk menjalankannya di mana pun yang bisa menjalankan dan mengompilasi Python serta C++
Sekitar 3 tahun lalu saya mencoba membuat hal seperti ini di RPI 4 generasi awal, tetapi terbentur keterbatasan hardware dan batas pengetahuan saya
Melihat sekarang ini benar-benar berjalan sungguh keren
Akan keren kalau ada raspi hat yang bisa dipasangi GPU, tapi saya tidak yakin apakah itu praktis atau memungkinkan
Kartu grafis hari ini adalah limbah elektronik besok, jadi mungkin bisa mendapat kehidupan kedua untuk memperkuat proyek DIY raspi seperti ini
Kalau menambahkan GPU/adaptor/catu daya demi memanfaatkan core CUDA murah, kemungkinan besar dari sisi daya, harga, dan ukuran malah lebih buruk daripada solusi SoC atau x86 NUC yang lebih baik
Saya tidak tahu sihir apa yang ada di PCIe, tapi setidaknya salah satu board komersial, Atomic Pi, punya antarmuka PCIe yang “terekspos”
Bagaimanapun, GPU berada di atas PCB kecil, dan PCB itu terhubung lewat kabel USB3 ke PCB yang lebih kecil di slot PCIe motherboard. Intinya, apa pun PCIe itu, ia bisa diteruskan lewat kabel USB3 ke GPU agar bisa bekerja
Di daftar hardware terlihat ada speaker, jadi saya penasaran apakah ini juga merespons dengan suara
Saat ini memakai https://espeak.sourceforge.net/, jadi suaranya tidak terlalu enak didengar
Selain itu, respons model bahasa besar di-streaming, jadi tidak butuh waktu lama sampai mendapat jawaban. Karena diproses per chunk, kadang hanya sebagian kata yang sempat diucapkan sebentar. Tentu waktu tunggunya juga bergantung pada model apa yang dipakai dan seberapa besar ukuran konteksnya
Kenapa Picard selalu harus menyebutkan sampai preferensi suhu teh Earl Grey-nya?
Kalau AI-nya sepintar itu, bukankah seharusnya sudah mempelajari seleranya?
Di serialnya, banyak tokoh memberi instruksi ke replicator dengan lebih fleksibel. “Tea, Earl Grey, Hot” tampaknya kebiasaan Picard, dan mungkin kebiasaan yang muncul dari perangkat makanan/minuman yang lebih primitif daripada replicator Enterprise-D
Apakah gugatan masih ada di dunia pasca-kelangkaan? Mungkin saja
Kebanyakan orang Starfleet sepertinya tidak tahu cara memakai replicator dengan baik. Meski ada perangkat sepintar itu, mereka memakainya seperti peralatan rumah tangga biasa yang manualnya tak pernah dibaca, melewatkan 90% fiturnya, lalu mengeluh makanan replicator rasanya buruk
https://i.redd.it/hluqexh3oqc91.jpg
Saya penasaran bagaimana wake word bekerja
Apakah caranya terus mendengarkan lalu mengabaikan audio kalau dalam beberapa detik terakhir tidak ada wake word atau frasa pemicu?
Lebih tepatnya, ia menyimpan beberapa chunk audio lalu membuang yang paling lama, yaitu rolling window