- Pi-C.A.R.D는 Raspberry Pi에서 완전히 로컬로 실행되는 AI 음성 비서로, 대화형 LLM 기능을 Raspberry Pi 하드웨어에서 구현하는 프로젝트임
- 상호작용 방식은 wake word 기반
main.py와 GPIO 버튼 기반 main_button.py 두 가지이며, 대화 중에는 wake word를 반복하지 않아도 됨
- 대화 기록은
config.py에서 조절할 수 있고, 메모리 크기를 줄이면 더 빠른 응답을 얻을 수 있음
- 빠르고 가볍게 만들기 위해 whisper.cpp와 llama.cpp 같은 C++ 구현을 사용하며, 외부 정보 접근 판단에는 fine-tuned BERT인
tool-bert2를 사용함
- 카메라 기반 기능은 README 여러 곳에서 설정 방법이 나오지만, 현재는 llama.cpp의 vision model 지원 변화 때문에 임시로 제거된 상태라는 주의가 붙어 있음
Pi-C.A.R.D가 하는 일
- Pi-C.A.R.D는 Raspberry Pi에서 실행되는 AI 기반 비서로, ChatGPT 같은 표준 LLM이 대화 환경에서 수행하는 작업을 로컬에서 처리하는 것을 목표로 함
- 이름은 Raspberry Pi - Camera Audio Recognition Device의 약자임
- 프로젝트는 계속 개발 중이며, 이슈나 풀 리퀘스트를 받을 수 있다고 안내함
- 새로 추가된 Docker 지원으로 설정과 수정이 더 쉬워지기를 기대한다고 밝힘
- 비디오 소개는 아직 제공되지 않았고, 추후 제공 예정임
동작 방식
-
wake word 방식
main.py를 실행하면 시스템이 wake word를 듣고 대화를 시작함
- 기본 wake word는
"raspberry", "barry", "razbear"임
- 대화가 시작된 뒤에는 매번 wake word를 반복할 필요가 없음
"stop", "exit", "goodbye" 같은 말을 하면 대화를 종료함
- wake word와 관련 동작은
config.py에서 바꿀 수 있음
-
버튼 방식
- 브레드보드, 전선, 버튼을 사용하면 GPIO 버튼으로 대화를 시작할 수 있음
- 버튼을 누른 뒤 명령을 말하는 방식이며, README 기준으로 더 매끄러운 상호작용 방식으로 소개됨
- 버튼 설정은
main_button.py 안내를 따름
- 버튼 버전에서는 버튼으로 대화를 시작하거나, assistant를 언제든 중단할 수 있음
-
대화 메모리
- 챗봇은 설정 가능한 대화 메모리를 가짐
- 이전 발화를 반복하게 하거나, 앞선 주제를 더 자세히 다루게 할 수 있음
- 더 빠른 응답을 원하면
config.py에서 메모리 값을 더 작게 설정할 수 있음
로컬 실행의 목표와 한계
- 프로젝트의 목표는 Raspberry Pi라는 비교적 저렴한 하드웨어에서 완전히 오프라인인 음성 비서를 얼마나 효율적으로 만들 수 있는지 확인하는 것임
- 모든 처리를 로컬에서 수행하므로 클라우드 기반 시스템만큼 강력하거나 빠르지는 않음
- README는 최근 1년 동안 작은 LLM 모델에서 큰 진전이 있었고, 이 프로젝트도 함께 개선될 수 있다고 봄
- 앱으로 만들지 않은 이유는 완전 오프라인 음성 비서를 Raspberry Pi에서 빠르게 실행하는 것이 가장 어려운 부분이라고 봤기 때문임
- 이 방식이 동작하면 더 강력한 하드웨어에서는 유사한 시스템이 더 빠르게 동작할 수 있다고 설명함
실행과 설정
- 저장소를 다운로드하고 요구사항과 설정을 마친 뒤 다음 명령으로 실행함
python main.py
python main_button.py
- Docker 실행은 권장 방식으로 소개되며 다음 명령을 사용함
sudo docker-compose build
sudo docker-compose up
- Docker 지원은 최근 추가된 기능이라 완벽히 동작하지 않을 수 있음
- Docker 방식은 wake-word 버전만 동작하며, GPIO 접근을 컨테이너로 전달하는 방법은 아직 확실하지 않음
사용 소프트웨어와 도구
- 빠르고 가벼운 시스템을 만들기 위해 가능한 곳에는 C++ 구현을 사용함
- 오디오 전사는 whisper.cpp를 사용하며, quick-start 가이드를 따라 설정해야 함
- README는 vision 기능에 llama.cpp를 사용한다고 설명하지만, 상단 주의문에서는 llama.cpp가 vision model을 더 이상 적극 지원하지 않아 카메라 기능이 임시 제거됐다고 밝힘
- assistant가 실제 비서에 가깝게 동작하도록 몇 가지 도구 접근 기능을 제공함
- 도구 접근 판단은 tool-bert를 통해 수행함
tool-bert2는 외부 정보 접근 시점을 결정하는 fine-tuned BERT임
- 이 모델을 만드는 방법은 tool-bert 저장소에 안내되어 있음
- 도구 접근을 활성화하려면
.env.example에서 필요한 키와 시크릿을 확인해야 함
카메라와 비전 기능 상태
- README 본문에는 Raspberry Pi에 카메라를 연결하면 사진을 찍고, 보이는 것을 설명하고, 해당 이미지에 대해 질문할 수 있다고 소개함
- 비전 기능 설정은
config.py에서 vision_model을 vlm으로 바꾸는 방식임
- 사용할 모델로 Qwen2-VL-2B-Instruct가 언급됨
- 입력 이미지 토큰 크기가 동적이므로 촬영한 사진 크기를 줄이면 추론 시간을 단축할 수 있다고 설명함
- 하지만 프로젝트 상단 주의문에 따르면 현재 카메라 기능은 임시 제거된 상태임
필요한 하드웨어
- 기본 하드웨어 구성은 Raspberry Pi 5 Model B, USB 마이크, 스피커임
- USB 마이크와 스피커는 Raspberry Pi의 USB 포트에 연결함
- 카메라는 Raspberry Pi의 카메라 포트에 연결함
- README에서 사용한 구성품은 다음과 같음
- Raspberry Pi 5는 새 카메라 포트를 사용하므로 새 카메라 커넥터가 필요함
- 카메라 커넥터는 선택 사항이지만, 카메라 기능을 쓰려면 구매해야 함
- GPIO 버튼 설정에는 튜토리얼의 앞부분이 도움이 됐다고 안내함
- 프로젝트는 Raspberry Pi 5에서 동작하도록 맞추는 데 초점을 두지만, 다른 기기에서도 동작할 수 있다고 설명함
로드맵과 진행 상태
- 구현 완료로 표시된 항목에는 기본 대화 기능, 카메라 기능, 응답 시간 벤치마크, 오버클러킹 테스트, whisper 시간 단축 방법 탐색이 포함됨
- assistant를 중단하고 새 질문을 하는 기능, custom tuned model 사용, 외부 서비스 함수 모델인
tool-bert 개선도 완료로 표시됨
- 휴대용 전원 연결 테스트와 더 많은 기기 테스트를 위한 Docker화도 완료됨
- 남은 항목에는 개선된 튜토리얼과 비디오, entropix를 사용한 선택적 모델 생성, 다른 언어 테스트, 더 많은 외부 서비스 추가가 있음
- 진행 상황 추적용 Notion 보드는 아직 완성되지 않았으며 링크가 제공됨