AIで下書きする業務テンプレート、利用例の固有名を3つの変数へ戻す見本

「今週の対象: 田中商店」と書かれた利用例は、読む人には具体的です。でも、誰でも使える業務テンプレートの商品本体には不向きです。AIへ下書きを頼むと、もっともらしい店名、曜日、連絡先が文に混ざります。
ここでは架空の週次サポート用Markdownを使います。店名、曜日、メールアドレスの3つを固定値として置き、配布前に止める小さな検査を試しました。実在の購入者、注文、連絡先は使っていません。差は3つだけ。
読みやすい例と、再利用できる例は違います
AIは利用場面を補うために、架空の固有名詞を自然に入れます。そのままなら、購入者は完成形を想像しやすいです。一方で、商品本体へ残すと「自分の店名へどこを直すか」が見えにくくなります。
最初は、本文を読んで気付いた場所だけを置換するつもりでした。でも、固定値が増えると見落としやすくなります。そこで、置換候補を文章の外へ出し、同じ検査で止める形にしました。
今回の見本では、次の3つを変数に戻します。
田中商店は{{ customer_name }}へ戻します。金曜日は{{ send_weekday }}へ戻します。[email protected]は{{ reply_email }}へ戻します。
変数は、購入者が自分の条件を入れる場所を示す目印です。検査の役目は、配布用の利用例を自動生成することではありません。固定値が残っていないかを知らせる小さな境界。
固定値と置換先を別ファイルへ置きます
空の一時ディレクトリに、テンプレートと検査ルールを作ります。AIの出力をそのまま読ませる処理は入れていません。まず人が、商品から外す固定値と、置換先の変数名を決めます。
work="$TMPDIR/hibanas-template-variable-check"
mkdir -p "$work"
cd "$work"
cat > template.md <<'EOF'
# 週次サポートテンプレート
今週の対象: 田中商店
返信する曜日: 金曜日
送信先: [email protected]
EOF
次に、3つのルールをJSONへ書きます。
cat > variable-policy.json <<'EOF'
{
"rules": [
{"literal": "田中商店", "variable": "{{ customer_name }}"},
{"literal": "金曜日", "variable": "{{ send_weekday }}"},
{"literal": "[email protected]", "variable": "{{ reply_email }}"}
]
}
EOF
検査は、literalがテンプレートに残っていれば、使う変数名とともに表示します。該当時は終了コード2。
import json
from pathlib import Path
template = Path("template.md").read_text(encoding="utf-8")
rules = json.loads(
Path("variable-policy.json").read_text(encoding="utf-8")
)["rules"]
hits = [rule for rule in rules if rule["literal"] in template]
for rule in hits:
print(f"HOLD literal={rule['literal']} use={rule['variable']}")
print(f"result={'PASS' if not hits else 'HOLD'} rules={len(rules)} hits={len(hits)}")
raise SystemExit(0 if not hits else 2)
check_variables.pyとして保存して実行します。
python3 check_variables.py
見本では、3件すべてが残っていたため止まりました。
HOLD literal=田中商店 use={{ customer_name }}
HOLD literal=金曜日 use={{ send_weekday }}
HOLD [email protected] use={{ reply_email }}
result=HOLD rules=3 hits=3
rules=3はルール数です。hits=3は、決めた3つの固定値が本文に見つかった数です。店名だけを探す案も考えましたが、曜日と送信先が残れば、購入者は別の場所で書き換える必要があります。3つとも同じ扱い。
本文を置き換えて、同じ検査を通します
次に、固有名を変数へ置き換えます。変数の中身は空のままです。商品へ残すのは、個別の値ではなく、購入者が設定する場所だからです。
cat > template.md <<'EOF'
# 週次サポートテンプレート
今週の対象: {{ customer_name }}
返信する曜日: {{ send_weekday }}
送信先: {{ reply_email }}
EOF
python3 check_variables.py
実行結果は次のとおりです。
result=PASS rules=3 hits=0
PASSは、今回の3つの固定値が見つからなかったことだけを示します。変数名が分かりやすいか、テンプレートの手順が業務に合うかは別に読みます。AIが作った文の正しさも、人が確かめます。
ルールを増やしすぎない理由
日付、URL、商品名、料金など、固定値として探せるものはまだあります。けれども、最初から正規表現を増やすと、普通の説明文まで止めるおそれ。
私は、商品内で変更してほしい値が明確なときだけルールへ足すほうが扱いやすいと考えます。たとえば送信先を購入者が設定する商品ならメールアドレスをルールに入れます。説明用の架空日付を残す設計なら、日付を一律に止めません。
AIは下書きを速くします。しかし、固有名を入れた理由までは販売後の購入者へ伝えません。固定値を見つけたら、消すのか、変数にするのか、利用例として別ページへ移すのかを人が決めます。
配布前に見る範囲
この検査は、テンプレート内の3つの文字列だけを対象にします。購入者データを消去する機能でも、個人情報保護への適合を判定する機能でもありません。実在の入力をAIへ渡す前には、渡してよい情報を別に決める必要があります。
配布候補にする前の順番は、次のとおりです。
- AIの下書きから、購入者が変更する値を拾う
- 固定値と変数名をルールへ書く
- 検査がHOLDなら、本文の残り方を読む
- 置換後に同じ検査で
hits=0を確認する - 最後に人が、利用手順と商品としての価値を読む
固有名のない見本は、文章の魅力を減らすためのものではありません。購入者が自分の条件へ置き換えられる余地を、商品本体に残すためのものです。


