🧭

生成AIの使い方を「宣言的」に考えてみた

に公開

はじめに

生成AI、正直ちょっと扱いづらくないですか。

  • 勝手に話を広げる
  • 推測でそれっぽいことを言う
  • こちらの意図と違う方向に走る

そのたびに
「プロンプトをもっと工夫しないとダメか……」
と思って、指示を足して、手順を書いて、役割を与えて——
気づくとプロンプトが長文化していく。

この記事では、その状況を
「手続き的にAIを扱っているからでは?」
という視点で整理し、
代替案として 宣言的コンテキストエンジニアリング という考え方を紹介します。


よくあるコンテキストエンジニアリング(手続き型)

一般的に「コンテキストエンジニアリング」と呼ばれているものは、
多くの場合 手続き的 です。

例:よく見るプロンプト

あなたは優秀なソフトウェアエンジニアです。
まず問題を分析してください。
次に考えられる解決策を列挙してください。
最後に最適な案を1つ選び、理由を説明してください。

特徴

  • AIに「役割」を与える
  • 考える順番・答える順番を指定する
  • 出力の形はある程度安定する

一方で、

  • 想定外の方向に行くと止めにくい
  • プロンプトがどんどん肥大化する
  • 「このケースではどうする?」が増えていく

という問題も起きがちです。

これは、
会話のフローを手続きとして設計している
と見ることができます。


宣言的コンテキストエンジニアリングという考え方

そこで試しているのが、
手順を書かないコンテキスト設計です。

発想の転換

  • ❌ どう考えろ、どう答えろを書く
  • ⭕ 何をしてはいけないか、どんな前提で話すかだけを書く

インフラで言うと、

  • 手続き型:
    「この順でコマンドを実行する」
  • 宣言型:
    「最終的にこうなっていればいい」

の違いに近いです。


具体例:宣言的なプロンプト

例1:禁止事項を宣言する

以下の制約を守って応答してください。

- 情報が不足している場合は、推測せず「分からない」と答えること
- 一般論に話を広げないこと
- 私の代わりに判断や結論を出さないこと

例2:会話の前提条件を宣言する

この会話では以下を前提とします。

- 共感や慰めを目的にしない
- 行動の正解・最適解を提示しない
- 会話はいつでも終了できるものとする

ポイント

  • 「まず◯◯して、次に△△して」とは一切書いていない
  • AIの思考プロセスを誘導していない
  • 代わりに、振る舞いの境界条件だけを決めている

何が変わるのか

手続き型の場合

  • 想定した流れから外れると破綻しやすい
  • 想定外のケースごとにプロンプトを追加する必要がある
  • AIの「自由さ」が事故要因になる

宣言的にすると

  • 想定外の話題でも、
    「やってはいけないこと」は起きにくい
  • プロンプトを何度実行しても挙動が大きくブレにくい
  • AIが
    「言うことを聞かない存在」から
    「制約の中で動く存在」

    に変わる

なぜ「宣言的」と呼んでいるのか

このやり方は、

  • 手順を設計していない
  • フローを制御していない
  • 状態・制約・禁止事項だけを定義している

という点で、
IaC や Kubernetes の 宣言的設計とかなり近いです。

  • プロンプト=命令列
    ではなく
  • プロンプト=ガードレール

として扱っている、というイメージです。


向いている場面 / 向いていない場面

向いている

  • 壁打ち
  • 思考整理
  • 設計レビュー
  • 長時間の対話

向いていない

  • 定型タスクの自動化
  • 決まったフォーマットの出力生成
  • 一発で答えが欲しい用途

万能ではありません。


おわりに

「プロンプトをうまく書く」ではなく、

AIとの接触条件をどう設計するか

と考えると、
生成AIの扱い方が少し変わります。

もし、

  • プロンプトが長くなりすぎている
  • 指示を足しても足してもズレる
  • AIに振り回されている感じがする

なら、一度
宣言的に制約だけを書く
というやり方を試してみてください。

たぶん、少し楽になります。

Discussion