My Personal Library は、私の個人用資料整理パイプラインです。osmos のブックマークとメモを README に保存するところから始まりました。現在は uv で管理する Python を使用し、ローカルでの処理検証と GitHub Actions の実行を完了して、非公開リポジトリへの保存も確認しています。ただし、稼働していることは、すべてのブックマークを処理済みであることや、すべての取得元に対応できることを意味しません。
着想は Nekonull の LLM とブックマーク整理に関する記事 から得ました。リンクだけを残すのではなく、後から本文を検索し、要点を振り返れるようにすることが目的です。公開リポジトリでは処理コードと説明を管理し、完全な出力は別の非公開リポジトリに保存します。成功した項目からタイトル、出典、要約だけを選び、このサイトの読書ノートに同期して手書きのノートと一緒に表示します。元の全文、内部処理状態、認証情報は公開しません。
リンクから検索できる資料へ
本文の取得にはまず Jina Reader を試し、サービスが利用できない場合は直接抽出を試します。この代替経路は実際の記事で検証済みです。取得に成功した本文全体を Markdown として保存し、qwen-task に設定されたサービスで箇条書きの要点と一文の要約を生成します。モデルは unsloth/Qwen3.8-27B-NVFP4 に固定しています。要約は振り返りの補助であり、本文の代わりでも、取得できなかった内容の補完でもありません。
JSON に各 URL の処理結果を記録し、URL の重複排除で同じ資料の重複生成を防ぎます。再実行では成功済みの項目をスキップし、失敗項目は理由を保存して後から再試行できます。SQLite の全文索引で保存済み資料をキーワード検索でき、中国語の検索も実際に検証しています。これは RAG ではなく、資料に含まれない問いへの回答は生成しません。
GitHub Actions は push、定期実行、手動実行に対応しています。定期実行は毎時一回、各バッチ最大 12 件を処理する設定で、未処理のブックマークを順に処理します。週次ダイジェストは、同じ入力記録と対象期間なら同じ結果になる規則で生成し、毎回モデルに再編集を任せません。ワークフローの完了と個々の資料の処理結果は別に記録します。ワークフローが成功しても、全項目が成功したことにはなりません。
失敗の記録と保存の限界
アクセスが遮断されたページ、ログインが必要なページ、CAPTCHA が表示されるページで本文を取得できなければ、失敗として記録します。モデルの呼び出しも失敗することがあり、実際の運用でも要約の失敗が記録されています。これらを処理完了とは扱いません。タイトルから本文を推測したり、生成した要約で取得失敗を隠したりしません。再試行はもう一度処理する機会であり、アクセス制限の回避や成功を保証するものではありません。
Markdown に残るのは抽出時点の本文のスナップショットです。元のサイトの永続性や、画像、操作機能、その後の更新まで含む完全な複製は保証しません。Wayback 保存は明示的に有効化した場合だけ可能な範囲で試します。今回の送信は利用不可という結果で、独立したバックアップの成功は確認できていません。出力先を非公開にしても処理全体がオフラインになるわけではなく、外部の抽出・要約サービスに渡す資料が自身のプライバシー要件に適合するか確認が必要です。