AIが書いた商品説明を断定語チェックに通したら1件。本当に怪しかったのは、渡していない仕様のほうだった

AIが書いた商品説明を断定語チェックに通したら1件。本当に怪しかったのは、渡していない仕様のほうだった

AIに書かせた商品説明文を、断定語チェックに通しました。6本のうち引っかかったのは1本で、その1件は「毎月必ず出ていく金額は?」という問いかけでした。約束ではありません。

では、6本は問題なしだったのか。読んでみると、そうではありませんでした。

前回は、断定語を拾う小さなスクリプトを作りました。動かした相手は、私が断定語を入れるつもりで書いた見本6行と、このブログの本文です。残した宿題は、AIが書く説明文でも同じように拾えるのか、という点でした。今回はそれを、実際に書かせて確かめた記録です。

書かせたもの

商品は架空の「家計簿Notionテンプレート」にしました。AIに渡した事実は、月ごとの収支入力、カテゴリ別の集計、固定費一覧、PDFの使い方、価格1,480円だけです。

書き手は、私が使っているセッションとは別のAIにしました。手元の人格設定や記憶を読ませたくなかったので、Hermes Agent v0.22.2の hermes chat に --ignore-rules と --ignore-user-config を付けています。前者は AGENTS.md や SOUL.md、記憶、事前読み込みのスキルを読み込ませない指定です。後者は config.yaml を無視する指定です。モデルには gpt-5.6-sol を使いました。

渡したプロンプトは、これだけです。

あなたは個人でデジタル商品を売る人の代わりに、販売ページの商品説明文を書きます。
商品は「家計簿Notionテンプレート」です。Notionの家計簿テンプレートで、月ごとの収支入力、カテゴリ別集計、固定費一覧がついています。価格は1,480円で、PDFの使い方がつきます。
販売ページ用の商品説明文を、日本語で200〜300字、1本書いてください。説明文の本文だけを返し、前置き、見出し、解説、引用符は付けないでください。

これを prompt_plain.txt に保存しました。もう1種類 prompt_facts.txt は、末尾に1文を足しただけです。

買い手が確かめられる事実(入っている機能、枚数、所要時間の目安、価格)だけで書き、効果の約束や「誰でも」「必ず」のような言い切りは避けてください。

各プロンプトで3本ずつ、合計6本を書かせます。1本目はこうです。

cd "$TMPDIR/descgen"
hermes chat -Q --ignore-rules --ignore-user-config --provider openai-codex -m gpt-5.6-sol -t "" \
  -q "$(cat prompt_plain.txt)" 2>/dev/null \
  | grep -v -E '^(Bitwarden|Session:|session_id:)' | sed '/^$/d' > kakeibo_plain_1.txt
cat kakeibo_plain_1.txt
毎月のお金の流れを、Notionですっきり見える化できる家計簿テンプレートです。収入・支出を月ごとに入力するだけで、カテゴリ別の集計がひと目で確認できます。家賃や通信費、サブスクなどをまとめて管理できる固定費一覧も収録。「何にいくら使った?」「毎月必ず出ていく金額は?」が分かりやすくなり、家計の振り返りや予算の見直しに役立ちます。初めての方でも迷わず始められるPDFの使い方ガイド付き。複雑な家計管理をシンプルに続けたい方におすすめです。価格は1,480円。購入後すぐに、自分だけの家計簿としてお使いいただけます。

grep は、起動時に出る秘密情報の読み込みログとセッションIDの行を外すためです。説明文には関係しません。

断定語チェックの結果は1件

前回の copyscan.py を、ファイル単位で呼ぶ小さなスクリプトを足しました。

scan_desc.py(12行)
import sys, os
sys.path.insert(0, os.path.expandvars("$TMPDIR/copyscan"))
import copyscan

args = sys.argv[1:]
if args[0] == "--extra":
    copyscan.CLAIM += args[1].split(",")
    args = args[2:]
for path in args:
    text = open(path, encoding="utf-8").read()
    found = [(w, label) for w, _, label in copyscan.hits(text)]
    print(path, len(text.strip()), "字", found)
python3 scan_desc.py kakeibo_*.txt
kakeibo_facts_1.txt 206 字 []
kakeibo_facts_2.txt 220 字 []
kakeibo_facts_3.txt 232 字 []
kakeibo_plain_1.txt 258 字 [('必ず', 'review')]
kakeibo_plain_2.txt 247 字 []
kakeibo_plain_3.txt 248 字 []

6本中1件。しかも先ほどの「必ず」は、読者に向けた約束ではなく、問いかけの引用です。誤検出でした。

ここで「AIの文章は安全だった」と書いて終わらせることもできました。でも、さっき貼った1本目の説明文を読み返すと、「役立ちます」「迷わず始められる」と書いてあります。語の一覧は、これを黙って通していました。

読んで拾った、2種類の怪しい文

6本を1文ずつ読んで、気になった箇所を2つに分けて数えました。1つは、買った人にどんな結果が出るかを言い切っている文。もう1つは、私が渡していない事実が混ざっている文です。

下書き10語の検出効果の言い切り渡していない事実
plain 11(誤検出)「役立ちます」「迷わず始められる」「購入後すぐに」
plain 20「家計の見直しにも役立ちます」「購入後すぐに使い始められる」
plain 30「すぐに使い始められます」「PDF付きなので安心」「複雑な設定は不要」「購入後すぐに」
facts 1〜3000

plainの3本で、効果の言い切りが5個、渡していない事実が4個でした。

後者のほうが気になります。「購入後すぐに」は、ダウンロード販売のプラットフォームによって実際の動きが違うはずです。「複雑な設定は不要」に至っては、そのテンプレートを開いた人が誰もいません。私が渡したのは5つの事実だけで、そこに載っていない仕様をAIが親切心で足しています。

消費者庁の説明では、商品の内容を実際のものより著しく優良だと示す表示は優良誤認表示にあたります。例は「カシミヤの混用率が約8割のセーターに『カシミヤ100%』と表示した場合」です。説明文の「設定は不要」がそこまでの話になるかは、私には判断できません。ただ、売る側が確認していない仕様が文に入る、という形は同じです。

数字なら機械で見張れるのではないか、とも考えました。ただ、読んで拾った「渡していない事実」は、このあと書く別商品の分も含めて、どれも数字ではありません。AIが足したのは「すぐに」「不要」「何度でも」のような、数字にならない言葉でした。数字を見張っても、ここは守れません。

facts版の3本は、静かすぎた

「確かめられる事実だけで」と1文足したfacts版は、機械で0件、私が読んでも0個でした。

たとえば1本目は、こう締めています。

商品にはテンプレート本体と、基本的な使い方を確認できるPDF形式のガイドが付属します。価格は1,480円です。

正確です。ただ、これを読んで買いたくなるかというと、あまりなりません。売れるかどうかは今回は測っていませんし、測れる状態でもありません。1文足すだけで怪しい文は消え、売り文句も一緒に消えました。ここは、まだ納得していません。

語を足したら、今度は別の商品で外れた

plainを読んだ私は、拾えなかった語を9つ足したくなりました。「おすすめ」「安心」「迷わず」「役立ち」「すっきり」「ひと目」「無理なく」「すぐに」「不要」です。

まず、この記事を置く前の main にあるブログ本文116本にも流して、誤検出の量を見ました。

python3 "$TMPDIR/copyscan/copyscan.py" src/content/posts
python3 "$TMPDIR/copyscan/copyscan.py" src/content/posts --extra おすすめ,安心,迷わず,役立ち,すっきり,ひと目,無理なく,すぐに,不要
files 116 hits 80 {'review': 67, 'negated': 13}
files 116 hits 165 {'review': 141, 'negated': 24}

読む件数が67件から141件に増えました。内訳を見ると、増えた74件のうち43件が「不要」です。「不要な権限を落とせます」や「その切り替え自体が不要になります」のような技術記事の文が、全部入っています。この9語は、ブログの文章を読むには騒がしすぎます。

それでも商品説明文だけに使うなら、と考え直しました。ブログ側の誤検出は関係ないかもしれません。そこで、同じ手順で別商品の説明文を3本書かせて、語を固定したまま試しました。商品は架空の「ブログ構成案プロンプト集」で、渡した事実は、ChatGPTなどに貼って使うプロンプト20本、PDF30ページ、価格980円です。プロンプトは1商品目のplain版と同じ形で、事実の部分だけ差し替えています。

python3 scan_desc.py kosei_plain_*.txt
python3 scan_desc.py --extra おすすめ,安心,迷わず,役立ち,すっきり,ひと目,無理なく,すぐに,不要 kosei_plain_*.txt
kosei_plain_1.txt 283 字 []
kosei_plain_2.txt 235 字 []
kosei_plain_3.txt 253 字 []
kosei_plain_1.txt 283 字 [('おすすめ', 'review')]
kosei_plain_2.txt 235 字 [('おすすめ', 'review'), ('すぐに', 'review')]
kosei_plain_3.txt 253 字 [('おすすめ', 'review')]

元の10語では0件でした。9語を足すと4件になりますが、「おすすめ」の3件は「〜な方におすすめです」という対象者の案内で、私は言い切りとは読みませんでした。残る「すぐに」の1件だけが、読んで拾った箇所と重なります。

読んで拾った箇所は、次のとおりです。

下書き効果の言い切り渡していない事実
plain 1「効率化します」「構成迷子を卒業し」「入力例や活用のポイントもわかりやすく掲載」「検索意図の整理、読者像の設定、見出し作成」
plain 2「悩みを減らす」「効率化できます」「準備時間を短縮」「購入後すぐに活用できます」
plain 3「解消する」「時間を短縮」「スムーズにします」「何度でも利用可能」「体験談、まとめ記事」

効果の言い切りが8個、渡していない事実が5個でした。商品が変わると、使われる語も変わります。「効率化」「短縮」「解消」「卒業」は、家計簿の6本には出てこなかった語です。1つ目の商品から語を足しても、2つ目では外れました。

渡していない事実のほうは、さらに語では拾えません。プロンプト20本の中身(検索意図の整理、見出し作成など)を、AIは私が教えていないのに並べています。ここで「見出し作成」のプロンプトが本当に入っているかは、商品を作った人にしか分かりません。

まだ納得していないこと

9本を読んで拾った数は、効果の言い切りが13個、渡していない事実が9個です。ただし、数えたのは私1人で、数える基準を最初に決めていませんでした。読みながら「これは怪しい」と思った箇所を数えています。別の人が数えれば、違う数字になると思います。

もう1つは、本数です。プロンプト1種類あたり3本で、モデルは1種類です。facts版が静かだったのも、この条件での話にすぎません。

今のところの結論は、地味です。AIが書いた説明文は、渡した事実の一覧と並べて、人が1文ずつ照合します。語の一覧は、その前に印を付ける補助にとどめます。

次に試すのは、別のAIに「事実の一覧に書かれていない主張を、全部抜き出して」と頼む方法です。ただ、これもAIの判断なので、私が数えた9個とどれだけ重なるかを先に見ます。うまくいかなければ、この記事の結論がそのまま残ります。

出典

この記事をシェア