TERMy 결정론적 터미널 어시스턴트 – 빠르고 LLM이 필요 없는 명령 자동화
TL;DR
TERMy는 임베딩, 머신러닝 또는 대규모 언어 모델(LLM)을 사용하지 않고 자연어 요청을 셸 명령으로 변환하는 빠르고 결정론적인 터미널 어시스턴트입니다. 덕분에 저사양 기기에서도 저렴하고 즉각적이며 안전하게 사용할 수 있습니다.
왜 비(非) LLM 터미널 어시스턴트가 중요한가
기존의 AI 기반 명령 어시스턴트는 상당한 GPU 메모리를 소비하고, 토큰 비용을 발생시키며, 지연 시간을 유발하는 대규모 언어 모델(LLM)에 의존합니다. TERMy는 규칙 기반 파서와 경량 데이터셋 형식을 사용하여 이러한 단점을 제거하며, 4GB VRAM 정도의 CPU에서도 1초 미만의 응답 속도를 구현합니다.
핵심 설계 제약 조건
TERMy는 세 가지 엄격한 제한 사항을 중심으로 구축되었습니다:
- No embeddings – 시스템은 벡터 표현을 저장하지 않습니다.
- No machine‑learning – 추론은 확률적이지 않고 결정론적입니다.
- No LLMs – 모든 프로세싱은 호스트 CPU에서 실행됩니다. 이러한 제약 조건은 노트북부터 Raspberry Pi Zero에 이르기까지 다양한 장치에서 실행될 수 있는 최소한의 예측 가능한 구현을 강제합니다.
NPC‑Forge 데이터셋 형식 (NDF 0.0)
어시스턴트는 각 항목이 다음을 정의하는 JSON 기반 데이터셋을 읽습니다:
- Category – 논리적 그룹화 (예:
linux_files). - Input phrases – 자연어 트리거.
- Tools – 실행할 셸 명령 템플릿.
- Message – 사용자에게 보여줄 텍스트 응답.
- Thinking – 선택 사항인 진단 추적.
- Permission – 안전 플래그 (
"ask"는 잠재적으로 파괴적인 작업에 대해 사용자 확인을 요청함).
예시 항목:
{
"category": "linux_files",
"input": ["list files", "list files and directories"],
"tools": [{
"name": "run_in_terminal",
"arguments": {
"command": "ls -lah",
"explanation": "Lists the files in the current directory.",
"goal": "Display current directory contents",
"mode": "sync"
}
}],
"message": "Done",
"thinking": ["That is quite simple!", "This is boring..."],
"permission": "yolo"
}
새로운 기능을 추가하는 것은 데이터셋 디렉토리에 다른 JSON 파일(예: dataset_docker.json)을 넣는 것만큼 간단합니다.
템플릿 기반 의도 파싱
파일명과 같은 가변 요소들을 처리하기 위해, TERMy는 **템플릿 의도(template intents)**를 사용합니다. 템플릿은 각 태그가 어브제이티브(vocabulary) 세트 또는 타입이 지정된 엔티티를 나타내는 태그 시퀀스를 정의합니다. 파일 생성 예시:
{
"intent": "file_creation",
"category": "linux_files",
"type": "template",
"structure": [[
{"tag": "<||vocab_create||>", "type": "vocab", "required": true},
{"tag": "<||vocab_file||>", "type": "vocab", "required": false},
{"tag": "<||file||>", "type": "filename", "required": true}
]],
"message": "<||completion||>",
"tools": [{
"name": "run_in_terminal",
"arguments": {
"command": "echo '' > '<||file||>' && termy_set_context 'active_file' '<||file||>'",
"explanation": "Writes <||string||> in file <||file||>.",
"goal": "Directory Allocation",
"mode": "sync"
}
}],
"permission": "ask",
"thinking": ["Ok, I am asked to create the file <||file||>."]
}
태그 어브제이티브(vocabularies)는 별도로 정의됩니다. 예:
{"<||vocab_create||>": ["create", "make", "generate", "craft", "forge"]}
정규 표현식은 파일명과 같은 타입이 지정된 엔티티를 추출합니다.
권한 게이팅을 통한 안전성
모든 데이터셋 항목에는 permission 필드가 포함되어 있습니다. 기본적으로 파괴적인 명령은 `
Sources
관련
- 프로젝트
- 프로젝트
- 프로젝트
- 프로젝트
- 프로젝트