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段階で防御しています:
- プロンプトで「使うな」と指示
- 校正フェーズでLLMに削除させる
- 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分析)