4 poin oleh GN⁺ 2024-05-14 | 1 komentar | Bagikan ke WhatsApp
  • 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

 
GN⁺ 2024-05-14
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

    • Akan bagus kalau Apple/Google memasukkan teknologi yang membuatnya bisa dibuktikan dan diverifikasi bahwa kamera/mikrofon perangkat hanya dapat menangkap saat lampu indikator menyala, dan bahwa aplikasi maupun lapisan atas sistem operasi tidak bisa mengakalinya
    • Fitur nomor satu yang paling saya inginkan dari “asisten” apa pun adalah berjalan offline
      Saya penasaran apakah ini hanya berjalan di Pi5, atau juga bisa berjalan di board lain selain Raspberry Pi
    • Namanya bagus, dan lebih bagus lagi karena memakai meme Picard facepalm lama
      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

    • Sebaiknya lihat Rhasspy
      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
    • https://www.robotshop.com/products/respeaker-usb-microphone-...
    • Kamera Playstation 3/4 juga memiliki mikrofon, dan hasilnya cukup baik
      Bisa didapat di eBay sekitar 15–20 dolar
    • Saya penasaran apakah Anda sudah memeriksa fitur Voice Assistant yang terintegrasi di HA: https://www.home-assistant.io/voice_control/
      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

    • Pi-C.A.R.D itu sempurna
      100% terbaca sebagai Picard, dan lebih mudah dikenali daripada LCARS
    • Karena itulah kita tidak bisa punya barang LCARS yang keren: https://en.wikipedia.org/wiki/LCARS#Legal
    • Atau bisa juga LLM Offline Camera, User Trained Understanding Speech, menjadi LOCUTUS
    • Namanya seharusnya seperti Beneficial Audio Realtime Recognition Electronic Transformer
  • 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

    • Beberapa produk maker yang dulu dijual di Target berisi kotak kardus, tombol arcade RGB-LED di bagian atas, speaker, dan 4 mikrofon pada “hat” untuk RPi
      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
    • Membaca tulisan ini benar-benar membuat saya bersemangat, dan saya harap ini membantu
      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

    • Raspberry Pi sangat mirip dengan mesin Linux biasa, dan perbedaan terbesarnya hanya bahwa ia memakai ARM, bukan CPU Intel/AMD, sehingga cakupan dukungannya sedikit lebih sempit
      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

    • Selain ekosistem di sekitar satu platform, sebagian besar keunggulan pembeda Raspberry Pi ada pada form factor dan konsumsi daya
      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
    • Untuk penambangan kripto, orang biasa mengubah satu slot PCIe menjadi 4 slot PCIe x1, atau memakai board yang memang punya 12 atau lebih slot PCIe x1
      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

    • Benar
      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?

    • Ini benar-benar di luar topik, tapi mungkin sebenarnya ia tidak perlu melakukannya
      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
    • Mungkin ia harus menyebutkannya secara spesifik untuk menimpa default yang kuat demi menghindari gugatan, yang terlalu suam-suam kuku dibanding seleranya
      Apakah gugatan masih ada di dunia pasca-kelangkaan? Mungkin saja
    • Bisa jadi karena kekuatan kebiasaan
      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
    • Justru ia kurang spesifik
      https://i.redd.it/hluqexh3oqc91.jpg
    • Suatu kali ia hanya berkata “Tea, Earl Grey”, lalu komputer menafsirkannya sebagai “Tea, Earl Grey, luke warm”
  • 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?

    • Secara umum idenya seperti itu
      Lebih tepatnya, ia menyimpan beberapa chunk audio lalu membuang yang paling lama, yaitu rolling window