📂

典型プロンプト管理はどうしてる?

に公開

概要

AIにプロンプトを書く時、パターン化してると思います。
Cursorとかにもそれを補助する機能は多いです。
例えば project rules という機能は、そのプロジェクト内で利用されるプロンプトを設定できるものです。
.ts という拡張子に対してはこれを適用するといった細かい設定もできます。

詳しくはこちら

しかし、もっと細かくプロンプトの出し分けをしたくないですか?
まして、Cursorでしか適用されないのではなく、他のAgentやDesktop Appでもプロンプトの使い回しをしたり、組み合わせて使いたいと思うはず。
(少なくとも僕は小手先のテクニックも好きなのでそういった積み重ねをしていきたい派)

以下のようなシチュエーションが考えられます。

  • 雑に質問したいけど、少しでも精度を上げたい。
  • でもいちいち入力するのも他の場所からコピーしてくるのも面倒。
  • ポンポン投げるリズミカルなプロンプティングを楽しみたい。

そんなあなたに向けての記事です。

より良い方法や、さらにこうすると良いみたいな方法があれば是非コメントしてくれると嬉しいです。

必要なツール

使うツールは一つです。
Raycast のみです。

なぜRaycastか

単純にコスパが良いです。
ここで使う機能は、後述しますがRaycastの機能の一部です。
しかし、他の機能もモリモリで、まるで一家に一台ある救急箱のような存在なので、一つ入れておくだけでいろんな機能を使いまわせます。
使うツールを絞って使いこなす、それに見合った価値のあるツールだと思います。

使う機能

Raycastには無数の機能が入っています。
一つ一つを記事にできるレベルで使い勝手がいいのですが
その中で今回は Snippet 機能を使います。
この時点ですでに勘の鋭い方は気づいたかと思います。
そう、プロンプトをSnippetに登録していくのです。

使い方

Snippetの登録方法は以下の記事が分かりやすいです。

https://zenn.dev/ring_belle/articles/raycast-snippet

Snippetの内容

行数

多くとも3行くらいのプロンプトで分割すると良いと思います。
自分で打つには長いけど、10行とかになると融通が効かなくなるレベルのちょうど良い長さが3行くらいかなと思います。

3行のプロンプトを組み合わせて、つまり2,3回Snippetを呼び出して、10行のプロンプトにするとかも良いかもしれません。

命名慣習

上記Snippetの登録記事を参考に命名規則をつけることにしています。
例えば、 .p-hogehoge のように接頭辞に .p- (プロンプトのp) とつけることで、プロンプトのSnippetということを分別できるようにしています。

プロンプト

あくまでAgent以外でも参考にできるようなプロンプト構成で行きたいので、少し汎用的な感じになっていますが、そこは自由に応用してもらえたらと思います。
今回はコーディングに特化したプロンプトにしていますが、CursorやClineのようなAgent以外でも使う場合の他のプロンプトにも応用できます。

以下にサンプルを置いてみました。
ただのサンプルなので、ここにあるプロンプトは実際は書かなくてもAgentが良しなに理解して書いてくれるかもしれません。
実際のプロジェクトに関するファイルのパスだけ変更するだけで使えるプロンプトとかにしておくといいかもしれません。

.p-refactor
以下のコードをリファクタリングしてください。特に次の点に注意してください:
1. パフォーマンスの向上
2. 可読性の向上
3. 最新のベストプラクティスに沿った実装
.p-doc
以下のTypeScriptコードに対して、適切なJSDocコメントを追加してください。
各関数、クラス、インターフェースに対して、説明、パラメータ、戻り値の情報を含めてください。
.p-utest
以下のコードに対するユニットテストを作成してください。
テストはJestフレームワークに則り、すべての主要な機能と境界条件をカバーするようにしてください。
.p-async
以下の非同期処理コードを最適化してください。特に:
1. エラーハンドリングの改善
2. 並列処理の最適化
3. メモリリークの防止
に注意してください。
.p-apispec
以下のAPI機能に関するOpenAPI(Swagger)仕様を作成してください。
APIのファイルは ~/hogehoge にあります。
エンドポイント、パラメータ、レスポンス形式、認証要件、エラーコードを詳細に記述してください。

欠点

この運用は非常に細かくプロンプト管理できる上に、パッと入力して、その場で必要なものと不要なものを適度に修正できることではあるのですが一つ欠点があります。

一つ一つ、どのSnippetにどのプロンプトを設定したかを覚えておかなくてはいけないというのがあります。
10個のSnippetを作ると、当然ですが10個分覚えてないと使い分けができなくなっちゃうので、その労力が必要です。
何度も使っていれば覚えてくるので、一つの訓練として毎日AIと格闘する中で覚えていけたらいいのですが、最初は結構大変です。

そのため、最初の方はこの Search Snippet を押して、どんなSnippetを登録したかを何度か見る作業が出てくるかと思います。
しかし、3行入力したり特定の場所からコピペしてくるほどの手間はなく、見つけたSnippetを選択した状態でエンターを押すと内容が入力されるのでそこまで手間でもないかなと思っています。

Discussion