nobodywho

Local AI RunnersCLIRust

★ 1,429주당 +138조회 4

무엇인가

NobodyWho는 기기 위에서 LLM 추론을 실행하는 엔진이다. 클라우드 API 호출 자리를 로컬 프로세스가 대신한다. GGUF 형식 모델을 로드해 텍스트 생성, 도구 호출, 음성 입출력을 한 런타임에서 처리한다. Python·Kotlin·Swift·React Native·Flutter·Godot 바인딩을 통해 같은 엔진을 여러 플랫폼에서 쓴다.

어떻게 동작하나

추론 백엔드는 llama.cpp다. GPU가 있으면 Vulkan 또는 Metal로 레이어를 오프로드하고 남은 레이어는 CPU에서 돌린다. VRAM에 거의 들어가지 않으면 GPU를 건너뛰고, 가용 메모리가 가장 많은 GPU 한 장만 쓴다. 모델은 `hf:owner/repo:QUANT` 참조, HTTPS URL, 로컬 경로로 지정하며 원격 모델은 첫 사용 시 내려받아 캐시한다. `"auto"`를 넘기면 가용 메모리에 맞는 모델을 고른다. 도구 호출은 함수 시그니처에서 구조화 문법을 자동 생성하는 방식이라 스키마를 따로 쓰지 않는다. 이미지와 오디오는 멀티모달 입력으로 전달한다. 음성 합성은 Kokoro·Pocket TTS·Supertonic 백엔드가 WAV를 만들고, 음성 인식은 Whisper, 발화 종료 판정은 Silero가 맡는다. 실험적 로컬 서버는 OpenAI Chat Completions API를 구현해 127.0.0.1:8888에서 `/v1/models`와 `/v1/chat/completions`를 서비스한다.

무엇과 다른가

llama.cpp를 직접 쓰는 것과 달리 언어별 바인딩, 도구 호출 문법 생성, 모델 다운로드와 캐시를 얹은 계층이다. 클라우드 추론 API와 달리 API 키와 종량제 요금이 없고 네트워크 없이 동작한다. 같은 로컬 실행기 계열에서도 데스크톱·모바일·Godot까지 바인딩을 내는 점이 구분된다. OpenAI 호환 엔드포인트를 노출하므로 기존 클라이언트를 그대로 붙일 수 있다.

어떻게 쓰나

설치는 플랫폼별 패키지 관리자를 따른다. Python은 PyPI, Kotlin은 Maven Central, Swift는 Swift Package Manager, React Native와 Expo는 NPM, Flutter는 pub.dev에서 받는다. Godot 4.5 이상은 에디터의 AssetLib 탭에서 NobodyWho를 검색해 임포트하며, 임포트 대화상자에서 Ignore asset root를 켠다. 모델 경로 자리에 hf: 참조나 URL, 로컬 경로를 넣고, 첫 모델로 약 330MB인 Qwen3 0.6B를 권한다. 로컬 서버는 별도 실행 파일로 띄운다.

전제와 한계

Windows ARM64 빌드는 없고 웹 export도 없다(이슈 #111). Godot에는 iOS export가 없어 iOS에서는 Flutter·React Native·Swift 바인딩을 써야 한다. 메모리는 모델 파일의 약 1.5배, 이미 바쁜 기기에서는 2배가 필요하다. 8GB면 2GB 이하 모델, 그 이상은 16GB 이상이 기준이다. iOS는 iPhone 11 이상 4GB RAM, Android는 Snapdragon 855·Adreno 640·6GB RAM 이상이다. 라이선스는 EUPL-1.2로 상용·독점 프로젝트에 무료로 쓸 수 있으나, 이 저장소 코드를 수정해 배포하면 변경분을 공개해야 한다.

관련 논문 2

유사 도구