jihuaqiang 2 часов назад
Родитель
Сommit
a9dc05d529

+ 4 - 3
examples/content_finder/content_finder.prompt

@@ -75,8 +75,9 @@ Skills 中的「AIGC 爬取计划生成」用于将寻找的结果接入AIGC平
 - 搜索 M × 2 条内容后,立即停止搜索
 - 对所有搜索到的内容获取画像后,立即进入筛选阶段
 - 筛选完成后,立即输出完整的推荐结果
-- 最终输出必须严格遵循 Skills 中「输出 JSON Schema」,所有的key都必须严格按照schema的约定
+- 最终输出必须严格遵循 Skills 中「输出结果指南」,所有的key都必须严格按照schema的约定
 - 输出已写入到 %output_dir% 目录下当次执行的trace_id目录内的output.json文件。
+- 检查output.json里面文件的格式和 Skills 中「输出结果指南」中的格式完全一致。
 - 输出已经存储到远程数据库中。
 - 输出结果已经接入AIGC平台。
 - 输出完整的推荐结果后,任务会自动进行反思和知识保存
@@ -88,8 +89,8 @@ Skills 中的「AIGC 爬取计划生成」用于将寻找的结果接入AIGC平
 - 不要陷入”一直获取画像”的循环
 - 获取足够画像后,立即进入筛选和输出阶段
 - 必须输出最终推荐结果,不能在中途停止
-- 所有数据必须来自 TOOLS 返回的 metadata,禁止编造
-- 最终输出必须严格遵循 Skills 中「输出 JSON Schema」,禁止自创/变体字段名或使用中文 key
+- 所有数据必须源于 TOOLS 返回,禁止捏造不存在的视频
+- 最终输出必须严格遵循 Skills 中「输出结果指南」,禁止自创/变体字段名或使用中文 key
 - 输出文件的保存地址严格按照要求,在 %output_dir% 目录下当次执行的trace_id目录内的output.json文件,不能随意放置。
 
 $user$

+ 4 - 4
examples/content_finder/db/schedule.py

@@ -23,8 +23,8 @@ def get_next_unprocessed_demand() -> Optional[Dict[str, Any]]:
     """
     联表查询 demand_content 和 demand_find_task,找到创建最早且未处理的 demand_content。
 
-    未处理定义:该 demand_content_id 下无 status 为 0/1/2 的任务
-    (即无待执行、执行中、成功的记录)
+    未处理定义:该 demand_content_id 在 demand_find_task 中尚无任何记录。
+    已有任务则视为已跑过(含失败),不再被定时任务选中。
 
     Returns:
         {"demand_content_id": int, "query": str} 或 None
@@ -35,7 +35,7 @@ def get_next_unprocessed_demand() -> Optional[Dict[str, Any]]:
     FROM demand_content dc
     WHERE NOT EXISTS (
         SELECT 1 FROM demand_find_task t
-        WHERE t.demand_content_id = dc.id AND t.status IN (%s, %s, %s)
+        WHERE t.demand_content_id = dc.id
     )
     ORDER BY dc.id ASC
     LIMIT 1
@@ -44,7 +44,7 @@ def get_next_unprocessed_demand() -> Optional[Dict[str, Any]]:
     try:
         conn = get_connection()
         with conn.cursor() as cur:
-            cur.execute(sql, (STATUS_PENDING, STATUS_RUNNING, STATUS_SUCCESS))
+            cur.execute(sql)
             row = cur.fetchone()
             return dict(row) if row else None
     except Exception as e:

+ 3 - 2
examples/content_finder/server.py

@@ -340,9 +340,10 @@ async def startup():
     logger.info(f"最大并发任务数: {MAX_CONCURRENT_TASKS}")
 
     # 配置定时任务(从 demand_content 联表查询未处理需求,无需外部 API)
-    scheduler.add_job(scheduled_task, "cron", minute="*/5")
+    scheduler.add_job(scheduled_task, "cron", minute="*/10")
     scheduler.start()
-    logger.info("定时任务已启动:每 5 分钟执行一次(从数据库获取待处理需求)")
+    asyncio.create_task(scheduled_task())
+    logger.info("定时任务已启动:启动后立即执行一次,之后每 10 分钟执行(从数据库获取待处理需求)")
 
     logger.info("服务启动完成")
     logger.info("=" * 60)

+ 1 - 1
examples/content_finder/skills/content_filtering_strategy.md

@@ -173,7 +173,7 @@
 
 #### 输出内容
 
-> **重要**:输出必须严格遵循本 Skills 中「输出 JSON Schema」定义的 JSON 结构,**禁止使用中文 key**,以下中文仅为语义说明,对应到 schema 中的英文 key。
+> **重要**:输出必须严格遵循本 Skills 中「输出结果指南」定义的 JSON Schema 结构,**禁止使用中文 key**,以下中文仅为语义说明,对应到 schema 中的英文 key。
 
 **每条内容(对应 `contents[].*`)包含**:
 - 内容基本信息 → `title`、`aweme_id`、`author_nickname`、`author_sec_uid`、`video_url`、`author_url`