🧭
生成AIの使い方を「宣言的」に考えてみた
はじめに
生成AI、正直ちょっと扱いづらくないですか。
- 勝手に話を広げる
- 推測でそれっぽいことを言う
- こちらの意図と違う方向に走る
そのたびに
「プロンプトをもっと工夫しないとダメか……」
と思って、指示を足して、手順を書いて、役割を与えて——
気づくとプロンプトが長文化していく。
この記事では、その状況を
「手続き的にAIを扱っているからでは?」
という視点で整理し、
代替案として 宣言的コンテキストエンジニアリング という考え方を紹介します。
よくあるコンテキストエンジニアリング(手続き型)
一般的に「コンテキストエンジニアリング」と呼ばれているものは、
多くの場合 手続き的 です。
例:よく見るプロンプト
あなたは優秀なソフトウェアエンジニアです。
まず問題を分析してください。
次に考えられる解決策を列挙してください。
最後に最適な案を1つ選び、理由を説明してください。
特徴
- AIに「役割」を与える
- 考える順番・答える順番を指定する
- 出力の形はある程度安定する
一方で、
- 想定外の方向に行くと止めにくい
- プロンプトがどんどん肥大化する
- 「このケースではどうする?」が増えていく
という問題も起きがちです。
これは、
会話のフローを手続きとして設計している
と見ることができます。
宣言的コンテキストエンジニアリングという考え方
そこで試しているのが、
手順を書かないコンテキスト設計です。
発想の転換
- ❌ どう考えろ、どう答えろを書く
- ⭕ 何をしてはいけないか、どんな前提で話すかだけを書く
インフラで言うと、
- 手続き型:
「この順でコマンドを実行する」 - 宣言型:
「最終的にこうなっていればいい」
の違いに近いです。
具体例:宣言的なプロンプト
例1:禁止事項を宣言する
以下の制約を守って応答してください。
- 情報が不足している場合は、推測せず「分からない」と答えること
- 一般論に話を広げないこと
- 私の代わりに判断や結論を出さないこと
例2:会話の前提条件を宣言する
この会話では以下を前提とします。
- 共感や慰めを目的にしない
- 行動の正解・最適解を提示しない
- 会話はいつでも終了できるものとする
ポイント
- 「まず◯◯して、次に△△して」とは一切書いていない
- AIの思考プロセスを誘導していない
- 代わりに、振る舞いの境界条件だけを決めている
何が変わるのか
手続き型の場合
- 想定した流れから外れると破綻しやすい
- 想定外のケースごとにプロンプトを追加する必要がある
- AIの「自由さ」が事故要因になる
宣言的にすると
- 想定外の話題でも、
「やってはいけないこと」は起きにくい - プロンプトを何度実行しても挙動が大きくブレにくい
- AIが
「言うことを聞かない存在」から
「制約の中で動く存在」
に変わる
なぜ「宣言的」と呼んでいるのか
このやり方は、
- 手順を設計していない
- フローを制御していない
- 状態・制約・禁止事項だけを定義している
という点で、
IaC や Kubernetes の 宣言的設計とかなり近いです。
- プロンプト=命令列
ではなく - プロンプト=ガードレール
として扱っている、というイメージです。
向いている場面 / 向いていない場面
向いている
- 壁打ち
- 思考整理
- 設計レビュー
- 長時間の対話
向いていない
- 定型タスクの自動化
- 決まったフォーマットの出力生成
- 一発で答えが欲しい用途
万能ではありません。
おわりに
「プロンプトをうまく書く」ではなく、
AIとの接触条件をどう設計するか
と考えると、
生成AIの扱い方が少し変わります。
もし、
- プロンプトが長くなりすぎている
- 指示を足しても足してもズレる
- AIに振り回されている感じがする
なら、一度
宣言的に制約だけを書く
というやり方を試してみてください。
たぶん、少し楽になります。
Discussion