Browse Source

新增长尾词分析和原因

mrh 8 months ago
parent
commit
e77da7b299
3 changed files with 18 additions and 6 deletions
  1. 12 3
      src/ai/agent_product.py
  2. 4 3
      src/manager/manager_task.py
  3. 2 0
      src/models/product_model.py

+ 12 - 3
src/ai/agent_product.py

@@ -151,7 +151,8 @@ class LiteLLMService(LLMService):
     async def analyze(self, prompt: str) -> Union[dict, str]:
         llm_kwargs = {}
         if self.format_type == "json":
-            llm_kwargs["additional_kwargs"] = {"response_format": {"type": "json_object"}}
+            if 'deepseek-r' not in self.model:
+                llm_kwargs["additional_kwargs"] = {"response_format": {"type": "json_object"}}
 
         llm = LiteLLM(model=self.model, **llm_kwargs)
 
@@ -216,11 +217,19 @@ class AnalysisService:
 竞品数据:
 {competitor_data}
 ----
-我是日本站的亚马逊运营,我在给产品名称为 {product.basic_info.name} 选主要关键词,请根据以上 {len(competitor_data)} 个竞品数据,按以下规则分析:
+我是日本站的亚马逊运营,我在给产品名称为 {product.basic_info.name} 选主要关键词,我的产品信息如下:
+{product.basic_info.model_dump_json(indent=2)}
+
+请根据以上 {len(competitor_data)} 个竞品数据,按以下规则分析:
 - 选出搜索量在1万以上的相同关键词作为主要关键词{main_key_num}个。
 - 如果竞品的搜索量都不足1万,则从排名前十的关键词中筛选 {main_key_num} 个搜索量最大且相关性最强的词。
-- 根据我的产品基本信息,从竞品的主要信息和同类竞品的相似关键词中,筛选出最符合我产品的长尾关键词 tail_keys {tail_key_num} 个以上
 - 结合日本市场特点分析
+- 根据我的产品基本信息,从竞品的主要信息和同类竞品的相似关键词中,筛选出最符合我产品的长尾关键词 tail_keys {tail_key_num} 个以上
+
+筛选长尾词的示例:
+- 假设我的产品是电线保护,那么竞品关键词中,“隐藏排线管” 就不符合长尾词
+- 假设我的产品是“防老化、防动物咬”用途,你就不能在竞品数据中选择不属于我这个使用场景的长尾关键词。
+
 输出格式:
 {output_format}'''
 

+ 4 - 3
src/manager/manager_task.py

@@ -190,14 +190,13 @@ class ManagerTask:
             logger.info("开始执行竞品关键词分析...")
             
             # 初始化AI服务
-            llm_service = LiteLLMService(format_type='json')
+            # llm_service = LiteLLMService(model='openai/deepseek-reasoner',format_type='json')
+            llm_service = LiteLLMService(model='openai/deepseek-chat',format_type='json')
             analysis_service = AnalysisService(llm_service, self.db_mongo)
             
             
             # 执行实际分析
             analyze_result, prompt = await analysis_service.execute_analysis(product, dry_run=dry_run)
-            logger.info(f"提示词:{prompt}")
-            logger.info(f"分析结果: {json.dumps(analyze_result, indent=2, ensure_ascii=False)}")
             
             # 转换monthly_searches字段为整数
             def convert_monthly_searches(value):
@@ -221,6 +220,8 @@ class ManagerTask:
             
             # 更新产品分析结果
             product.competitor_analyze = AICompetitorAnalyzeMainKeywordsResult(**analyze_result)
+            logger.info(f"提示词:{prompt}")
+            logger.info(f"分析结果: {product.competitor_analyze.model_dump_json(indent=2)}")
             if dry_run:
                 # logger.info(f"{product.competitor_analyze.model_dump_json(indent=2)}")
                 return 

+ 2 - 0
src/models/product_model.py

@@ -132,6 +132,8 @@ class AICompetitorAnalyzeMainKeywordsResult(BaseModel):
     class TailKey(BaseModel):
         tail_key:str = Field(default=None, description="长尾关键词")
         monthly_searches:Optional[int] = Field(default=None, description="月搜索量")
+        reason:Optional[str] = Field(default=None, description="选择该长尾关键词原因")
+        
     results:Optional[List[AICompetitorAnalyzeMainKeywords]] = []
     supplement:Optional[str] = Field(
         default=None,