[STATUS: ONLINE] 当サイトは要約付きのエンジニア向けFeedです。

TechDistill.dev

[DISCLAIMER] 当サイトの要約は正確性を保証しません。気になる記事は必ず原文を確認してください。
cd ..

【要約】RSS収集とSQLiteによる差分検知の設計 — ローカルLLMを利用した自分専用ニュースbot開発記 #2 [Zenn_Python] | Summary by TechDistill

> Source: Zenn_Python
Execute Primary Source

// Problem

開発者は、ニュースbotを実用的なツールにする過程で、同じ記事を繰り返し通知してしまう問題に直面した。RSSフィードは実行のたびに全件を返却するため、既読状態を管理しなければ通知が重複する。また、以下の課題も考慮する必要があった。


  • RSS以外のソース(HTML等)を追加した際に、既存のロジックを書き換える手間が発生するリスク。
  • 差分検知の処理が、データ本体の保存やLLMの分析処理と密結合し、複雑化する懸念。
  • フィード形式の差異(IDの欠如など)による、判定精度の低下。

// Approach

開発者は、将来の拡張性と判定の高速化を両立するため、以下の設計アプローチを採用した。


  • Item dataclassによるインターフェースの固定。収集元がRSSでもHTMLでも、後続処理には同一の型を渡す設計とした。
  • SQLiteにおける2テーブル構成の採用。既読判定用の軽量なseen_itemsと、データ保持・キュー用のitemsを分離した。
  • 依存方向の一方向化。diff.pystorage.pyを呼ぶ構造を徹底し、循環参照を回避した。
  • 堅牢な収集ロジックの実装。feedparserで吸収しきれないID欠如に対し、linkをキーとするフォールバックを実装した。

// Result

開発者は、AWS What's Newフィードを用いて設計の正当性を検証した。1回目の実行で100件の新着を検知し、2回目の実行では新着0件となることを確認した。具体的な成果は以下の通りである。


  • seen_itemsテーブルに、item_keyとSHA-256によるcontent_hashが正しく記録された。
  • itemsテーブルに、LLM分析待ちの状態を示すpendingステータスでデータが蓄積された。
  • 設計通り、重複通知のない実用的な差分検知ロジックが実現できた。

Senior Engineer Insight

> インターフェースを先に固める設計思想が極めて実戦的だ。Item型による抽象化は、将来のHTML監視追加時のコストを劇的に下げる。また、DBを「判定用」と「キュー用」に分ける設計は、スケーラビリティと責務の分離の観点から高く評価できる。SQLiteを利用しているが、この設計であれば将来的にPostgreSQL等への移行も容易だろう。ただし、大規模トラフィックを扱う場合は、seen_itemsのインデックス設計や、DBのI/O負荷に注意が必要だ。

[ RELATED_KERNELS_DETECTED ]

cd ..

> System.About()

TechDistillは、膨大な技術記事から情報の真髄(Kernel)のみを抽出・提示します。