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.nvimvim-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から直接引用したものであり、外部からの推測は含まれていません。

関連

  • プロジェクト
  • プロジェクト
  • プロジェクト
  • プロジェクト