丁云鹏 преди 1 месец
родител
ревизия
3067a61a74
променени са 2 файла, в които са добавени 71 реда и са изтрити 7 реда
  1. 44 4
      utils/google_ai_studio.py
  2. 27 3
      workers/video_insight_consumption_work.py

+ 44 - 4
utils/google_ai_studio.py

@@ -26,6 +26,33 @@ prompt = '''
 -需求详细query是将用户需求及视频背景信息总结为一段给AI模型的需求问题或指令;query格式为:我看了一段内容为“(视频50字简介)”的视频,我想了解“(具体需求)”
 -需求详细query是将用户需求及视频背景信息总结为一段给AI模型的需求问题或指令;query格式为:我看了一段内容为“(视频50字简介)”的视频,我想了解“(具体需求)”
 -总结12字内钩子话术,引导用户产生兴趣点击落地方案;产品落地形态应与产品钩子合理承接。
 -总结12字内钩子话术,引导用户产生兴趣点击落地方案;产品落地形态应与产品钩子合理承接。
 
 
+输出内容格式:
+output in JSON format with keys:
+需求排序序号(str)
+需求强烈程度分值(str)
+用户具体的需求描述(str)
+需求详细query(str)
+需求分类(str)
+推测出该点需求的原因(str)
+需求钩子话术(str)
+落地方案类型(str)
+落地方案形态描述(str)
+'''
+
+prompt1 = '''
+请帮助我做以下分析:
+我将提供给你视频,需要你模拟成中老年用户在视频消费平台观看这些视频。
+需要你充分发挥想象力,推测出中老年用户在观看这些视频过程中,可能产生什么具体的需求。并推测出该点需求的原因。
+-每项需求请根据观看者的需求强烈程度打分排序,越强烈分值越高,分值越高排序越前。分值范围:0-10分。
+-每项需求请分类。需求类型:比如问答信息获取类、视频推荐类、交流互动类等,类型字数请控制在10个字以内。
+-针对这些需求,平台有两部分功能:钩子及落地方案,钩子指在视频需求产生时,平台会有相关提示,提示用户进入落地方案;落地方案指针对用户需求,平台提供的相关信息、服务能力,解决用户的需求
+-针对这些需求,平台有几类解决方案,1. AI对话机器人;可提供问答信息获取服务;2. 内容推荐;推荐平台内相关视频内容;4. 二维码;可加入社群、关注公众号、小助手等;不限于此3种,可提出更多解决方案及落地页方式
+-需求是用户在观看过程中有欲望产生除观看外的动作,需求不要泛泛而谈,而是针对这个视频的强烈需求欲望。第一要与视频紧密相关,第二要包含用户真正的好奇心、交流欲等。第三需求范围不要大而空,要具体详细真实,如“了解适合老年人的旅游景点和路线”是不好的需求提取与描述,要根据视频说明具体的景点及具体出行行为
+-由于用户观看行为与注意力,需求最好与视频初始部分或整体内容相关;
+-合理为需求打分,如判断需求不强烈,请打低分;一个视频可都为低分需求
+-需求详细query是将用户需求及视频背景信息总结为一段给AI模型的需求问题或指令;query格式为:我看了一段内容为“(视频50字简介)”的视频,我想了解“(具体需求)”
+-总结12字内钩子话术,引导用户产生兴趣点击落地方案;产品落地形态应与产品钩子合理承接。
+
 输出内容格式:
 输出内容格式:
 output in JSON format with keys:
 output in JSON format with keys:
 需求排序序号(str)
 需求排序序号(str)
@@ -71,7 +98,7 @@ class GoogleAI(object):
                 logger.error(f'[内容分析] 视频下载失败, 跳过任务')
                 logger.error(f'[内容分析] 视频下载失败, 跳过任务')
                 os.remove(video_path)
                 os.remove(video_path)
                 logger.info(f"[内容分析] 文件已删除: {video_path}")
                 logger.info(f"[内容分析] 文件已删除: {video_path}")
-                return "[异常] 视频下载失败"
+                return "[异常] 视频下载失败",""
 
 
             video = genai.upload_file(path=video_path, mime_type='video/mp4')
             video = genai.upload_file(path=video_path, mime_type='video/mp4')
             while video.state.name == 'PROCESSING':
             while video.state.name == 'PROCESSING':
@@ -80,7 +107,7 @@ class GoogleAI(object):
             if video.state.name != 'ACTIVE':
             if video.state.name != 'ACTIVE':
                 genai.delete_file(name=video.name)
                 genai.delete_file(name=video.name)
                 os.remove(video_path)
                 os.remove(video_path)
-                return "[异常] 上传视频失败"
+                return "[异常] 上传视频失败", ""
             model = genai.GenerativeModel(
             model = genai.GenerativeModel(
                 model_name='gemini-2.0-flash',
                 model_name='gemini-2.0-flash',
                 generation_config=genai.GenerationConfig(response_mime_type='application/json'),
                 generation_config=genai.GenerationConfig(response_mime_type='application/json'),
@@ -100,13 +127,26 @@ class GoogleAI(object):
                 },
                 },
             )
             )
             text = orjson.loads(response.text.strip())
             text = orjson.loads(response.text.strip())
+
+            response2 = model.generate_content(
+                contents=[
+                    video,
+                    f'{prompt1}',
+                ],
+                stream=False,
+                request_options={
+                    'timeout': 600,
+                },
+            )
+            text2 = orjson.loads(response2.text.strip())
+
             genai.delete_file(name=video.name)
             genai.delete_file(name=video.name)
             os.remove(video_path)
             os.remove(video_path)
-            return text
+            return text,text2
         except Exception as e:
         except Exception as e:
             logger.error(f"[内容分析] 处理异常,异常信息{e}")
             logger.error(f"[内容分析] 处理异常,异常信息{e}")
             os.remove(video_path)
             os.remove(video_path)
-            return f"[异常] {e}"
+            return f"[异常] {e}",""
 
 
 
 
 if __name__ == '__main__':
 if __name__ == '__main__':

+ 27 - 3
workers/video_insight_consumption_work.py

@@ -55,7 +55,7 @@ class ConsumptionRecommend(object):
         api_key = os.getenv("VIDEO_INSIGHT_GEMINI_API_KEY")
         api_key = os.getenv("VIDEO_INSIGHT_GEMINI_API_KEY")
         # api_key = 'AIzaSyBFLCKMLX-Pf1iXoC2e_rMDLbNhNG23vTk'
         # api_key = 'AIzaSyBFLCKMLX-Pf1iXoC2e_rMDLbNhNG23vTk'
         logger.info(f"[处理] 使用的API_KEY:{api_key}")
         logger.info(f"[处理] 使用的API_KEY:{api_key}")
-        text = GoogleAI.run(api_key, video_url)
+        text,text1 = GoogleAI.run(api_key, video_url)
         if "[异常]" in text:
         if "[异常]" in text:
             content_video_data(json.dumps(task))
             content_video_data(json.dumps(task))
 
 
@@ -87,8 +87,32 @@ class ConsumptionRecommend(object):
         logger.info(f"{sql}")
         logger.info(f"{sql}")
         MysqlHelper.update_values(sql)
         MysqlHelper.update_values(sql)
 
 
-        # AliyunLogger.logging(str(video_id), orjson.dumps(text).decode())
-        logger.info(f"[处理] 写入数据库成功")
+        logger.info(f"[处理] text写入数据库成功")
+
+
+        # Parse JSON data
+        data = json.loads(orjson.dumps(text1).decode())
+        # Generate SQL insert statement
+        sql = """
+        INSERT INTO video_demand_score (
+            video_id, video_link, video_title, demand_score,reason
+        ) VALUES
+        """
+        # Add values for each entry
+        values = []
+        link = f"""https://admin.piaoquantv.com/cms/post-detail/{video_id}/detail"""
+        for entry in data:
+            value = f"""(
+                {video_id}, '{link}', '{video_title}', {entry.get('需求强烈程度分值', '')}, '{entry.get('理由', '')}'
+            )"""
+            values.append(value)
+        # Combine SQL statement and values
+        sql += ",\n".join(values) + ";"
+        # Print SQL statement
+        logger.info(f"{sql}")
+        MysqlHelper.update_values(sql)
+
+        logger.info(f"[处理] text1写入数据库成功")
 
 
 
 
 async def run():
 async def run():