Просмотр исходного кода

优先补缺口最大的广告、承接视频候选池 数量增加

wangyunpeng 12 часов назад
Родитель
Сommit
07c8559bdb

+ 9 - 0
examples/auto_put_ad_mini/execute_creation_once.py

@@ -613,6 +613,15 @@ def phase1_prepare(
             logger.info("[phase1] account=%d 无广告需补创意", account_id)
             logger.info("[phase1] account=%d 无广告需补创意", account_id)
             continue
             continue
 
 
+        # 2026-08-07:按素材缺口倒序,先补缺口最大的广告。
+        # 同人群包共享 landing 排重池,先处理小缺口广告可能抢占有限的 landing,
+        # 导致大缺口广告补不满。
+        ads = sorted(
+            ads,
+            key=lambda ad: target_creatives - int(ad.get("creative_count") or 0),
+            reverse=True,
+        )
+
         try:
         try:
             crowd_package = get_account_crowd_package(account_id)
             crowd_package = get_account_crowd_package(account_id)
         except Exception as e:
         except Exception as e:

+ 7 - 1
examples/auto_put_ad_mini/tools/video_recall.py

@@ -405,6 +405,7 @@ def _fetch_landing_video_pages(
     max_pages = max(1, int(max_pages or 1))
     max_pages = max(1, int(max_pages or 1))
     merged: List[LandingVideo] = []
     merged: List[LandingVideo] = []
     seen: set[int] = set()
     seen: set[int] = set()
+    effective_page_size = 0
     for page_num in range(1, max_pages + 1):
     for page_num in range(1, max_pages + 1):
         page = fetch_landing_videos(
         page = fetch_landing_videos(
             crowd_package=crowd_package,
             crowd_package=crowd_package,
@@ -414,12 +415,17 @@ def _fetch_landing_video_pages(
         )
         )
         if not page:
         if not page:
             break
             break
+        if effective_page_size == 0:
+            # 2026-08-07:服务端每页实际返回数可能小于请求的 page_size(实测最多 50),
+            # 用首页实际条数作为"末页判定"基准;否则 page_size>上限 时会在第 1 页
+            # 就满足 len(page)<page_size 提前 break,候选池只拉到 1 页。
+            effective_page_size = len(page)
         for video in page:
         for video in page:
             if video.video_id in seen:
             if video.video_id in seen:
                 continue
                 continue
             merged.append(video)
             merged.append(video)
             seen.add(video.video_id)
             seen.add(video.video_id)
-        if len(page) < page_size:
+        if len(page) < effective_page_size:
             break
             break
     logger.info(
     logger.info(
         "[video_recall] 分页合并 crowd=%r source=%r pages<=%d merged=%d",
         "[video_recall] 分页合并 crowd=%r source=%r pages<=%d merged=%d",