AIにAIニュースを書かせてみた — 自動記事生成システムの全貌

なぜ作ったか

個人開発で有料記事プラットフォーム Draft を運営しています。集客のために毎週AIニュースの分析記事を出したかったのですが、問題が1つ。

手動で毎週書く時間がない。

かといって、RSSを翻訳しただけの記事では価値がない。読者が「なるほど」と思える独自分析を、完全自動で生成するシステムを作りました。

この記事では、そのシステムの全貌を公開します。


システム構成

2台のマシンで役割を分担しています。

mini (Ubuntu Server) — データ収集マシン

  • 毎日cronで9つのRSSソース + Hacker Newsからニュースを収集
  • AI企業の資金調達データ(AI Funding Tracker, Crunchbase)
  • 米国連邦・州レベルのAI規制法案(GovTrack API, OpenStates API)
  • AI企業の株価・出来高・センチメント(自作のTrade2システム、S&P500全銘柄を毎日分析)

M1 Max Mac (64GB RAM) — 分析マシン

  • Qwen 2.5 72B をOllamaでローカル実行
  • 記事本文のリッチ取得(trafilatura)
  • DuckDuckGoでの追加Web検索
  • 9段階パイプラインで記事を生成

クラウドAPIは一切使っていません。すべてローカルで完結します。


9段階パイプライン

ただLLMに「記事を書いて」と言うだけでは、薄い記事しか生成されません。人間のジャーナリストが記事を書くプロセスを分解し、9つのステップに落とし込みました。

Phase A: データ集約

miniサーバーのDBから今週のデータを取得し、Mac側でtrafilaturaを使って各記事の本文を高品質に抽出します。

直近の実行では:

  • ニュース記事: 146件(9ソース)
  • 資金調達: 25件
  • 規制法案: 46件(連邦 + 州レベル)
  • AI企業の株価データ: GOOGL, MSFT, META, NVDA等の日次データ

Phase B: テーマ発見

「今週のニュースを要約して」ではなく、「データが語るストーリーを見つけて」とQwenに依頼します。個別ニュースの羅列ではなく、大きなテーマを3-4個抽出させます。

例えば先週は:

  • AIセキュリティ問題の深刻化
  • 大手AI企業の戦略的動き
  • 規制動向の加速
  • 資金調達の活発化

Phase C: テーマ別深掘り

各テーマについて、関連記事の本文全文(最大3,000字/記事)をQwenに読ませます。RSSのタイトルと概要だけでは薄い分析しかできません。本文を丸ごと読ませることで、具体的な数字や事実を引用した深い分析が可能になります。

Phase C2-C4: Qwenが「これも調べて」と言う

ここが一番面白いところです。

Phase Cの分析を終えた後、Qwenに「記事を書くのに追加で知りたいことはある?」と聞きます。すると:

{
  "queries": [
    {
      "query": "Claude Code leak GitHub details 512000 lines",
      "reason": "漏洩の具体的な規模と影響を確認したい"
    },
    {
      "query": "Anthropic political action committee spending 2026",
      "reason": "PAC支出の詳細を知りたい"
    },
    {
      "query": "AI Foundation Model Transparency Act key provisions",
      "reason": "法案の具体的な条文を確認したい"
    }
  ]
}

Qwenはオフライン(ローカルLLM)なので、自分ではWebを検索できません。代わりにMacが「Qwenの手」となってDuckDuckGoで検索し、trafilaturaで記事本文を取得して、結果をQwenに返します。

Qwen: 「Claude Codeの漏洩の詳細を調べて」
  ↓
Mac: DuckDuckGoで検索 → TechCrunchの記事を取得(5,093字)
  ↓
Qwen: 「なるほど、512,000行のTypeScriptが漏洩したのか。分析を更新する」

このループをQwenが「十分な情報が揃った」と判断するまで繰り返します。 最大3ラウンド。直近の実行では8つの追加検索を行い、7件で本文取得に成功しました。

Phase D: 記事執筆

ここまでで集まったデータ:

  • 146件のニュース記事(本文付き)
  • テーマ分析 × 4テーマ
  • 追加Web検索 × 7件
  • AI企業の株価・出来高データ
  • 規制法案46件

これらすべてをQwenに渡して、記事を書かせます。重要なルール:

「ai_scoreが72に上昇」ではなく「GOOGLは週間+5.3%上昇、出来高は20日平均比71%」と書け。 内部指標ではなく、誰が読んでもわかる株価・出来高で表現します。

「追加情報によると」は絶対に使うな。 調査プロセスへの言及は記事に入れません。あたかも最初から知っていたかのように自然に書きます。

Phase E: セルフレビュー

Qwenに自分の記事を「厳しい編集長」として批評させます。独自性、データ活用、構成、深さ、固有名詞、ソースバランスを5点満点で評価し、具体的な改善箇所を指摘させます。その批評に基づいて記事を書き直します。

Phase F: 最終校正 + 投稿

最後にもう1パス。「です・ます調の統一」「固有名詞が英語のままか」「内部プロセスへの言及がないか」をチェック。

さらに安全網として、Pythonで機械的に「追加情報によると」「検索結果によると」等の表現を除去します。LLMは指示を守らないことがあるので、プログラムでも防御します。


苦労したこと

Googleがスクレイプをブロック

最初はGoogle検索を使おうとしましたが、完全にブロックされました。DuckDuckGoのHTMLエンドポイントに切り替えたところ、安定して動くようになりました。

「追加情報によると」問題

Qwenは追加調査結果を記事に反映する際、「追加情報によると〜」という表現を使ってしまいます。読者にとって意味不明なので、3段階で防御しています:

  1. プロンプトで「使うな」と指示
  2. 校正フェーズでLLMに削除させる
  3. Pythonで機械的に除去

72Bモデルの速度

Qwen 2.5 72Bは高品質ですが、M1 Max上での推論は1回あたり2-15分かかります。24回のLLMコールで合計103分。一晩かける想定なので問題ありませんが、リアルタイムには使えません。


結果

直近の生成結果:

指標
LLMコール数 24回
Web検索 7件成功
入力データ 146記事 + 25資金調達 + 46法案 + 株価データ
生成記事の文字数 4,290字
処理時間 103分
クラウドAPI費用 $0(全てローカル)

正直な評価

良い点:

  • データに基づいた分析は一貫性がある。人間のように「今週は疲れたから手を抜く」がない
  • 株価データとニュースの突合は手動では面倒だが、自動なら毎週できる
  • 規制法案46件を人間が毎週読むのは不可能だが、LLMなら可能

課題:

  • まだ「なるほど!」という驚きのある洞察は少ない
  • ニュースソースがTechCrunch寄りになりがち
  • Qwenの日本語は自然だが、たまに不自然な訳語が混じる
  • 72Bでも「RSSの翻訳」感が完全には消えない

改善予定:

  • 先月の記事の「答え合わせ」(予測 vs 実際)を自動化
  • Similarwebの市場シェアデータとの突合
  • 記事中にグラフを自動生成

このシステムで生成された記事は Draft で公開しています。

システム構成: Qwen 2.5 72B (M1 Max 64GB) + FastAPI + SQLite + Trade2 (S&P500 ML分析)