Browse Source

新增AI提示词分析竞品,人类可读的输出格式

mrh 8 months ago
parent
commit
d39ac9063f
2 changed files with 39 additions and 6 deletions
  1. 3 1
      .clinerules
  2. 36 5
      src/ai/agent_product.py

+ 3 - 1
.clinerules

@@ -1 +1,3 @@
-重要:编码遵循高内聚、低耦合、可扩展,符合最佳程序设计,符合最佳实践
+重要:
+- 编码遵循高内聚、低耦合、可扩展,符合最佳程序设计,符合最佳实践。
+- 不要硬编码,必须要通用可复用、可扩展。

+ 36 - 5
src/ai/agent_product.py

@@ -11,6 +11,7 @@ from src.models.product_model import (
     TrafficKeywordResult, ProductImageInfo,
     SearchAmazoneKeyResult, ProductBaseInfo, Variant
 )
+from llama_index.llms.openai import OpenAI
 from src.manager.core.db_mongo import BaseMongoManager
 from utils.logu import get_logger
 from src.models.field_config import FieldConfig
@@ -93,7 +94,27 @@ def get_field_descriptions(
     """
     return field_config.get_model_fields(model_class, model_name)
 
-async def test_product_mongo():
+def format_output(fields_desc: dict, format_type: str = "json"):
+    """根据字段描述生成输出格式
+    
+    Args:
+        fields_desc: 字段描述字典
+        format_type: 输出格式类型(json/human)
+        
+    Returns:
+        格式化后的输出模板
+    """
+    if format_type == "human":
+        # 动态生成human-readable格式
+        lines = []
+        for field, desc in fields_desc.items():
+            lines.append(f"{desc}: {{{field}}}")
+        return "\n".join(lines)
+    else:
+        # JSON格式返回字段名到空值的映射
+        return [{k: "" for k in fields_desc.keys()}]
+
+async def test_product_mongo(format_type: str = "json"):
     db_mongo = BaseMongoManager()
     await db_mongo.initialize()
     product = await Product.find_one(Product.basic_info.name == "电线保护套")
@@ -104,8 +125,17 @@ async def test_product_mongo():
     product_info_desc = get_field_descriptions(ProductImageInfo)
     keyword_result_desc = get_field_descriptions(TrafficKeywordResult)
     
-    output_format = [{"asin": "", "main_key":"", "monthly_searches":"", "reason":""}]
-    # logger.info(f"competitor_data {competitor_data}")
+    # 定义输出字段描述
+    output_fields = {
+        "asin": "商品(竞品)编号",
+        "main_key": "主要关键词",
+        "monthly_searches": "月搜索量",
+        "reason": "选择理由"
+    }
+    format_type = 'human'
+    # 生成输出格式
+    output_format = format_output(output_fields, format_type)
+    
     logger.info(f"competitor_desc {competitor_desc}")
     logger.info(f"product_info_desc {product_info_desc}")
     logger.info(f"keyword_result_desc {keyword_result_desc}")
@@ -124,13 +154,14 @@ async def test_product_mongo():
 {output_format}
 '''
     text_qa_template = PromptTemplate(analyz_main_keyword_template_str)
-    logger.info(f"{text_qa_template.format(
+    formatted_output = text_qa_template.format(
         desc=(competitor_desc, product_info_desc, keyword_result_desc),
         product_name=product_name,
         competitor_data=competitor_data,
         competitor_count=len(competitor_data),
         output_format=output_format,
-)}")
+    )
+    logger.info(formatted_output)
 def main():
     asyncio.run(test_product_mongo())