mcpField
D
django-recommender-search-backend-patterns

django-recommender-search-backend-patterns

github.com/pproenca開発218124 回インストール11 週間前に更新
リポジトリ

django-recommender-search-backend-patterns について

推薦サービスと OpenSearch 検索向けに、48 のルールと Python テンプレートをまとめた Django バックエンドのスキルです。ML やサービス呼び出しの調整、障害対応、検索・フィード結果の提供を行うシステムの構築やレビューに役立ちます。

主な機能

  1. 018 分野にわたるバックエンドの 48 ルール
  2. 02非同期の下流ファンアウトと保護パターン
  3. 03OpenSearch のページネーションとクエリ指針
  4. 04推薦結果のブレンドとフォールバック戦略
  5. 05キャッシュ、耐障害性、API レスポンスのパターン
  6. 06調整可能な Python スキャフォールド 5 種

活用シーン

  1. 01Django の推薦エンドポイントのレビュー
  2. 02OpenSearch 検索・フィード API の設計
  3. 03下流呼び出しの過負荷や障害への対策
  4. 04ブレンドランキングと部分レスポンスの実装

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/pproenca/dot-skills --skill django-recommender-search-backend-patterns

インストール後、Claude Code で/django-recommender-search-backend-patternsを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

AGENTS.md
metadata.json
assets/templates/
_template.md
degraded_response.py.template
fanout_recommender_service.py.template
opensearch_search_view.py.template
redis_cache_with_stampede.py.template
result_blender.py.template
references/
_sections.md
api-compression-and-payload-shaping.md
api-cursor-pagination-in-drf.md
api-etag-and-cache-control-headers.md
api-serializer-perf-select-related.md
api-throttle-per-user-and-endpoint.md
async-cancel-on-client-disconnect.md
async-context-vars-for-request-scope.md
async-fire-and-forget-with-create-task.md
async-sync-to-async-orm.md
async-worker-model-uvicorn-vs-gunicorn.md
blend-anonymous-vs-personalized-paths.md
blend-cold-start-fallback.md
blend-dedup-across-sources.md
blend-mmr-for-diversity.md
blend-normalize-scores-across-sources.md
cache-negative-results.md
cache-redis-with-stampede-protection.md
cache-segment-keyed-isolation.md
cache-two-tier-process-and-redis.md
cache-version-on-model-deploy.md
orch-avoid-await-in-loop.md

詳細

実験的な Django レコメンダーと検索バックエンドのベストプラクティス

複数の結果を返すレコメンデーション(Personalize/Databricks/マイクロサービスへのファンアウト)と、OpenSearch を利用した検索/フィードを提供する Django バックエンドの実装パターンです。8 カテゴリーにわたる 48 のルールを、実行ライフサイクルへの影響度順に並べています。前のカテゴリーは、その後のすべてに連鎖的に影響します。

これは react-fetch-cache-patterns スキルのバックエンド版です。React はクライアント側のウォーターフォールとキャッシュを扱い、このスキルはサーバー側のファンアウト、下流サービスの保護、OpenSearch のクエリ設計、ML ブレンドのオーケストレーションを扱います。

適用する場面

  • AWS Personalize、Databricks Model Serving、社内マイクロサービスなど、ML 推論の下流サービスにファンアウトする Django ビューを構築またはレビューするとき
  • OpenSearch のクエリーエンドポイント(検索結果、無限スクロールのフィード、ファセット検索)を設計するとき
  • 複数のランカー出力をブレンドするレコメンデーションエンドポイントを実装するとき
  • 「下流サービスの障害時に Django バックエンドが遅い」または「Personalize のクォータを使い切った」という問題を調査するとき
  • 外部呼び出しにキャッシュ、リトライ、サーキットブレーカー、レート制限を追加するとき
  • 同期ビューと非同期ビューのどちらを使うか選択するとき、または uvicorn と gunicorn を設定するとき
  • ページネーション付きフィード、部分的な結果、縮退時のパス向けに DRF のレスポンス形式を設計するとき

優先度別のルールカテゴリー

#カテゴリー影響度プレフィックスルール数
1ファンアウトのオーケストレーションCRITICALorch-8
2外部サービスの保護CRITICALprotect-7
3OpenSearch クエリーパターンCRITICALsearch-8
4結果のブレンドとパーソナライズHIGHblend-5
5キャッシュ戦略HIGHcache-5
6レジリエンスと部分的な結果HIGHresilience-5
7非同期処理と並行性MEDIUM-HIGHasync-5
8API レスポンスの設計MEDIUMapi-5

クイックリファレンス

1. ファンアウトのオーケストレーション(CRITICAL)
  • orch-parallel-fanout-asyncio-gather — 独立した下流呼び出しには asyncio.gather を使い、逐次的に await しないでください
  • orch-return-exceptions-on-fanout — 1 つの呼び出しの失敗が gather 全体に影響しないよう、return_exceptions=True を指定してください
  • orch-propagate-request-deadline — リクエスト全体のレイテンシを制限するため、すべての下流呼び出しにデッドラインを渡してください
  • orch-reuse-async-clients — モジュールスコープで下流サービスごとに 1 つの httpx.AsyncClient を使い、リクエストごとに作成しないでください
  • orch-bounded-fanout-concurrency — asyncio.Semaphore でリクエストごとのファンアウト数を制限し、コネクションプールを保護してください
  • orch-no-blocking-in-async-view — 非同期ビューで同期 ORM/IO を使ってイベントループをブロックしないでください
  • orch-avoid-await-in-loop — for item in items: await ... は逐次実行です。内包表記と asyncio.gather を使ってください
  • orch-batch-with-bulk-endpoint — N 個の並列呼び出しではなくバルクエンドポイントを使い、バッチ処理には DataLoader パターンを使ってください
2. 外部サービスの保護(重大)
3. OpenSearch のクエリパターン(重大)
  • search-use-search-after-not-from — ページネーションを行うすべてのエンドポイントで、from/size の代わりに search_after カーソルを使用します
  • search-filter-source-fields — 表示するフィールドに _source を限定し、ソート可能なフィールドには docvalue_fields を使用します
  • search-bool-filter-vs-must — スコアリングしない句はキャッシュ可能な filter に、スコアリングする句は must に指定します
  • search-function-score-for-blending — function_score を使用して、パーソナライズのシグナルをエンジン内でブレンドします
  • search-stable-tiebreaker-sort — 安定したカーソルを実現するため、ソートの最後には必ず _id(または一意な数値フィールド)を指定します
  • search-alias-for-blue-green-reindex — エイリアス経由でクエリを実行し、インデックス名を直接指定しないでください
  • search-enable-request-cache — ヒットを返すクエリでは request_cache=true を指定し、リクエストボディを正規化します
  • search-shard-aware-routing — ルーティングキーを使用して、クエリごとのシャードへのファンアウトを制限します
4. 結果のブレンドとパーソナライズ(高)
  • blend-normalize-scores-across-sources — Personalize/Databricks/OpenSearch の結果をブレンドする前に、Min-Max または RRF でスコアを正規化します
  • blend-mmr-for-diversity — 上位 K 件の結果が同質化しないよう、最大限界関連性(MMR)を使用します
  • blend-dedup-across-sources — 正規アイテム ID で重複を排除し、複数のソースで裏付けられた結果にはボーナスを加えます
  • blend-cold-start-fallback — 新規ユーザーには人気順/編集者選定のフォールバックを用意し、段階的にパーソナライズします
  • blend-anonymous-vs-personalized-paths — 匿名ユーザーのトラフィックにはセグメントキー単位の低コストなキャッシュを使用し、ログインユーザーにのみ ML を適用します
5. キャッシュ戦略(高)
6. レジリエンスと部分的な結果(高)
7. 非同期処理と並行性(中〜高)
8. API レスポンスの設計(中)

使用方法

  1. カテゴリーの定義と影響の根拠については、references/_sections.md を開いてください
  2. 誤ったコードと正しいコードの例については、個別のルールファイルを読んでください(各ファイルは Python コードを含み、約 150~300 行です)
  3. すぐに使えるスキャフォールドについては、スキャフォールドテンプレート を参照してください
  4. AGENTS.md のナビゲーションドキュメント(自動生成)には、閲覧用の目次があります

スキャフォールドテンプレート

assets/templates/ に、用途に合わせてすぐに調整できる Python テンプレートが 5 つあります。

テンプレート用途
fanout_recommender_service.py.templatePersonalize/Databricks/マイクロサービスへの非同期ファンアウトクライアント。下流サービスごとのサーキットブレーカー、上限付きタイムアウト、部分的な結果の返却に対応します
opensearch_search_view.py.templateDRF ビュー + OpenSearch の search_after カーソル + function_score によるブレンド + _source フィルタリング
result_blender.py.templateスコアの正規化 + MMR による多様性確保 + 正規 ID の重複排除 + コールドスタート時のフォールバック
redis_cache_with_stampede.py.templateSETNX ロックとジッター付き TTL を備えた、スタンピード対策済みキャッシュ関数デコレーター
degraded_response.py.templateソースごとのステータスフラグとティアベースのフォールバックを備えた部分的な結果のエンベロープ

参照ファイル

ファイル説明
references/_sections.mdカテゴリーの定義、順序、影響の根拠、ティアの定義
assets/templates/_template.md新しいルールを作成するためのテンプレート
metadata.jsonバージョン、参照情報、概要

関連スキル

  • react-fetch-cache-patterns — React のデータ取得とキャッシュ(Suspense、クエリライブラリ、プリフェッチ)を扱うクライアント側の関連スキル
  • io-bound-data-processing — バッチおよびパイプラインのワークロード向け Python 非同期パターン
  • inngest-nextjs-patterns — サーバー側ステップ関数のワークフローパターン

コメント