デジタル商品の購入者対応AI、説明書をルールに混ぜない合成見本

デジタル商品の購入者対応AI、説明書をルールに混ぜない合成見本

デジタル商品を買った人が最初に聞くのは、たいてい難しい質問ではありません。「どのファイルから開けばいいですか」「更新版はどこですか」といった案内です。ここをAIに任せるなら、返答の口調と商品そのものの説明を同じ場所へ書かない方が、あとで直しやすくなります。

今回は週末の献立テンプレートを販売する場面を想定し、購入者対応AIの設定を3ファイルへ分ける合成見本を作りました。実際の販売物や購入者の記録は使っていません。最初は返金条件を振る舞いの指示へ書いてしまい、点検が失敗します。説明書へ移してから、同じ点検を通します。

前回はZIP内のREADMEが相対リンクで開けるかを確かめました。今回の焦点は、そのREADMEの内容を購入者対応へ渡す時の置き場所。

商品情報を指示へ置くと、更新が怖くなる

振る舞いの指示には、返答の順序、分からない時の扱い、約束してはいけないことを書きます。商品説明には、同梱物、更新日、返金条件、対応環境を書きます。両方を1つの長い指示へ入れると、説明書を更新しただけでも、AIの振る舞いまで変わったかを見分けにくくなります。

OpenAIのGPT設定ガイドも、振る舞いはInstructionsへ、会話で参照する資料はKnowledgeへ分ける考え方を案内しています。さらに、Custom GPTからPluginへの移行では、Instructionsはskillになり、Knowledgeのファイルはreference filesへコピーされる予定です。商品情報を独立させておけば、移行時に何を確認するかも明確になります。

私なら、商品説明を毎回プロンプトへ貼り直す設計は選びません。値段や更新手順を直すたびに、返答の安全な範囲まで触った気分になるからです。小さな分離ですが、個人で管理する商品ほど効きます。

[購入者の質問]
        │
        ▼
[振る舞いの指示]
  ├── 断定しない条件
  ├── 説明書を優先する条件
  └── 人へ引き継ぐ条件
        │
        ▼
[商品説明書]
  ├── 同梱物
  ├── 更新方法
  └── 返金条件
        │
        ▼
[購入者への回答]

最初の設定は、返金条件の置き場所を間違えた

見本の最初のinstructions.txtには、返答のルールに加えて「購入後7日以内なら返金できます」という商品情報を入れます。これは一見すると便利です。しかし、返金条件を変更する時、指示の変更として扱うことになります。

次のスクリプトは、RULE:で始まる行を振る舞い、FACT:で始まる行を商品情報として数えます。instructions.txtにFACT:があれば失敗にします。外部パッケージは使いません。

# check_agent_boundary.py
from pathlib import Path
import sys

instructions = Path(sys.argv[1]).read_text(encoding="utf-8").splitlines()
manual = Path(sys.argv[2]).read_text(encoding="utf-8").splitlines()

instruction_rules = sum(line.startswith("RULE:") for line in instructions)
instruction_facts = sum(line.startswith("FACT:") for line in instructions)
manual_facts = sum(line.startswith("FACT:") for line in manual)

print(f"instruction_rules={instruction_rules}")
print(f"instruction_product_facts={instruction_facts}")
print(f"manual_product_facts={manual_facts}")
print("result=" + ("FAIL" if instruction_facts else "PASS"))
raise SystemExit(bool(instruction_facts))

まず、一時ディレクトリに3ファイルを置きます。

# instructions.txt
RULE: 説明書にないことは断定しない
RULE: 解決しない時は問い合わせ先を案内する
FACT: 購入後7日以内なら返金できます

# manual.txt
FACT: 同梱物はREADME.mdとmeal-plan.xlsxです
FACT: 更新版は購入ページのお知らせから取得します
mkdir -p "$TMPDIR/support-agent-boundary"
cd "$TMPDIR/support-agent-boundary"
python3 check_agent_boundary.py instructions.txt manual.txt

実行結果は次のとおりでした。終了状態は1です。

instruction_rules=2
instruction_product_facts=1
manual_product_facts=2
result=FAIL

失敗した理由は、返金条件の正しさではありません。商品情報が振る舞いのファイルへ混ざったためです。この段階で止めれば、返金条件を直す人と、AIの対応方針を直す人が同じ差分を確認せずに済みます。

返金条件を説明書へ移して、もう一度通す

instructions.txtから最後の1行を消し、manual.txtへ移します。説明書は次の形になります。

# manual.txt
FACT: 同梱物はREADME.mdとmeal-plan.xlsxです
FACT: 更新版は購入ページのお知らせから取得します
FACT: 購入後7日以内なら返金できます

同じコマンドを再実行しました。

python3 check_agent_boundary.py instructions.txt manual.txt
instruction_rules=2
instruction_product_facts=0
manual_product_facts=3
result=PASS

この点検は、返金条件が法令や販売先の規約に合うかを判断しません。確認する対象は置き場所だけ。内容の正確さ、購入者に約束する範囲、実際に人へ引き継ぐ連絡先は、販売前に人が別途確認します。

3ファイルにすると、変更の理由が残る

この見本では、実行用のファイルを含めて3つです。

ファイル役割変更する場面
instructions.txtAIの返答順序と制限対応方針を変える時
manual.txt商品の事実と案内商品を更新する時
check_agent_boundary.py2つが混ざっていないか確認ルールを増やす時

商品情報を説明書へ分けても、AIが必ずその内容を正しく答えるわけではありません。OpenAIの案内でも、Knowledgeは参照資料であり、Instructionsは振る舞いを定めるものです。購入者の質問で試し、返答が説明書と違った時は、説明書、指示、連携先のどこに原因があるかを分けて見ます。

Custom GPTを使っている場合は、移行前にInstructions、Knowledgeのファイル、Actionsを一覧にします。OpenAIの移行FAQによると、Custom Actionsは移行で自動転送されません。外部の注文管理や問い合わせフォームへ接続しているなら、移行後にその接続だけを別の確認項目にします。

用語

用語この見本での意味
振る舞いの指示質問への答え方や、答えない範囲を決める文章です
商品情報同梱物、更新方法、返金条件のように商品ごとに変わる事実です
KnowledgeGPTが会話中に参照するために追加する資料です
InstructionsGPTが毎回守る振る舞いを定める設定です
Custom ActionGPTから外部APIを呼ぶための接続設定です
境界点検役割の違う情報が同じ設定に入っていないか確認する処理です

販売前は、質問を一つずつ照合する

この見本の合格は、購入者対応AIを公開してよい印ではありません。少なくとも「同梱物は何か」「最新版はどこか」「答えられない質問で何を返すか」を、説明書と同じ言葉で確認します。返金や個人情報の質問では、自動回答の範囲を狭くして、人が対応する導線を先に決めます。

AIを使うと説明文の生成は速くなります。それでも、購入者への約束まで1つのプロンプトに押し込む必要はありません。分ける理由は、変更の責任を追えること。商品情報を説明書として残し、振る舞いの指示と別に点検できる状態から始めます。

出典

この記事をシェア