はじめに
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出力をより的確かつ実用的に制御できます。ぜひ活用してみてください!