0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AIの改善ループで、審査コメントの架空の例文が本文に混入した話

0
Last updated at Posted at 2026-09-04

概要

AIに書かせた記事を、AEO審査で採点して、その指摘を次の改善再生成へ渡す。
この「書く→採点する→直す」を自動で回す仕組みを作っていました。

ある日、そのループを通した記事の本文に、架空の日付と金額が、あたかも自分の体験のように書き込まれていたんです。

原因は、採点する側が出したアドバイスの中の「例文」でした。
この記事では、その混入がどう起きたのかと、防ぎ方をどう整理したかを、手順の形でまとめます。

こんな人に向けて書いています

  • レビュー→自動修正ループを組む人

この記事でわかること

  • 審査コメントの例文が、次の生成で「事実」に昇格する経緯
  • 体験談保護では、架空内容の追記を防げなかった理由
  • 対策として整理した2つ(審査側の指示の書き方/改善後の一次情報チェック)

なお、混入した日付や金額そのものは架空の値なので、この記事には転記していません。

前提

  • 「生成 → 採点 → 再生成」を自動で回す構成を想定しています。

AEO審査の指摘を、次の「改善を反映して再生成」へ渡す構成にしていました。

一言でいうと、採点の出力が、次の生成の入力になる構造です。
この記事で扱う事故は、まさにこの「つなぎ目」で起きました。

図にすると、こういう並びです。

生成 → AEO審査(採点・指摘)→ 改善を反映して再生成 → 公開へ
              └──────── 指摘をそのまま渡す ────────┘

何を作ったか

記事の改善再生成パイプラインです。

その工程のひとつに、記事を採点して改善指摘を返すAEO審査のステップがあります。

そして次の工程が「改善を反映して再生成」。
審査が返した指摘を読んで、本文を書き直します。

この2つを直列につないだ構成です。

なぜ問題だったか

今回は、E-E-A-Tを目的とした体験談の中で事実が捏造されました。
記事の信頼性を上げるために厚くした部分が、いちばん嘘を含みやすい場所になっていた、ということです。

何が起きたか:審査の「例文」が本文の「実体験」になった

審査が返してきた指摘は「使用期間・金額を明示せよ」というものでした。

そして審査は、その指摘に説明用の例文を添えています。
その例文には、移管した時期・請求書の年月・金額といった具体値が並んでいました。どれも実在しません。審査役が例として提案した値です。

次の工程は、この指摘を読んで本文を書き直します。
結果、この日付と金額が、筆者の実体験として本文に書き込まれました。

審査コメントの例文が、改善再生成によって、記事本文の「事実」になっていたわけです。

このときパイプラインには、生成済みの体験談を勝手に書き換えさせないためのガード(体験談保護)も入っていました。
けれどこれは既存の記述を保持するためのもので、新しく架空の記述が追記されるのは止められません
既存内容は守れたが、新規追記は対象外だった、ということです。

その記事は、手作業で実データに置き換えてから公開しています。

値がどう渡っていったかを並べると、こうなります。

[AEO審査の指摘]
  「使用期間・金額を明示せよ」
  例:移管時期 / 請求書の年月 / 金額        ← 説明用の例文(実在しない値)

        ↓ 指摘を丸ごと次の工程へ

[改善を反映して再生成]
  例文の値を「筆者の体験」として本文に記述   ← ここで例文が事実に昇格

        ↓

[体験談保護]
  既存の体験談の書き換え → 防げる
  新しい架空の記述の追記 → 防げない          ← 守備範囲の外

E-E-A-Tのために厚くした体験談の部分で、事実が捏造される。
目的と事故が同じ場所で起きるのが、この構成のいやなところでした。

手順:対策として整理した2つ

手順1. 審査側に、架空の具体データを書かせない

改善指摘の例文に、架空の日付や金額を書かせないようにする、ということです。

実行するのは入口側、つまり審査が指摘を組み立てるタイミング。
本文を直す前、改善再生成へ指摘を渡すより手前で効かせます。

確認する対象は、審査が返す指摘そのもの。
とくに「例として」「たとえば」の形で添えられた文の中に、日付・金額・使用期間のような具体値が入っていないかを見ます。
今回混入したのは、まさにこの位置に置かれた値でした。

手順2. 改善ループのあとに、一次情報チェックを挟む

もうひとつは出口側です。
改善後に、本文の内容が一次情報にあるかを確認します。

タイミングは、改善再生成が終わった直後。
採点を通ったかどうかに関係なく、公開へ進む前に必ず一度通す位置に置きます。改善を何周か回す構成なら、周回ごとに見るのが安全です。

確認する対象は、本文に出てくる日付・金額・使用期間・体験の記述。
それぞれについて「この値は一次情報のどこに書いてあるか」を答えられるかどうかで判定します。答えられないものは、書き手が知らないうちに増えた記述です。

前者は混入を減らす対策、後者は混入したものを見つける対策です。

チェックを置く位置

2つを置く位置を、さっきの並びに重ねるとこうなります。

生成 → AEO審査(採点・指摘)→ 改善を反映して再生成 → 公開へ
            ▲                              ▲
            │ 対策1:入口側                 │ 対策2:出口側
            │ 指摘の例文に具体値を書かせない  │ 本文の値が一次情報にあるか確認

そのまま使えるよう、確認項目の形にすると次の2ブロックです。

[入口:審査の指摘を渡す前]
  - 指摘の中に「例として」「たとえば」で始まる文はあるか
  - その文に 日付 / 金額 / 使用期間 の具体値が入っていないか
  - 入っていたら、具体値を外してから次の工程へ渡す

[出口:改善再生成の直後・公開の前]
  - 本文の 日付 / 金額 / 使用期間 / 体験の記述を洗い出す
  - それぞれ「この値は一次情報のどこに書いてあるか」を答えられるか
  - 答えられない記述は、ループ中に増えたものとして扱う

結び

採点と生成をつなげてループにすると、片方の「たとえ話」が、もう片方にとっての「事実」になる瞬間があります。

もうひとつ効いたのは、ガードの守備範囲が片側だけだったことです。
体験談保護は既存内容の保持には効きましたが、架空内容が追記されるのは防げませんでした。
守りたいものを言葉にするときは、何を禁止しているのかを確認しないと、守れていない方向が残ります。


個人でAIツールや業務自動化を作っているMiyokiといいます。
記事の生成パイプラインのように、自分の作業を楽にするための小さなツールを作っては、その開発ログをZennとQiitaに書いています。

作ったものやポートフォリオはこちらです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?