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 등을 조정할 수 있습니다.

작동 방식

  1. 설정 – 플러그인이 처음 로드될 때 GitHub Releases에서 llm-ls 바이너리를 다운로드합니다(또는 mason.nvim을 통해 설치 가능).
  2. 백엔드 선택 – 사용할 백엔드(backend = "huggingface" | "ollama" | "openai" | "tgi")를 지정합니다. 플러그인이 해당 서비스에 맞는 올바른 URL과 요청 페이로드를 구성합니다.
  3. 프롬프트 준비 – 현재 버퍼와 선택적 FIM 마커가 토큰화됩니다. 토큰 수가 모델의 context_window를 초과하면 가장 오래된 토큰이 삭제되어 요청이 제한 내에 들어오도록 합니다.
  4. HTTP 요청 – 백엔드(또는 로컬 Ollama/TGI 서버)로 HTTP POST가 전송됩니다. api_token이 제공되면 Bearer 헤더로 추가됩니다.
  5. 응답 처리 – 모델에서 반환된 원시 텍스트는 정리( 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에서 직접 가져온 것이며, 외부적인 가정은 포함되지 않았습니다.

관련

  • 프로젝트
  • 프로젝트
  • 프로젝트
  • 프로젝트