はじめに

私はPC上での操作の多くにClaude CodeないしはCodex、GeminiなどのLLMを介在させている。

  • 文章をまとめる、要約する
  • 翻訳、校正する
  • 文章のレビューをする
  • スライドを作る
  • コードを書く

その他あらゆる雑用がLLMに補助されている。さらに、MCPサーバーに関しては結構自作のものも何個かある。

Quote

にも関わらずプロンプトの調整(いわゆるコンテキストエンジニアリング)は殆ど行ってこなかった。理由は、「進化の速度が速すぎるのでデフォルト挙動で使い続けたほうが楽だろう」と思っていたからである。しかし、Claude Codeに関しては先行ツールである分だいぶ手法が多様化・成熟してきた気がするので一旦まとめ記事を読んだ。

流れを考える

存在の認知に留まっていた機能群に関して、仕様を大体把握した。コンテキストエンジニアリングの方法は多種提案されているが、重要な要素が幾つかあるように感じた。

  • 一度に指示を詰め込みすぎると無視されてしまうという根本的な問題がある
  • 手動でコンテキストを渡す→自動でAIに選ばせる風潮
  • コンテキストを構造化して折りたたむようにする

大体こんな流れだろう。その点、Agent Skillsはコンテキストを構造化して自動で選ばせるだけでなく、曖昧さが不要な部分はスクリプト実行をすることもでき、機能単位で共有することができる。かなりよくできていると思う。一方で、プロンプトインジェクションの懸念があり作成元は慎重に選ぶ必要がありそう。更に、コンテキストをかなりしっかり設計しないといけない。チームや社内の管理には適するだろうが手軽さには欠ける。SkillsをLLMに作らせるSkillsもあるようだが、正直そこまでのコンテキストエンジニアリングは個人利用では必要ないように思える。LLMによる選択肢を多重化すればするほどモデル自体の賢さ依存になるような気がする。そもそもそういう設定はやるなら自分でやりたい。

あと個人的には、「プロンプトはある程度自動で選んでほしいが、手動の選択肢も欲しい」。要望が多い。

スラッシュコマンドを自動で選んでほしい

テンプレプロンプトを手動で選ぶスラッシュコマンド。ちょっと個人利用での役割を与えるくらいだったらこれくらいが規模感としてちょうどよい。

これをある程度自動でも選んでくれたら良いのになと考えた。

MCPプロンプトとMCPツール

MCPサーバーではスラッシュコマンド同様にプロンプトを提供するMCPプロンプトと、自動でツール利用するMCPツールの登録ができる。このMCPツールでMCPプロンプトを供給する(=引数なしでプロンプトを与える)だけにすれば手動と自動を両立できるはずだ。

上記MCPサーバーを作成した。一言で言うと

「特定のディレクトリ配下のマークダウンファイルをMCPツールorプロンプトor両方として登録する」

何ヶ月か前に作ったものを若干改善して作成した。設定方法はREADMEを参照。

利用想定

1. 外部ディレクトリでMCPツール、プロンプトを登録

両方登録すると、MCP対応クライアントであれば手動でのプロンプト展開と自動でのプロンプト展開ができる。

2. スラッシュコマンドを基にMCPツールを登録する

指定ディレクトリをスラッシュコマンドの保存ディレクトリにする。スラッシュコマンドの各種機能が制限なく使えるし、シンプルなプロンプトとしての展開は手動でもできるようになる。

3. 私の場合

Obsidianのディレクトリの1つををスラッシュコマンドの保存ディレクトリ(.claude/commands)にシンボリックリンクを貼り、MCPツールとして登録する。2のプロンプト管理をObsidian内部で行う形にした。

使用例

summarizing_format.mdというマークダウンファイルをつくると、スラッシュコマンドでマークダウンファイルからプロンプトを手動展開することができる。

この時、MCPツールとしても登録されるのでdescriptionプロパティに記載された状況でLLMは自動でプロンプトを展開することができる。

おわりに

個人利用では厳密なプロンプトエンジニアリングはしんどいだろうし、これくらいライトに使えて手動のフォールバックがあったほうが良いだろう。ただし、仕組み自体はあまりライトではない。