生成AIの活用にはワークフローを使うといいと言われていますが、個人的に利用する分にはまだまだプロンプトを使いますよね。勉強、読書、料理etc ... 巷にはいろいろな分野・用途で使うためのプロンプトの例が溢れています。
そんなプロンプトをどう管理していますでしょうか?よく言われるのはツールの活用ですよね。
ExcelやNotionなどの汎用的なドキュメント管理ツールを使ったり、PromptCraftやpromptyなどの専用ツールを使ったりといった選択肢があります。
ただこういったツールを用いてプロンプトを実行する場合
- 生成AIアプリ(以降ChatGPT)を開く
- プロンプト管理ツールを開く
- プロンプト管理ツールから使用するプロンプトを探し出してコピー
- ChatGPTにペースト
- プロンプトを実行
といった手順を踏む必要があり、複数のアプリを開いたり場合によってはキーボードから手を離してマイスを使ってアプリを操作する必要があったりと、とても面倒くさいです。
日々業務効率化や時間短縮に努める、生産性の亡霊ことITエンジニアの皆さんにとって、使用するウィンドウが増えることやキーボードから手を離すことは耐え難いことかと思います。
そこで、「プロンプトの管理を生成AI自身に任せる」という方法を提案したいです。
プロンプトの管理を生成AIに任せることにより、プロンプトを実行する時に
- ChatGPTを開く
- 質問の文章内でプロンプトを使用するコマンドを呼び出しながら、プロンプトを実行
とプロンプトを実行するまでの手順が削減できます。
またCLIのように全ての操作をキーボードで完結させることができます。
今回は生成AI自身をプロンプトの管理ツールにすることで、プロンプトを実行するまでに踏む手順の数や時間を削減し、より効率的に生成AIとのやり取りを行う方法について解説します。
(以降 ChatGPTを使った例となります)
ChatGPTにプロンプト管理機能を追加するためのプロンプト
早速ですが、こちらがプロンプトの内容です。
以下の内容をメモリに保存してください。
```
「@prompt」から始まる入力が行われた場合、以下のルールに従って処理を行ってください。
【基本原則】
* `@prompt` で始まる明示コマンドのみを管理対象として解釈する
* `@prompt` で始まらない入力は通常の会話として処理する
* 明示されていない CRUD 操作は一切行わない
* 曖昧・不完全・推測を要する指示は必ず拒否する
【重要:コマンドの完全性(追加・推測の禁止)】
* **有効なコマンドは本プロンプト内に列挙されたもの“だけ”であり、これ以外のコマンドは存在しない**
* 列挙されていないコマンド(例:`@prompt run`)を推測・解釈・実行してはならない
* 未定義コマンドが入力された場合は、未定義であることを明示し、`@prompt help` を案内する
【プロンプト定義】
* プロンプトは以下の属性を持つ
* 名前
* 本文
* 状態(active / deprecated)
* デフォルト引数
* 永続化フラグ
* 本文中の `${key}` で囲まれた文字列は引数として扱う
* デフォルト引数は任意で定義可能
【永続メモリ方針】
* `@prompt create` のデフォルト動作は永続メモリに保存とする
* `--disable-persistence` が指定された場合のみ、現在のチャット内でのみ有効とする
* 永続/非永続の設定は作成時に確定し、暗黙に変更しない
---
## 有効なコマンド(この一覧が全て)
### Create
* `@prompt create <name>`
* `@prompt create <name> --disable-persistence`
### Show
* `@prompt show <name>`
### List
* `@prompt list`
### Update
* `@prompt update <name>`
### Patch
* `@prompt patch <name>`
### Delete
* `@prompt delete <name>`
### Deprecate
* `@prompt deprecate <name>`
### Meta
* `@prompt meta <name>`
### Help
* `@prompt help`
* `@prompt help <command>`
### Use
* `@prompt use <name> [key=value ...]`
### Defaults
* `@prompt defaults set <name> key=value ...`
* `@prompt defaults show <name>`
* `@prompt defaults clear <name>`
### CSV
* `@prompt export csv`
* `@prompt import csv`
---
## コマンド概要(簡潔)
* **create**:新規プロンプト登録(デフォルト永続)
* **show**:本文表示
* **list**:一覧表示
* **update**:全文置換
* **patch**:差分更新
* **delete**:完全削除
* **deprecate**:非推奨化
* **meta**:状態・設定表示
* **use**:実行適用
* **defaults**:デフォルト引数管理
* **export / import**:CSV 出力・入力
* **help**:ヘルプ表示
---
## `@prompt help` 出力テンプレート(固定)
### `@prompt help` の出力形式は以下に**厳密に従う**こと。
```
@prompt command help
===================
[Create]
@prompt create <name>
@prompt create <name> --disable-persistence
新規プロンプトを登録する
[Show]
@prompt show <name>
プロンプト本文を表示する
[List]
@prompt list
登録済みプロンプト一覧を表示する
プロンプトが登録されていない場合は「なし」と出力する
[Update]
@prompt update <name>
プロンプト本文を全文置換する
[Patch]
@prompt patch <name>
プロンプト本文を差分更新する
[Delete]
@prompt delete <name>
プロンプトを完全に削除する
[Deprecate]
@prompt deprecate <name>
プロンプトを非推奨状態にする
[Meta]
@prompt meta <name>
状態・永続化・デフォルト引数を表示する
[Use]
@prompt use <name> [key=value ...]
プロンプトを実行用に適用する
[Defaults]
@prompt defaults set <name> key=value ...
@prompt defaults show <name>
@prompt defaults clear <name>
デフォルト引数を管理する
[CSV]
@prompt export csv
@prompt import csv
CSV 形式で入出力する
```
* 並び順・見出し名・表記は変更しない
* 説明文を追加・省略しない
* 未定義コマンドはここに載せない
---
## 引数ルール(use)
* `${key}` に対し
* 指定なし → デフォルトがあれば使用、なければ指定を依頼
* 本文に存在しない引数が指定された場合 → 実行前に確認を求める
---
## 実行ルール
* `use` は参照・適用のみ(状態変更禁止)
* 複数プロンプトの同時適用は禁止
* 実行結果に説明文を付けない
---
## 安全装置
* 管理ルールそのものの自己変更は禁止
* 指示されていない最適化・補完・再命名は禁止
* コマンドでない文章を誤解釈しない
```このプロンプトをChatGPTのメモリに保存させ、使用可能にします。

プロンプトを登録する
まずはcreateコマンドを使用しプロンプトを登録しましょう。
例えば企業の基本情報を調べてもらうためのコマンド company-info を登録するためのプロンプトはこちらです。
@prompt create company-info
${name}について、主な事業領域、収益モデル、ターゲット市場をできるだけ具体的に教えてください。特に直近5年のビジネスの変化に注目してまとめてください。
この際、できる限り権威的な一次情報(政府機関、大学、公的研究機関、大手新聞社など)を参照し、引用元を明記した上で説明してください。また、現時点における最新情報を参照してください。このプロンプトをChatGPTに送ります。

参照: https://kokoshiro.jp/note/column/867/
listコマンド、showコマンドで登録されているかを確認

プロンプトが登録されたことを確認できました。
プロンプトを呼び出す
プロンプトを呼び出してみましょう。
useコマンドを使用します。
@prompt use company-info name=トヨタ自動車登録済みのプロンプトが実行されます。

プロンプトの読み込み、書き出しを行う
例えばチーム内でプロンプトを共有したいやメモリの内容をリセットしたい場合、export csvコマンドとimport csvコマンドを実行することで、プロンプトの読み出しと書き出しを行うことができます。
例えば、先ほど登録したコマンドを書き出し、他のユーザーに共有する場合の用途はこちらです。
まずはexport csvコマンドでプロンプトの書き出しを行います。
@prompt export csv
続いてプロンプトの読み込みを行います。
行う前の状態はこちらです。

importコマンドでさっき書き出したCSVを読み込み

showコマンドでプロンプトが登録済みであるかを確認

company-infoコマンドを呼び出し

このように、プロンプトの共有や引き継ぎについても、行うことができます。
