gni-compression이 npm에 올라왔습니다 — 도메인 적응형 LLM 압축기를 한 달 동안 구축하면서 배운 점
Source: Dev.to
두 함수
const { compress, decompress } = require('gni-compression')
const compressed = await compress(Buffer.from(longContext))
워밍업 없음. 세션 상태 없음. 도메인 지식은 패키지에 번들된 사전 학습된 사전(gcdict.bin)에 내장되어 있습니다 — 실제 LLM 대화 코퍼스에서 학습되었습니다.
숫자
| 코퍼스 | GN 비율 | 절감량 (brotli‑6) |
|---|---|---|
| Ubuntu IRC | 8.4× | 1.2× |
Ubuntu IRC가 놀라운 결과를 보여줍니다. 메시지 평균 길이가 67 바이트라서 Brotli가 크게 압축하기엔 너무 짧습니다 (1.2×). IRC 어휘가 매우 일관적이기 때문에 GN은 8.4×의 압축률을 달성합니다. 짧고 반복적인 메시지가 도메인 사전이 가장 큰 효과를 발휘하는 곳입니다.
숫자가 이런 이유
최소 구문 길이를 바꿔보니 어휘가 부드러운 분포가 아니라 간격이 있는 두 개의 클러스터로 나뉘어 있음을 발견했습니다:
- minLen 4→5: 토큰 수가 68 % 감소 (짧은 filler 토큰)
이는 압축이 filler 토큰을 우선적으로 제거한다는 의미입니다. 그래서 압축된 컨텍스트를 모델에 다시 입력했을 때 작은데 일관된 하류 품질 향상이 나타나는 이유일 겁니다 — 신호‑대‑잡음 비율이 개선됩니다.
내가 만든 이유
저는 NN Dash라는 영구 AI 에이전트 스캐폴드를 만들고 있습니다. 이 스캐폴드는 Claude, GPT, 그리고 로컬 Ollama를 오가며 라우팅합니다. 목표는 장기 AI 관계를 사실상 비용 없이 유지하는 것입니다. GN 덕분에 수천 개 메시지에 달하는 컨텍스트 세션을 토큰 비용에 얽매이지 않고 운영할 수 있게 되었습니다.
사용법
npm install gni-compression
const { compress, decompress } = require('gni-compression')
Source: (MIT)
숫자, 방법론, 혹은 사용 사례에 대한 피드백을 환영합니다.