0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Neovim × 生成AI:avante.nvimでシステムプロンプトを活用する方法

Last updated at Posted at 2025-05-05

はじめに

NeovimでChatGPTなどの生成AIと連携するためのプラグイン「avante.nvim」では、システムプロンプトの工夫によって、AIの出力品質を大きく向上させることができます。

この記事では、以下の2つの方法によってプロンプトを柔軟に制御する手法を紹介します。

  • opts.system_prompt で簡易的に指定
  • *.{mode}.avanterules ファイルでモードごとに設定

対象読者は、Neovimでavante.nvimをすでに導入しており、より実用的な出力を得たいと考えている方です。

動作環境

  • Ubuntu 24.04.2 LTS
  • Neovim v0.10.2
  • lazy.nvim 11.17.1
  • avante.nvim 最新(コミット: 0f7fb35 時点)

方法①:opts.system_prompt で直接指定する

avante.nvimでは、セットアップ時に opts.system_prompt を指定することで、システムプロンプトを簡単に設定できます。

{
  "yetone/avante.nvim",
  event = "VeryLazy",
  lazy = false,
  version = false, -- 最新の変更を常に取得したい場合に設定
  opts = {
    system_prompt = "関西弁でお話してください",
    -- その他の設定
  },
  -- その他の設定
}

この方法は手軽にプロンプトを指定できますが、モードごとの切り替えや複雑な挙動を伴う制御には不向きです。

方法②:*.{mode}.avanterules ファイルによるモード別制御

より高度な制御を行いたい場合は、プロジェクトのルートディレクトリに {mode}.avanterules ファイルを作成することで、各モードごとのシステムプロンプトを指定できます。

注意点:ファイル名に使えるモード名

公式の README.md にあるモード名をそのままファイル名にしても、期待通り動作しないことがあります。

コード上(該当コード)では、次の4つの文字列を含むファイル名を対象としているようです(2025年5月時点):

  • agentic
  • legacy
  • editing
  • suggesting

デフォルトテンプレートを読む

テンプレートディレクトリを確認すると、各モードがどのようなプロンプトテンプレートを使用しているかがわかります。

特に agentic モードでは、ツール呼び出しに関する詳細なガイドラインが記述されており、ChatGPTのようなツール連携型エージェントを前提とした設計になっている印象を受けます。

プロンプトの例:agentic.avanterules

あなたは関西人です。関西弁でしゃべってください。

以下に例を示します。
User request:
{% raw -%}
こんにちは
{%- endraw %}

Your response:
{% raw -%}
まいど!
{%- endraw %}

このように jinja テンプレート形式で記述できるため、テンプレートを再利用したり、条件に応じて構造化した出力を指定することも可能です。

補足:Config.system_prompt の併用

READMEでは Config.system_prompt を書き換える方法も紹介されています。ただし、コードを確認すると、opts.prompt_opts.system_prompt が優先され、その後に Config.system_prompt の内容が追加される形となっています。

該当コード:llm.lua

local system_prompt
if opts.prompt_opts and opts.prompt_opts.system_prompt then
  system_prompt = opts.prompt_opts.system_prompt
else
  system_prompt = Path.prompts.render_mode(mode, template_opts)
end

if Config.system_prompt ~= nil then
  local custom_system_prompt = Config.system_prompt
  if type(custom_system_prompt) == "function" then
    custom_system_prompt = custom_system_prompt()
  end
  if custom_system_prompt and custom_system_prompt ~= "" and custom_system_prompt ~= "null" then
    system_prompt = system_prompt .. "\n\n" .. custom_system_prompt
  end
end

この構造を理解しておくと、プロンプトの意図しない上書きや競合を避けやすくなります。


まとめ

  • opts.system_prompt は手軽に導入でき、簡単な用途に最適
  • *.avanterules を使えば、モード別に柔軟なプロンプト制御が可能
  • Config.system_prompt との併用も可能だが、優先順位に注意

avante.nvimのプロンプト機能を活用すれば、Neovim内でのAI出力をより的確かつ実用的に制御できます。ぜひ活用してみてください!

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?