ai-tech-fulltext-fetch について
ai-tech-rss-fetchが使うSQLiteデータベースからRSS記事の本文を取得するスキルです。RSSメタデータ同期後の、増分実行と再試行に対応した全文取得処理に適しています。
主な機能
- 01既存のRSS記事から本文を取得
- 02canonical URLを優先
- 03HTMLパーサーにフォールバック
- 04記事ごとに抽出結果を保存
- 05増分同期と再試行に対応
活用シーン
- 01既存RSS記事に全文を追加
- 02記事本文を個別に取得
- 03本文の抽出状態を確認
- 04分割、インデックス化、要約用のテキストを準備
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ tiangong-ai/ agent-skills --skill ai-tech-fulltext-fetchインストール後、Claude Code で/ai-tech-fulltext-fetchを入力して読み込まれたか確認します。
詳細
AI Tech 全文取得
主な目的
ai-tech-rss-fetchがデータを登録したものと同じ SQLite データベースを再利用します。- 各 RSS エントリーの URL から記事本文を取得します。
- 抽出ステータスと本文を、関連テーブル(
entry_content)に保存します。 - 重複する全文レコードを作成せずに、差分実行と安全な再試行をサポートします。
実行条件
ai_rss.dbにすでに存在するエントリーの記事本文/全文を取得するようにリクエストされた場合。- RSS メタデータの同期後に、第 2 段階のパイプラインを構築するようにリクエストされた場合。
- 既存の
entries行を対象に、安定して再開可能なキューが必要な場合。 - チャンク化、インデックス作成、要約の前に、URL を基準に全文を保存する必要がある場合。
ワークフロー
- 最初にメタデータテーブルが存在することを確認します。
- このスキルを使う前に
ai-tech-rss-fetchを実行し、SQLite のentriesにデータを登録します。 - このスキルには
entriesテーブルが必要です。 - 複数エージェントのランタイムでは、
ai-tech-rss-fetchで使用したものと同じ絶対パスを DB に指定します。
export AI_RSS_DB_PATH="/absolute/path/to/workspace-rss-bot/ai_rss.db"
- 全文テーブルを初期化します。
python3 scripts/fulltext_fetch.py init-db --db "$AI_RSS_DB_PATH"
- 全文の差分同期を実行します。
- デフォルトでは、全文がない行、または現在失敗している行を取得します。
python3 scripts/fulltext_fetch.py sync \
--db "$AI_RSS_DB_PATH" \
--limit 50 \
--timeout 20 \
--min-chars 300
- 必要に応じて、1 件のエントリーを取得します。
python3 scripts/fulltext_fetch.py fetch-entry \
--db "$AI_RSS_DB_PATH" \
--entry-id 1234
- 抽出されたコンテンツの状態を確認します。
python3 scripts/fulltext_fetch.py list-content \
--db "$AI_RSS_DB_PATH" \
--status ready \
--limit 100
データ仕様
- 既存の
entriesテーブルから読み取る項目:id、canonical_url、url、title。
entry_contentテーブルに書き込む項目:entry_id(一意で、エントリーごとに 1 行)source_url、final_url、http_statusextractor(trafilatura、html-parser、またはnone)content_text、content_hash、content_lengthstatus(readyまたはfailed)retry_count、last_error、タイムスタンプ。
抽出と更新のルール
- URL の優先順位:まず
canonical_urlを使用し、ない場合はurlを使用します。 - 依存関係が利用可能な場合は
trafilaturaによる抽出を試み、失敗した場合は組み込みの HTML パーサーを使用します。 entry_idを基準に Upsert します。- 成功時:全文を書き込み/更新し、
retry_countを0にリセットします。 - 失敗し、既存の
readyコンテンツがある場合:古いテキストを保持し、ステータスをreadyのままにして、last_errorを記録します。 - 失敗し、
readyのコンテンツがない場合:ステータスをfailedにし、retry_countを増やして、next_retry_atを設定します。
- 成功時:全文を書き込み/更新し、
- 失敗時の再試行は
--max-retries(デフォルトは3)で制限され、--retry-backoff-minutesに従って間隔を空けて行われます。 --forceを指定すると、すでにreadyの行も再取得できます。--refetch-days Nを指定すると、N日より前の行を更新できます。
設定可能なパラメーター
--dbAI_RSS_DB_PATH(複数エージェントのランタイムでは絶対パスを推奨)--limit--force--only-failed--refetch-days--oldest-first--timeout--max-bytes--min-chars--max-retries--retry-backoff-minutes--user-agent--disable-trafilatura--fail-on-errors
エラー処理
entriesテーブルがない場合:具体的な対処方法を示すエラーを返し、停止します。- ネットワーク/HTTP/解析エラーの場合:失敗状態を保存し、ほかのエントリーの処理を続行します。
- テキスト以外のコンテンツタイプ(PDF/画像/音声/動画/zip)の場合:該当エントリーを失敗として記録します。
- 抽出結果が短すぎる場合(
--min-chars):品質の低い本文を避けるため、失敗として扱います。
参照
references/schema.mdreferences/fetch-rules.md
アセット
assets/config.example.json
スクリプト
scripts/fulltext_fetch.py
コメント
Markdown 対応