AIが自分への指示文を、自分の記事の「事実」として引用していた話 ― note自動生成の証拠一覧を汚していた自己参照ログ

J-WORKSでは、その日の運営記録をnote記事として自動で書かせる仕組みを使っている。この仕組みが記事の根拠として集める事実一覧に、記事自体を書く・直すためにAIへ送った指示の記録が紛れ込み、「記事を書くための指示」が「その日の事実」として引用されてしまっていた事例を、実際の記録から確認し、対象を絞った修正で対応した記録。

検証条件

J-WORKSでは、その日の運営記録を伝えるnote記事(DAY記事)を、AIに自動で書かせている。この仕組みは、記事を書く前に、社内の様々な記録(業務指示の実行ログ、市場調査、SNS投稿状況、商品の状態など)を集めて「今日あった出来事の事実一覧」を機械的に作り、その一覧を記事執筆の材料として使うと同時に、公開前にOWNERが根拠として確認できる一覧としても保持している。今回確認したのは、この事実一覧を作る処理が、AIスタッフへの作業指示そのものの記録を情報源の1つとして使っている際に、「その日に実際にあった業務」と「この記事自体を書く・直す・確認するためにAIへ送った指示」を区別できていたか、という点である。

実行内容

この事実一覧を作る処理の実装を直接確認したところ、いくつかある情報源の1つが、AIスタッフへの作業指示・実行結果のログを、時間帯だけで絞り込んで取り込む作りになっており、その指示が何のために送られたものかを示す情報を一切見ていないことが分かった。記事執筆・部分修正・最終校正・査読といった、この記事自体を作るための指示は、いずれも「(特定の登録名)で保存(または登録)してください」という決まった言い回しをAIへの指示文の中に必ず含む設計になっていたため、この特徴を手がかりに、修正前に公開されていた最初の4本の記事について、実際に保存されていた事実一覧を直接調べた。その結果、4本のうち事実一覧全体に占める「記事自体を作るための指示」の割合は、それぞれ約26%、約46%、約34%、約27%(該当件数はそれぞれ135件中35件、133件中61件、256件中86件、215件中58件)であることを確認した。また、この4本の実際に公開された本文を直接確認したところ、これらの指示文がそのまま読者向けの記事本文へ漏れて表示されていた事実は無いことも確認した(本文への混入は、事実一覧の作成とは別の校正チェックによって防がれていた)。

結果

同日中に、事実一覧の作成処理へ、対象の指示ログの文字列が、記事生成の仕組みが持つ登録・保存アクションの名前と「(その名前)ツールで」という言い回しを含むかどうかを調べる処理を追加し、含む場合はその指示ログを事実一覧から除外するよう修正した。この判定は、記事生成の仕組みが持つ登録・保存アクションの名前一覧をその定義元から直接取得して使うため、対象は記事生成の仕組み自身のアクション名に限定される設計である。修正が反映された後に完全に生成された記事3本、および公開済み記事の通常業務ログを確認した範囲では、この判定によって無関係な業務指示が誤って除外された例は見当たらなかったが、これは指示文の言い回しという文字列上の特徴に基づく判定であり、たまたま同じ言い回しを含む別の指示があれば、それも区別なく除外されうるという条件付きの対策である。この修正と同時に追加された自動テスト(通常業務ログは残ること、記事生成向けの指示ログは種類を問わず除外されること、日付の境界処理に影響しないこと、出来事が無い日は従来どおり空になることなどを検証する一式)を、今回(2026-09-25、修正から約3週間・同じファイルへその後23回の変更が加わった後)改めて実行し、20件すべて合格したことを確認した。加えて、修正が反映された後に完全に生成された記事3本の事実一覧を直接確認したところ、この種の指示ログはいずれも0件(それぞれ32件・50件・62件の事実全体のうち)であることを確認した。修正が反映される前後をまたいで生成が続いていた記事が1本あり、その事実一覧には該当する指示ログが2件残っていたが、内容を確認したところ、いずれも記事生成の仕組みとは別の業務(市場調査・提携案件の審査)への指示であり、今回の修正が対象とする範囲の外にあるものだった。

失敗原因

原因は、事実一覧を作る処理が複数の社内記録を時間帯だけで機械的に集める設計になっており、「その日に実際にあった業務の記録」と「記事そのものを書く・直す・確認するためにAIへ送った指示の記録」を区別する仕組みがそもそも無かったことにある。記事を書く作業自体も、他の業務と同じ仕組みでAIへ指示・記録されているため、この処理からは「いつもの業務ログ」と全く見分けがつかず、そのまま取り込まれていた。

改善

新しい区別用の情報(記録の目的を示す項目など)を追加するのではなく、既にある指示文の言い回しの特徴を手がかりにする、対象を絞った対応を取った。記事生成の仕組みが持つ登録・保存アクションには、あらかじめ決まった名前が付いており、AIへの指示文は必ず「(その名前)で保存・登録してください」という形でその名前を含む設計になっている。この特徴を使い、記事生成の仕組み自身が持つアクション名の一覧を定義元から直接取得し、そのいずれかを参照する指示ログだけを対象に除外するようにした。アクション名の一覧は定義元から自動的に取得されるため、将来この仕組みに新しいアクションが追加されても、除外対象の一覧を手作業で更新する必要が無い設計にした。除外の判定はこの1つの情報源に限定し、他の社内記録の扱いは変更していない。

現在の結論

修正した当日、および約3週間後の今回にあらためて確認できたのは、修正前の最初の4本で実測されていた「記事生成の指示を事実として引用してしまう」現象が、修正後に完全に生成された記事では確認されなくなったこと、および該当する自動テストが今も全件合格していることである。この対応は指示文の言い回しの特徴を手がかりにした、対象を絞った文字列一致による修正であり、記録の目的そのものを区別できる仕組みへの作り直しは行っていない(将来の課題として残っている)。また、修正前にすでに保存されていた4本の事実一覧の記録自体は、遡って直したものではない(公開済みの記事本文には、そもそもこの指示文は表示されていなかったため、読者が読む内容への影響はない)。

根拠

2026-09-02に実装した修正とその際に追加された自動テスト(2026-09-25に再実行し20件全件合格)、および2026-09-25に社内データベースのnote記事レコード(事実一覧・本文)を直接確認した結果によるJ-WORKS内部の実施記録。