Needle 3: 8~29MB 초소형 모델로 기기 안에서 tool call 실행하기
Show HN: Needle2: 14MB agentic LLM for phones, wearables, smart home and robots
TL;DR Highlight
8~29MB 모델이 모바일 tool call에서 10배 큰 모델을 앞섰다고 주장
Who Should Read
스마트홈·모바일 앱에서 클라우드 LLM 호출 없이 기기 안에서 tool call을 처리하고 싶은 앱 개발자
Core Mechanics
- Needle 3은 8~29MB 바이너리 하나
- 모바일, 웨어러블, 로봇, 스마트홈, 자동차, 마이크로컨트롤러를 대상으로 한다.
- 파라미터는 29~121M이고 2~20레이어 구성이다.
- 잘하는 일은 세 가지로 좁혔다
- tool call, 구조화 추출(extraction), 텍스트 임베딩을 한다.
- 일반 채팅 능력을 포기하고 이 세 가지에 집중했다고 한다.
- 모바일 tool call에서 10배 큰 모델보다 낫다고 주장
- 원문은 추출 작업에서는 2~3배 큰 모델과 비슷하다고 말한다.
- 비교 대상 모델은 f16 vLLM으로 돌렸고 DeepSeek V4 Flash는 클라우드 API로 돌렸다.
- 레이어를 골라 크기를 정하는 사다리 구조
- 모든 레이어가 서브네트워크이고 2L부터 20L까지 고를 수 있다.
- CQ2(2비트) 양자화로 9~29MB 바이너리가 나온다.
- 신뢰도 점수로 실행·확인·거절을 나눈다
- 응답마다 confidence가 붙고 0.1 미만이면 호출이 suppressed_calls로 빠진다.
- 원문 예시는 0.7 이상이면 바로 실행하고 그보다 낮으면 사용자에게 확인한다.
Community Reactions
- 데모에서 의미를 자주 놓친다는 경험
- "Make the living room dark"에 조명을 켜라고 해석하고 brightness를 무시했다는 경험이 있었다.
- "Make it a little warmer"에 mode를 cool로 잡았다는 경험도 있었다.
- 단위·모르는 요청 처리가 불안정하다는 지적
- 온도 단위를 description에 적어도 섭씨·화씨 구분이 흔들렸다는 경험이 있었다.
- 틀린 단위에서 confidence가 더 높게 나왔다는 보고가 있었다.
- 이해 못 한 요청에 도구를 호출하지 않아야 하는데 일관되지 않았다는 의견도 있었다.
- 로봇 용도에는 의문이 있다는 의견
- 간단한 좌표 이동 프롬프트에서 실패했다는 경험이 있었다.
- 제어 하위 계층보다 계획 단계에서나 쓸모 있을 것이라는 의견이 있었다.
- 라우터로 쓰기 좋다는 긍정 반응
- 모든 입력을 큰 LLM에 보내면 느리고 비싸므로 정해진 동작은 소형 모델로, 복잡한 건 큰 모델로 넘기는 구성이 좋다는 의견이 있었다.
- Needle을 라우터로 이미 써 봤다는 경험도 있었다.
- 플랫폼 지원과 경쟁 환경에 대한 질문
- x86_64 데스크톱과 Raspberry Pi 4에서 실행이 안 됐다는 경험이 있었다.
How to Apply
- tool 설명을 좁고 평이하게 다시 쓰기
- 오늘 기존 tool 스키마를 액션 하나당 tool 하나로 쪼개라.
- enum 값은 사용자가 쓰는 말로 짓고 값 형식은 description에 예시로 적어라.
- confidence 임계값으로 3분기 라우팅 넣기
- 0.7 이상이면 실행하고 그 미만이면 사용자 확인, 결과가 비면 거절 메시지를 내라.
- 데모에서 틀린 호출도 높은 confidence가 나온 경우가 있으니 자기 데이터로 임계값을 검증하라.
- 소형 모델은 라우터로, 복잡한 건 큰 LLM으로 넘기기
- 정해진 명령은 Needle로 처리하라.
- 빈 결과나 낮은 confidence는 클라우드 LLM으로 폴백하라.
- 우리 tool 세트로 LoRA 파인튜닝해 보기
- 자기 제품의 tool로 튜닝한 뒤 가장 작은 서브네트워크부터 정확도를 재라.
- 기기 용량에 맞는 레이어 수를 골라 needle build --layers로 빌드하라.
Try It
# 터미널에서 실행 (Python 3, Needle 원문 예제 기반)
pip install cactus-needle
# 아래를 .py 파일로 저장해서 실행
import needle
from typing import Literal
@needle.tool(triggers=[r"\b(turn|switch|power|flip)\b.*\b(on|off)\b", r"\btoggle\b"])
def control_device(device: str, action: Literal["on", "off", "toggle"]):
"Switch or toggle any named smart-home device."
return {"device": device, "action": action}
agent = needle.Needle(tools=[control_device])
r = agent.complete("toggle the garage door")
calls = r["function_calls"]
if calls and r["confidence"] >= 0.7:
print("실행", calls)
elif calls:
print("확인 필요", calls, r["reasoning"])
else:
print("처리 불가")
# 이어서 해 볼 것: "make it a little warmer" 같은 모호한 요청을 넣고 confidence와 인자를 확인해 보기Terminology
관련 논문
Mercury 3: 규모를 키운 diffusion LLM, 초당 1,000토큰 이상
Diffusion LLM을 40배 키웠더니 속도 4~8배, 품질은 속도 특화 모델 수준
Timestral: Mistral의 시계열 파운데이션 모델
209M 파라미터 시계열 모델이 3대 벤치마크 1위, CPU에서도 돌아간다
DeepSeek V4.1 Flash 1017 (Max) 성능·속도·가격 분석
DeepSeek V4.1 Flash 1017 Max는 지능 지수 45에 211 tok/s, 입력 $0.30
LLM 프록시를 직접 안 돌리면 무슨 일이 벌어지는지 어떻게 아나
자체 LLM 프록시를 세웠더니 키·모델·캐시 미스를 직접 볼 수 있다
DeepSeek V4.1 Flash 1017: 싼 가격에 1M 컨텍스트를 주는 에이전트용 모델
DeepSeek V4.1 Flash 1017은 입력 $0.05/M, 1M 컨텍스트의 에이전트용 모델
DeepSeek-V4.1-Flash-1017 공개: 더 짧게 생각하고 더 빠르게 일하는 에이전트용 모델
DeepSeek V4.1 Flash 마이너 업데이트로 코딩·에이전트 벤치 점수↑, 실행 시간·출력 길이↓
Llmspeed: 로컬 LLM 속도를 하드웨어 구매 전에 체감해 보는 시뮬레이터
GPU·모델을 고르면 로컬 LLM 속도를 미리 체감하게 해 주는 시뮬레이터