huggingface/llm.nvim

LLM powered development for Neovim

llm.nvim – Neovim 的 LLM 驱动代码补全

简介

  • 这是一个 Neovim 插件,让您能直接在编辑器中获得 AI 生成的代码建议,类似于 GitHub Copilot。
  • 它与一个名为 llm-ls 的小型语言服务器二进制文件通信,该服务器会将 HTTP 请求转发至 LLM 后端(Hugging Face Inference API、Ollama、兼容 OpenAI 的服务器或 Hugging Face Text-Generation-Inference)。

主要功能

功能 说明
幽灵文字补全 就像 Copilot 的 UI 一样,输入时会出现行内“幽灵”建议。
模型选择 选择托管在 Hugging Face、Ollama 实例、兼容 OpenAI 的端点或 TGI 服务器上的任何模型。
上下文窗口安全 插件会裁剪提示词,确保不超过模型的 Token 限制,并使用 tokenizers 库精确计算 Token。
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 标记会被 Token 化。如果 Token 数量超过模型的 context_window,最旧的 Token 会被舍弃以符合请求限制。
  4. HTTP 请求 – HTTP POST 会发送至后端(或本地 Ollama/TGI 服务器)。如果提供了 api_token,它会被加入为 Bearer 标头。
  5. 响应处理 – 模型传回的原始文本会经过清理(移除 tokens_to_clear 中的 Token)并显示为幽灵文字。接受建议(默认 <Tab>)会插入建议;<S-Tab> 则会关闭它。

安装

-- 使用 lazy.nvim (推荐)
require('lazy').setup({
  {
    'huggingface/llm.nvim',
    opts = {
      -- 最小化示例配置
      backend = 'huggingface',
      model   = 'bigcode/starcoder',
    },
  },
})

您也可以使用 packer.nvimvim-plug 安装;README 提供了确切的代码片段。

基本配置 (Lua)

require('llm').setup({
  api_token = nil,               -- 所选后端的 token (或通过环境变量设置)
  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 免费层级有速率限制;README 建议重度用户订阅 PRO。
  • 插件仅支持文本生成类型的模型;除非 API 提供兼容的 /generate 端点,否则无法与聊天导向的 API 运作。
  • 上下文窗口大小受限于所选模型(例如 StarCoder 为 8k Token)。插件会自动截断旧的上下文,这可能会影响超大文件中的建议。
  • 您必须提供有效的 API token 或运行本地服务器;否则 HTTP 请求将会失败。

深入了解

  • 插件的 README(您正在阅读的来源)包含完整的选项表格与示例。
  • llm-ls 仓库说明了如何构建语言服务器二进制文件以及如何手动执行它。
  • Hugging Face Inference API 文档、Ollama API 文档以及 TGI 文档已链接至各个后端说明中。

以上所有信息均直接取自仓库的 README;未加入任何外部假设。

相关

  • 项目
  • 项目
  • 项目
  • 项目