Needle: 휴대폰·웨어러블·마이크로컨트롤러에서 도구 호출과 구조화 추출을 하는 8~29MB 온디바이스 '자동화 파운데이션 모델'

Published · AI Daily — AI-assisted deep research, methodology & disclosure

cactus-compute/needle은 8~29MB 단일 파일 모델로, 앱이 노출한 함수에서 호출할 도구를 고르고 인자를 채우는 일, 지저분한 텍스트에서 타입이 있는 필드를 뽑는 일, 문장 임베딩을 만드는 일 세 가지에 집중한다. Cactus Compute가 만든 Laddered Simple Attention Network를 쓰며 2~20층 어느 깊이든 단독 배포할 수 있고, 16.9MB 음성 인식 모델 Whistle도 함께 제공한다. Apache-2.0 라이선스에 별은 약 1만 3,900개다. 성능 비교는 프로젝트 README의 주장이며 독립 재현은 아직 없다.

Needle은 Cactus Compute 팀이 오픈소스로 공개한 아주 작은 모델이다. 모델 전체가 8~29MB 바이너리 하나이며, 스마트폰, 시계와 웨어러블, 로봇, 스마트홈, 자동차, 심지어 마이크로컨트롤러까지 겨냥한다. 프로젝트는 스스로를 '자동화 파운데이션 모델'이라 부르며, 범용 대화 능력을 내주고 얻은 결과로 모바일 도구 호출에서 10배 큰 모델을 앞서고 구조화 추출에서는 2~3배 큰 모델과 맞먹는다고 주장한다. 이 비교는 README에 있는 것이고 제3자 재현은 확인하지 못했으므로 프로젝트의 자체 주장으로 읽어야 한다. 2026년 10월 13일 기준 저장소는 별 약 13,887개, 포크 940개, Apache-2.0 라이선스, 주로 Python 코드이고 마지막 푸시는 10월 11일이다. 하는 일은 구체적이다. 첫째는 도구 호출이다. 앱이 노출한 함수가 주어지면 Needle이 알맞은 것을 고르고 사용자의 말에서 모든 인자를 채운다. 두 가지를 부탁하면 순서대로 두 호출을 내고, 어떤 도구도 해당하지 않는 요청에는 추측 대신 빈 목록을 돌려준다. 둘째는 구조화 추출이다. 송장, 예약, 알림, 양식 같은 형태를 선언하고 지저분한 텍스트를 넣으면 타입이 있는 필드가 나오며, 디코딩 문법이 출력의 파싱 가능성을 보장하고 추출은 분류로도 일반화된다. 셋째는 텍스트 임베딩이다. 같은 모델이 문장의 벡터를 돌려주어 앱이 로컬에서 검색, 매칭, 라우팅을 할 수 있다. 넷째로 자매 모델 Whistle은 16.9MB 음성 인식 모델로, Needle과 컨테이너 형식과 엔진을 공유해 한 번의 빌드로 Needle에 오디오 입력이 생긴다. 클립이 들어가면 도구 호출이 나온다.

진입 장벽은 낮다. pip install cactus-needle 후에 파이썬 함수를 데코레이터로 도구로 지정한다. 시그니처가 인자 타입을, docstring이 도구 설명을 주고, agent.run이 함수를 실행해 결과를 돌려주며 고리를 닫는다. 매 턴은 function_calls, 모델의 reasoning, 보정된 confidence가 든 JSON 하나를 돌려주므로 앱은 신뢰도에 따라 실행, 확인, 거부를 고를 수 있다. 기기에 배포하려면 needle build --platform macos-arm64 같은 명령이 플랫폼별 사전 빌드 엔진을 받아 needle3.cact 가중치를 옆에 놓는다. 저장소에는 macOS와 Linux ARM64 대상이 나열되어 있고 브라우저와 WASI 빌드 안내도 있다. 진짜로 다른 점은 아키텍처다. Needle 3는 '래더형 단순 어텐션 네트워크'(Laddered Simple Attention Network)로, 피드포워드 층 대신 Monarch Hadamard MLP, 인과 합성곱 탭이 있는 그룹 쿼리 어텐션, gather로 읽는 engram n-gram 메모리, 다중 레인 하이퍼 연결을 쓰며, 2~20층의 모든 깊이를 단독으로 배포할 수 있도록 학습한다. 파라미터 대부분이 engram에 있어서 1억 2,100만 파라미터 모델이 5,000만 파라미터급 연산을 한다. 디코딩 때는 사용자의 스키마에서 컴파일한 바이트 수준 문법이 모든 토큰을 제약하고, 모든 응답에는 보정된 신뢰도 점수가 붙는다. 설계의 논리는 수십 MB뿐인 기기에서는 용량을 범용 추론보다 조회형 기억에 쓰는 편이 이득이라는 것이다.

미세 조정도 강조점이다. README에 따르면 DroidCall로 미세 조정하면 모든 하위 네트워크가 18~36점 오르고, 4층·2,900만 파라미터부터는 조정된 하위 네트워크가 DeepSeek V4 Flash를 넘는다. 로컬 미세 조정은 기본 가중치를 얼린 채 어텐션 투영에 LoRA 어댑터를 학습해 내보낼 때 병합하며, 4비트 정밀도로 자기 컴퓨터에서 JAX로 실행한다. 플랫폼 미세 조정은 전체 모델을 2비트로 학습하고 Cactus API 키가 필요하며, 사용자의 데이터에 Needle의 원래 데이터셋을 더해 이미 배운 것을 잊지 않게 강화할 수 있다. Whistle의 수치는 Whisper base보다 8.6배 작고 첫 토큰까지 6.6배 빠르다. LibriSpeech, SPGISpeech, Earnings-22, FLEURS 평균에서는 앞서고 TED-LIUM, AMI, MLS 평균에서는 Whisper base가 앞서며, 영어·독일어·프랑스어·스페인어·이탈리아어·네덜란드어·폴란드어를 지원한다.

우리의 판단은 Needle이 아주 구체적인 수요를 아주 작은 제품으로 만들었다는 것이다. 앱에 이미 명확한 함수 집합이 있고 말이나 음성을 호출로 안정적으로 바꿔야 한다면 대형 모델을 두는 것보다 훨씬 싸고 오프라인에서도 돌아간다. 위험도 구체적이다. 모든 벤치마크는 프로젝트 자체 README에서 나왔다. 바이너리는 텔레메트리가 기본으로 켜져 있으므로 개인정보에 민감한 용도에서는 NEEDLE_TELEMETRY=0과 DO_NOT_TRACK=1을 설정해야 한다. 또 대화나 개방형 추론은 하지 못하므로 함수 집합이 자주 바뀐다면 미세 조정과 데이터 생성 비용을 따져 봐야 한다. 클라우드 호출을 대체하기 전에 자신의 실제 도구 목록과 실제 음성 샘플로 작은 평가를 해 볼 것을 권한다.

Sources

FAQ

Needle은 무엇을 할 수 있고 무엇을 못 하나?

세 가지를 한다. 앱이 노출한 함수에서 호출할 도구를 고르고 모든 인자를 채우되, 맞는 도구가 없으면 추측하지 않고 빈 목록을 돌려준다. 지저분한 텍스트에서 선언한 형태대로 타입이 있는 필드를 뽑는다. 문장을 임베딩해 로컬 검색과 라우팅에 쓴다. 범용 대화 능력을 포기하고 이 작업들의 성능을 택했다고 프로젝트가 직접 밝힌다.

'래더' 구조의 실제 이점은 무엇인가?

2~20층 모든 깊이가 배포 가능한 모델이라서 같은 가중치를 기기 크기에 맞게 잘라 쓸 수 있다. README에 따르면 DroidCall로 미세 조정하면 모든 하위 네트워크가 18~36점 오르고, 4층(2,900만 파라미터)부터는 조정된 하위 네트워크가 DeepSeek V4 Flash를 넘어선다. 모두 프로젝트 자체 결과다.

사용할 때 주의할 점은?

바이너리는 기본으로 텔레메트리가 켜져 있어 NEEDLE_TELEMETRY=0과 DO_NOT_TRACK=1을 설정해야 끌 수 있다. 성능 비교는 README에 있으며 독립 평가는 없다. 로컬 미세 조정은 4비트 LoRA 어댑터만 학습하고, 플랫폼 미세 조정은 전체 모델을 학습하며 Cactus API 키가 필요하다.