huggingface/llm.nvim
LLM powered development for Neovim
llm.nvim – Neovim을 위한 LLM 기반 코드 완성
소개
- GitHub Copilot과 유사하게 에디터 내에서 직접 AI가 생성한 코드 제안을 받을 수 있는 Neovim 플러그인입니다.
- llm-ls라는 작은 언어 서버 바이너리와 통신하며, 이 서버는 HTTP 요청을 LLM 백엔드(Hugging Face Inference API, Ollama, OpenAI 호환 서버 또는 Hugging Face Text-Generation-Inference)로 전달합니다.
주요 기능
| 기능 | 설명 |
|---|---|
| 고스트 텍스트 완성 | Copilot UI와 마찬가지로 입력 중에 인라인 "고스트" 제안이 나타납니다. |
| 모델 선택 | Hugging Face에 호스팅된 모델, Ollama 인스턴스, OpenAI 호환 엔드포인트 또는 TGI 서버의 모든 모델을 선택할 수 있습니다. |
| 컨텍스트 윈도우 안전성 | tokenizers 라이브러리를 사용하여 토큰을 정확하게 계산하고, 모델의 토큰 제한을 초과하지 않도록 프롬프트를 트리밍합니다. |
| Fill-in-the-middle (FIM) 지원 | FIM을 이해하는 모델(예: StarCoder, CodeLlama)의 경우 접두사/중간/접미사 마커를 활성화할 수 있습니다. |
| 파일별 활성화/비활성화 | Glob 패턴(예: *.py, */my_project/*)을 사용하여 제안 활성화 범위를 구성할 수 있습니다. |
| 자동 제안 토글 | LLMToggleAutoSuggest를 사용하여 런타임에 실시간 제안 스트림을 켜거나 끌 수 있습니다. |
| 수동 요청 | LLMSuggestion으로 단일 완성 요청을 강제로 실행할 수 있습니다. |
| 유연한 요청 본문 | request_body 아래에 추가하는 모든 JSON 필드는 백엔드로 직접 전달되므로 temperature, top_p, max tokens 등을 조정할 수 있습니다. |
작동 방식
- 설정 – 플러그인이 처음 로드될 때 GitHub Releases에서
llm-ls바이너리를 다운로드합니다(또는mason.nvim을 통해 설치 가능). - 백엔드 선택 – 사용할 백엔드(
backend = "huggingface" | "ollama" | "openai" | "tgi")를 지정합니다. 플러그인이 해당 서비스에 맞는 올바른 URL과 요청 페이로드를 구성합니다. - 프롬프트 준비 – 현재 버퍼와 선택적 FIM 마커가 토큰화됩니다. 토큰 수가 모델의
context_window를 초과하면 가장 오래된 토큰이 삭제되어 요청이 제한 내에 들어오도록 합니다. - HTTP 요청 – 백엔드(또는 로컬 Ollama/TGI 서버)로 HTTP POST가 전송됩니다.
api_token이 제공되면Bearer헤더로 추가됩니다. - 응답 처리 – 모델에서 반환된 원시 텍스트는 정리(
tokens_to_clear에 포함된 토큰 제거)되어 고스트 텍스트로 표시됩니다. 수락(기본값<Tab>)하면 제안이 삽입되고,<S-Tab>을 누르면 거부됩니다.
설치
-- lazy.nvim 사용 시 (권장)
require('lazy').setup({
{
'huggingface/llm.nvim',
opts = {
-- 최소 구성 예시
backend = 'huggingface',
model = 'bigcode/starcoder',
},
},
})
packer.nvim이나 vim-plug를 사용하여 설치할 수도 있으며, README에 정확한 스니펫이 제공됩니다.
기본 구성 (Lua)
require('llm').setup({
api_token = nil, -- 선택한 백엔드용 토큰 (환경 변수 설정 가능)
model = 'bigcode/starcoder',
backend = 'huggingface',
request_body = {
parameters = {
max_new_tokens = 60,
temperature = 0.2,
top_p = 0.95,
},
},
fim = { enabled = true, prefix = '<fim_prefix>', middle = '<fim_middle>', suffix = '<fim_suffix>' },
enable_suggestions_on_startup = true,
enable_suggestions_on_files = '*',
})
모든 옵션은 선택 사항이며, 기본값은 README에 문서화되어 있습니다(예: StarCoder 기본값, tokenizers, 디바운스 시간, 키맵 등).
사용 권장 대상
- 이미 Neovim에서 작업 중이며 에디터를 떠나지 않고 AI 보조 코딩을 원하는 경우.
- 자체 호스팅 또는 오픈 소스 모델(Ollama, TGI)을 선호하거나 Hugging Face의 호스팅 추론 서비스를 사용하려는 경우.
- 어떤 파일에서 제안을 받을지, 요청 페이로드가 어떻게 구성될지 세밀하게 제어하고 싶은 경우.
제한 사항 / 주의 사항
- Hugging Face Inference API 무료 티어는 속도 제한이 있습니다. 헤비 유저는 PRO 구독을 권장합니다.
- 이 플러그인은 텍스트 생성 스타일의 모델만 지원합니다. 호환되는
/generate엔드포인트를 노출하지 않는 채팅 지향 API와는 작동하지 않습니다. - 컨텍스트 윈도우 크기는 선택한 모델에 따라 제한됩니다(예: StarCoder는 8k 토큰). 플러그인이 자동으로 이전 컨텍스트를 잘라내므로 매우 큰 파일에서는 제안에 영향을 줄 수 있습니다.
- 유효한 API 토큰을 제공하거나 로컬 서버를 실행해야 합니다. 그렇지 않으면 HTTP 요청이 실패합니다.
더 알아보기
- 플러그인의 README(현재 읽고 있는 소스)에는 전체 옵션 표와 예제가 포함되어 있습니다.
llm-ls저장소에서는 언어 서버 바이너리를 빌드하고 수동으로 실행하는 방법을 설명합니다.- Hugging Face Inference API 문서, Ollama API 문서 및 TGI 문서가 각 백엔드 섹션에 링크되어 있습니다.
위의 모든 정보는 저장소의 README에서 직접 가져온 것이며, 외부적인 가정은 포함되지 않았습니다.
관련
- 프로젝트
- 프로젝트
- 프로젝트
- 프로젝트