人物列伝を半自動量産するパイプラインの設計 — 自動化する工程・しない工程

  • #パイプライン
  • #LLM
  • #品質ゲート
  • #自動化
  • #メディア運用
人物列伝を半自動量産するパイプラインの設計 — 自動化する工程・しない工程

この記事について

とあるまとめ媒体で運用している「人物列伝」シリーズを、半自動で生産・公開するパイプラインの設計と、初稿で起きた事故の記録。設計は媒体内部の設計ドキュメントに整備してある。

実装ステータス: 半自動で稼働中(Phase 0 台帳 + Phase 1 手動トリガー)


全体フローの概要

工程担い手自動化度
インテイク(候補台帳補充)エージェント(追加)+人間(承認)半自動・前ゲート方式
リサーチ・構成Claude Code(Web検索)自動
執筆・事実検証Claude Code自動(サブスク枠内)
画像prompts.json キュー → 画像生成バッチ非同期・従量 API 不使用
公開判断人間手動ゲート

追加 API 課金 0 円方針を維持する。画像生成も従量課金(Imagen3 / DALL-E 系)は月50枚超 or KPI月5万円達成まで使用しない。


フェーズ設計

Phase 0: 人物候補台帳(パイプラインの本体)

候補台帳は媒体ごとに JSON で持つ。スキーマは以下。

{
  "candidates": [
    {
      "id": "wang-huning",
      "name": "王滬寧",
      "priority": 1,
      "trigger": "台湾情勢・中国指導部人事のニュースで検索需要が跳ねる",
      "angle": "3代の最高指導者に仕えた『影の理論家』の二面性",
      "related_matome_tags": ["中国", "台湾"],
      "sources_seed": ["https://..."],
      "status": "candidate"
    }
  ]
}

候補追加(candidate 状態)はエージェントが行い、approved への遷移は人間のみが行う。別プロジェクトの自動起稿ループで「承認工程を自動化するとキューが枯渇する」実害が既に出ているため、前ゲート方式を意図的に選択した。approved 残が 2 を切ったら起稿ワーカーが通知して止まる。

Phase 1: 起稿ワーカー(Claude Code が執筆)

approved から priority 順に 1 件取り、以下を一撃で実行する。

  1. リサーチ: SearXNG + grounding 課金ゼロ構成でWeb検索し、claim-source 台帳(後述)を作りながら事実関係を収集する
  2. prompts.json を構成確定時に先出し: 執筆完了を待たずに画像キューを作り、画像生成バッチと並行させる
  3. 執筆: 媒体別の HTML 執筆ルールに準拠
  4. 品質ゲート(後述)の全通過
  5. 投稿スクリプトで draft 投稿

Phase 2: 画像(非同期・従量 API 不使用)

1本あたり featured 1 枚 + inline 3〜4 枚が標準。様式は editorial cartoon カリカチュア(bold black outlines / muted red-black-cream)で人物シリーズの視覚文法を踏襲する。

生成経路は prompts.json → 外部生成バッチ、またはローカル ComfyUI(商用 OK モデル)のどちらでも可。後処理は prepare_images.py で WebP 化してから WP メディアに差し込む。

Phase 3: 公開(人間ゲート)

レビュー観点を 3 点に絞る。

  1. 事実: claim-source 台帳から 3 件抜き打ちでソースと照合
  2. 法務: 存命人物チェックリストの該当項目を確認
  3. 技術: スラッグ・タグ・featured_media・内部リンクの HEAD 200

公開はスロット運用(future 予約)。ハブ記事がある場合は同時公開で相互リンクを同梱する。


事実検証の設計

claim-source 台帳

記事内の検証可能な主張(数値・日付・発言・経歴)ごとに、ソースURLと確認日を記録する。ドラフトと同じ場所に <slug>.sources.json として保存し、PR に含める。

{
  "claims": [
    {
      "claim": "1994〜1998年の飢饉死者は推計30万〜200万人",
      "sources": ["https://..."],
      "checked": "2026-07-12",
      "confidence": "推計幅をそのまま記載(単一値に丸めない)"
    }
  ]
}

存命人物チェックリスト(要点)

領域ルール
犯罪歴・係争中の事件確定判決 + 大手報道複数ソースのみ
発言の引用一次ソース(動画・公式文書・本人 SNS)優先、孫引きは出典明示
評価・批判断定形の人格評価は書かない(「〜と評される」+出典)
数値・統計誰が・いつ・どの報告書で出した数字かを必ず添える

品質ゲート — Jensen Huang 初稿事故から確立

2026-07-12、Jensen Huang 初稿で以下が同時発生した。

  • キャラクター掛け合いタグ 6 箇所(媒体混同エラー):掛け合い型の別媒体(the NTM)用のルーブリックを、掛け合いなし媒体の起稿に誤適用
  • ハングル文字混入(NVIDIA의
  • 存在しないスラッグへの内部リンク 3 件
  • 氏名誤記(入交昭兵郎 → 正:入交昭一郎)

これらはすべて機械検証で検出できるものだった。どのエージェントが起稿しても、WP 下書き投稿・Git push の前に以下を通す。

  1. 媒体専用の HTML バリデータが 0 ERROR であること
    • 掛け合いタグ・他媒体専用クラス・他媒体専用ショートコードは「媒体混同(BRAND_MIX)」エラーとして弾かれる
  2. 内部リンク先スラッグは WP API(wp-json/wp/v2/posts?slug=)で実在確認してから書く
  3. 固有名詞・数値は Web で裏取りする(生成初稿の氏名誤記は実際に発生している)

媒体別のルール正本は各媒体のルールマップを参照のこと。掛け合い型媒体(the NTM)専用の採点ルーブリック(台詞30点)は、掛け合いなし媒体の起稿に適用しない。


既知の問題と未実装

  • prompts.json → WP 差し込みの自動化は、この設計を書いた時点では未整備で、当面は投稿スクリプトの再実行または手動差し込みで回していた(差し込みの自動化はその後に実働化した)
  • 候補台帳の自動補充(まとめスレ頻出人名の抽出)は Phase 0 では手動追加で回す
  • launchd 化(Phase 1 の自動トリガー)は手動トリガーで数本回してから判断する

更新履歴

  • 2026-07-18: 初稿