# 最適化フィルタ仕様書 (v2.1) ## 1. システム目的 Gmailから取得した生データを、プログラムによる**「脊髄反射的処理(静的フィルタ)」**で徹底的に選別・加工し、人間と同等の判断が必要な**「思考的処理(LLM判定)」**へ渡すトークン量を極限まで削減する。 ## 2. 処理フロー概略 1. **静的除外**: ドメイン・キーワードによる即時廃棄。 2. **定型処理**: 認証・通知・配送状況などの「構造が既知」なメールの自動抽出。 3. **クレンジング**: HTML・署名・引用の完全除去による軽量化。 4. **LLM判定**: 絞り込まれたテキストのみを最小トークンで判定。 --- ## 3. 詳細仕様 ### 3.1. フェーズ1:静的フィルタ(LLMバイパス) 以下の条件に合致する場合、LLMステップを呼び出さず処理を完了させる。 * **ブラックリスト判定**: 以下のドメイン・送信元は即時廃棄(または「通知不要」としてDB記録)。 * `mail.aliexpress.com`, `instagram.com`, `facebookmail.com`, 各種メルマガ(件名に「PR」「メルマガ」を含むもの)。 * **認証・セッション系**: * **対象キーワード**: `認証コード`, `セキュリティコード`, `ログインのお知らせ`, `ワンタイムパスワード`. * **処理**: `From` と `Subject` を結合した文字列のみをLINE通知へ送り、終了。 * **重複排除(Deduplication)**: * 過去24時間以内に同一の「送信者+送り状番号(ヤマト等)」または「送信者+件名」を処理済みの場合、ステータス更新のみを行い、新規通知としては扱わない。 ### 3.2. フェーズ2:定型データ抽出(正規表現エンジン) LLMに文脈を読ませるのではなく、正規表現で特定の値を抜き出し、通知文を自己生成する。 * **配送状況(ヤマト運輸・Amazon等)**: * `[0-9]{4}-[0-9]{4}-[0-9]{4}`(伝票番号)を抽出。 * 「お届け予定」「完了」などのキーワードを抽出し、固定フォーマット化。 * **金融・決済(JAバンク・カード会社)**: * `[0-9,]+円`(金額)および `[0-9/]{5,10}`(日付)を抽出。 * 「支払金額:〇〇円、期日:〇〇」として構造化。 ### 3.3. フェーズ3:テキスト・プリプロセッサ(クレンジング) LLMに渡す場合でも、以下の処理を「必ず」事前に行う。 1. **HTML剥離**: `BeautifulSoup` 等を用い、タグ・スタイル・スクリプトを完全除去。 2. **ノイズ除去**: * `https?://\S+` → `[URL]` へ置換。 * 行頭の `>`(引用)および、空行・連続スペースの削除。 * 定型フッター(「本メールに心当たりがない場合」「配信停止は」等)をキーワードリストに基づき一括削除。 3. **ペイロード制限**: * `From`, `Subject`, `Body`(先頭300文字)をJSON形式にパックする。 --- ## 4. LLM判定フェーズ(最終関門) ### 4.1. プロンプト定義 出力トークンを最小化するため、LLMには**「1文字のランク」**のみを返させる。 * **Input**: `{"from": "...", "sub": "...", "body": "..."}` * **System Prompt**: 「このメールが吉田さんの業務(農業・システム開発)や資産保護において、即座に確認すべき『重要』なものか判定せよ。 * `1`: 即時通知が必要(重要・緊急) * `2`: 1日の終わりにまとめて通知(低緊急・要確認) * `3`: 通知不要 出力は数字1文字のみとせよ。」 --- ## 5. フィードバック・学習仕様 システムを改善し続けるためのデータ循環構造。 * **通知インターフェース**: LINE通知の下部に「不要」「毎日」のリンクを設置。 * **データベース(PostgreSQL)**: * `feedback_table`: `sender_domain`, `subject_pattern`, `user_decision` を記録。 * **動的更新**: `user_decision` が `ignore` になったドメインは、自動的に「3.1. ブラックリスト」へ同期される。 --- ## 6. 実装上の留意点(Antigravity等) * **タイムアウト対策**: 1通あたりの処理時間を最小化するため、DB照会はインデックスを貼った高速なものにすること。 * **エラーハンドリング**: Gmail APIの取得失敗時や、LLMが数字以外を返した際のデフォルト値は「通知(1)」として、重要なメールの消失を防ぐ。 --- 仕様書は以上となります。Antigravityでの実装において、具体的なPythonコードの記述や、LINE Botとの連携部分でサポートが必要になりましたら、いつでもお声がけください。 次は何をお手伝いしましょうか?