React Native에서 온디바이스 AI 구축의 실용적인 교훈

LLM을 이용한 텍스트 생성
React Native에서 GGUF 모델을 실행하려면 llama.rn을 사용하세요. 이는 llama.cpp를 래핑하고 Android(JNI)와 iOS(Metal)용 네이티브 바인딩을 제공합니다. 콜백을 통한 토큰 스트리밍이 잘 작동합니다.
메모리 관리가 중요합니다: 7B Q4 모델은 런타임에 약 5.5GB의 RAM이 필요합니다(파일 크기 × 1.5는 KV 캐시와 활성화를 위한 공간). 디바이스 RAM의 60%를 하드 예산으로 사용하고, 50%에서 경고를 표시하며, 60%에서 차단하여 OS가 앱을 강제 종료하는 것을 방지하세요.
GPU 가속은 Android에서는 OpenCL(Adreno GPU), iOS에서는 Metal을 사용합니다. Android에서 GPU 레이어가 0보다 크면 Flash attention이 충돌하므로 코드에서 이를 강제하세요. KV 캐시 양자화(f16/q8_0/q4_0)는 대부분의 디바이스에서 GPU보다 더 큰 효과를 냅니다; 테스트에서 f16에서 q4_0로 변경하면 추론 속도가 약 3배 증가했습니다.
Stable Diffusion을 이용한 이미지 생성
이는 플랫폼별로 다르며 두 플랫폼을 모두 커버하는 단일 라이브러리는 없습니다.
- Android: MNN(알리바바 프레임워크, CPU, 모든 ARM64 디바이스에서 작동)과 QNN(Qualcomm AI 엔진, NPU 가속, Snapdragon 8 Gen 1+만 해당)을 사용하세요. QNN은 3배 빠르지만 최근 Qualcomm 칩에서만 작동합니다. 런타임 감지와 자동 폴백을 구현하세요.
- iOS: Apple의 ml-stable-diffusion 파이프라인을 Core ML과 Neural Engine 가속과 함께 사용하세요. 팔레타이즈된 모델(~1GB, 6비트)은 메모리가 제한된 디바이스에 적합합니다; 전체 정밀도(~4GB, fp16)는 ANE에서 더 빠르지만 여유 공간이 필요합니다.
실제 벤치마크: 512×512 해상도, 20단계에서 Snapdragon NPU는 5–10초, 플래그십 CPU는 15초, iOS ANE는 8–15초가 소요됩니다. 사용자가 앱이 멈췄다고 생각하지 않도록 N 디노이징 단계마다 실시간 미리보기를 표시하세요.
Whisper를 이용한 음성 전사
whisper.rn은 whisper.cpp를 래핑하며 통합이 간단합니다. 여러 모델 크기(Tiny/Base/Small)를 제공하고 사용자가 속도 대 정확도 트레이드오프를 선택할 수 있게 하세요. 실시간 부분 전사(말하는 대로 단어가 나타남)는 네이티브 느낌을 줍니다.
오디오를 네이티브 코드에서 버퍼링하고 전사 후 지우세요; 개인정보 보호가 중요하다면 오디오 파일을 디스크에 쓰지 마세요.
멀티모달 모델을 이용한 비전
비전 모델은 두 개의 파일이 필요합니다: 메인 GGUF와 mmproj(멀티모달 프로젝터) 동반 파일입니다. 이를 투명하게 처리하세요: 비전 모델을 자동 감지하고, mmproj를 자동 다운로드하며, 단일 단위로 추적하고, 링크가 끊어지면 런타임에 모델 디렉토리를 검색하세요. 2B 비전 모델의 경우 두 파일을 병렬로 다운로드하여 다운로드 시간을 거의 절반으로 줄이세요.
500M의 SmolVLM은 모바일에 적합한 스위트 스팟으로, 플래그십 디바이스에서 약 7초가 소요되며 문서 읽기와 장면 설명에 유용합니다.
온디바이스 에이전트 루프를 위한 도구 호출
함수 호출을 지원하는 모델은 자동 루프를 통해 도구(웹 검색, 계산기, 날짜/시간, 디바이스 정보)를 사용할 수 있습니다: LLM이 생성하고, 도구 호출을 파싱하며, 실행하고, 결과를 컨텍스트에 다시 주입하고, LLM이 계속합니다. 무한 루프를 방지하기 위해 최대 3회 반복, 총 5회 호출로 제한하세요.
두 가지 파싱 경로를 지원하세요: 더 큰 모델은 llama.rn을 통해 구조화된 JSON 도구 호출을 네이티브로 출력하고, 더 작은 모델은 <tool_call>과 같은 XML을 출력합니다. 모델 로드 시점에 jinja 채팅 템플릿을 검사하여 도구 지원을 감지하세요; 모델이 도구를 지원하지 않으면 시스템 프롬프트에 도구 정의를 주입하지 않아 환각을 피하세요. 계산기는 재귀 하강 파서를 사용합니다—절대 eval()을 사용하지 마세요.
의도 분류
앱이 텍스트와 이미지 생성을 모두 수행한다면, 입력 분석을 기반으로 사용자가 원하는 것을 결정해야 합니다.
📖 전체 소스 읽기: r/LocalLLaMA
👀 See Also

Claude Code를 위한 159개 오픈소스 스킬 기반 스킬 작성 원칙
한 개발자가 Claude Code용 효과적인 스킬 작성에 대한 10가지 원칙을 공개했습니다. 이 원칙들은 159개의 스킬을 포함한 오픈소스 스킬 레지스트리를 구축하고 유지하며 얻은 경험에서 도출되었습니다. 원칙에는 폴더를 단일 파일 대신 사용하기, 주의사항 섹션 추가하기, 주문형 훅 구현하기와 같은 실용적인 접근법이 포함됩니다.

스킬 설치 없이 사용 가능한 5가지 핵심 OpenClaw 기능
OpenClaw의 기본 설치로 파일 작업, 쉘 명령어, 웹 가져오기, 예약 작업, 다단계 워크플로우를 추가 스킬 없이 처리할 수 있어 토큰 비용과 설정 복잡성을 줄입니다.

효율적인 자동화를 위한 게이트웨이 연결 끊김 처리
게이트웨이 연결이 끊겼을 때 AI 코딩 에이전트 운영을 유지하는 실용적인 솔루션을 살펴보세요. Grafana를 통한 모니터링, 자동 재연결 스크립트, 신뢰성을 위한 중복 경로 활용 등 팁을 포함합니다.

Claude Code 구성을 위한 .claude/ 폴더 구조 이해하기
.claude/ 폴더에는 두 개의 디렉터리가 있습니다: 팀 구성을 위한 프로젝트 수준 디렉터리와 개인 선호도를 위한 전역 ~/.claude/ 디렉터리입니다. CLAUDE.md 파일은 세션 전반에 걸쳐 Claude가 따르는 지침을 제공하며, CLAUDE.local.md는 개인적인 재정의를 위한 것입니다.