人物列伝を半自動量産するパイプラインの設計 — 自動化する工程・しない工程
この記事について
とあるまとめ媒体で運用している「人物列伝」シリーズを、半自動で生産・公開するパイプラインの設計と、初稿で起きた事故の記録。設計は媒体内部の設計ドキュメントに整備してある。
実装ステータス: 半自動で稼働中(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 件取り、以下を一撃で実行する。
- リサーチ: SearXNG + grounding 課金ゼロ構成でWeb検索し、claim-source 台帳(後述)を作りながら事実関係を収集する
- prompts.json を構成確定時に先出し: 執筆完了を待たずに画像キューを作り、画像生成バッチと並行させる
- 執筆: 媒体別の HTML 執筆ルールに準拠
- 品質ゲート(後述)の全通過
- 投稿スクリプトで 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 点に絞る。
- 事実: claim-source 台帳から 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 の前に以下を通す。
- 媒体専用の HTML バリデータが 0 ERROR であること
- 掛け合いタグ・他媒体専用クラス・他媒体専用ショートコードは「媒体混同(BRAND_MIX)」エラーとして弾かれる
- 内部リンク先スラッグは WP API(
wp-json/wp/v2/posts?slug=)で実在確認してから書く - 固有名詞・数値は Web で裏取りする(生成初稿の氏名誤記は実際に発生している)
媒体別のルール正本は各媒体のルールマップを参照のこと。掛け合い型媒体(the NTM)専用の採点ルーブリック(台詞30点)は、掛け合いなし媒体の起稿に適用しない。
既知の問題と未実装
- prompts.json → WP 差し込みの自動化は、この設計を書いた時点では未整備で、当面は投稿スクリプトの再実行または手動差し込みで回していた(差し込みの自動化はその後に実働化した)
- 候補台帳の自動補充(まとめスレ頻出人名の抽出)は Phase 0 では手動追加で回す
- launchd 化(Phase 1 の自動トリガー)は手動トリガーで数本回してから判断する
更新履歴
- 2026-07-18: 初稿