AIニュース収集を公式本文の事前検証つきにする


AIニュース収集を公式本文の事前検証つきにする

AIモデルの更新を毎朝まとめる運用では、検索結果のスニペットだけで「公式確認」と書いてしまう危険がある。特にモデル名、価格、提供範囲、Release Candidateと正式版の違いは変わりやすく、誤った断定が残ると後続の判断も崩れる。そこで今回は、Hermes AgentのAIニュースcronに、OpenAI、Anthropic、Googleの公式ページ本文を事前に取得し、根拠が足りない日は生成を止める前処理を追加した。

実際に行ったことと確認結果

手元の実装では、AIニュース用の前処理スクリプトを追加し、cronプロンプトの管理元にも失敗時の停止条件を入れた。前処理は、許可した公式ドメインのHTTPS URLだけを取得し、HTMLから本文テキストを抜き出す。`script`、`style`、`svg`などの実行・装飾要素は捨て、モデル名やリリース語を含む周辺だけを短い証拠として残す。

確認日現在のドライランでは、7件の公式ページ取得が成功し、OpenAI 2件、Anthropic 3件、Google 2件の本文証拠を得られた。必須扱いのOpenAI API changelog、Claude API release notes、Gemini API release notesに失敗がなく、レポートは`ok: true`、`critical_failures: []`、`missing_vendors: []`だった。あわせて、生成されるJSONには本文証拠のhashと前回差分フラグを入れ、同じ証拠を毎回「新規更新」として扱わないようにした。

仕組みの流れ

処理はニュース本文を作る前に走る。

1. 公式情報源の一覧を、ベンダー、名前、URL、必須フラグ、検索キーワードで定義する。
2. URLのscheme、host、portを検査し、許可外ドメインや認証情報付きURLを拒否する。
3. リダイレクトを上限付きでたどり、応答サイズとContent-Typeを確認する。
4. HTMLから可視テキストだけを抽出し、キーワード周辺の短い証拠へ切り詰める。
5. 証拠本文のSHA-256を計算し、前回保存したhashと比較する。
6. 必須ページ失敗、または3社いずれかの本文証拠が0件なら、ニュース生成を中止する。
7. 成功時だけ、Hermes Agent本体のニュースプロンプトがWeb検索結果と事前証拠を照合して要約する。

ポイントは、Webページ本文そのものも未信頼データとして扱うことだ。本文内に命令文があっても、Hermesへの操作指示ではなく、事実確認の引用候補に限定する。

再現手順

まず、AIニュース用の前処理スクリプトをプロジェクトに置く。公開例では実パスを伏せる。

“`bash
python /path/to/project/ai_news_source_collector.py > /tmp/ai-news-sources.json
“`

出力JSONで、少なくとも次を確認する。

“`text
ok == true
critical_failures == []
missing_vendors == []
vendor_successes.openai > 0
vendor_successes.anthropic > 0
vendor_successes.google > 0
“`

次に、cron用プロンプトへ「Script Outputが失敗なら生成しない」「検索スニペットだけで断定しない」「推測URLを作らない」という条件を入れる。Hermes cronへ登録するときは、前処理スクリプトをscriptとして指定し、本文生成側にはそのJSONを入力として渡す。

“`bash
hermes cron edit YOUR_JOB_ID \
–script ai_news_source_collector.py \
–workdir /path/to/project
“`

運用後は、状態ファイルに保存したhashで差分を確認する。状態ファイルにはAPIキーや本文全文ではなく、取得時刻と証拠hashだけを置く。

失敗しやすい点と安全策

もっとも失敗しやすいのは、公式ドキュメントがJavaScript主体で、取得できたHTMLがナビゲーションだけになるケースだ。そのため、本文長が短すぎる場合は成功扱いにしない。また、許可リスト外のURLへリダイレクトされた場合も停止する。

もう一つの落とし穴は、公式ページの本文証拠と検索結果を混同することだ。検索結果に公式ドメインが出ても、スニペットだけなら「公式検索結果スニペットで確認」と範囲を狭め、価格や提供範囲を断定しない。MCPやモデルの仕様では、正式仕様、Release Candidate、preview、限定提供を分けて書く。

未完了事項として、公式ページの構造変更に合わせた抽出ルールの保守は必要である。取得失敗の日は、無理にニュースを出すより「収集失敗」と短く通知して、翌回に再取得する運用にした。

再現チェックリスト

  • [ ] 公式URLのallowlistを持っている。
  • [ ] 必須ページの取得失敗時に生成を止める。
  • [ ] HTML内の実行要素やプロンプト風文言を命令として扱わない。
  • [ ] 証拠本文を短く切り、hashで前回差分を管理する。
  • [ ] 検索スニペットだけの情報を公式本文確認と書かない。
  • [ ] OpenAI、Anthropic、Googleの3社それぞれに本文証拠がある。
  • [ ] 出力やログにAPIキー、内部URL、個人パスを残していない。

公式一次情報

  • [OpenAI API changelog](https://developers.openai.com/api/docs/changelog)
  • [Anthropic Claude Platform release notes](https://platform.claude.com/docs/en/release-notes/overview)
  • [Google Gemini API release notes](https://ai.google.dev/gemini-api/docs/changelog)
  • [Hermes Agent cron documentation](https://hermes-agent.nousresearch.com/docs/user-guide/features/cron)

Back to top