t_odm_promting_config.py 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. from src.manager.core.db_mongo import BaseMongoManager
  2. from utils.file import save_to_file, read_file
  3. from config.celery import app
  4. # Remove direct task imports
  5. from celery.result import AsyncResult
  6. from src.models.product_model import (
  7. Product,CompetitorCrawlData,AICompetitorAnalyzeMainKeywords,
  8. SearchAmazoneKeyResult, ProductBaseInfo, Variant,AICompetitorAnalyzeMainKeywordsResult,
  9. AIAnalyzeCompare
  10. )
  11. from src.models.field_config import FieldConfig
  12. from src.models.config_model import (UserConfig, AIPromptConfig)
  13. from utils.logu import get_logger
  14. from upath import UPath
  15. logger = get_logger('test')
  16. from datetime import datetime
  17. from typing import Dict, List, Optional, Any
  18. from pydantic import Field, BaseModel
  19. from beanie import Document, BackLink, Link
  20. import asyncio
  21. import aiofiles
  22. import os
  23. import sys
  24. def get_ai_prompt_config():
  25. ai_marketting_prompt_config = AIPromptConfig(
  26. name="营销文案",
  27. introduce="没有变量",
  28. template="""
  29. 我是日本站的亚马逊运营,帮我给我的产品分析出最佳文案。
  30. 请根据以上数据,按以下规则分析:
  31. - 结合日本市场特点分析
  32. """,
  33. )
  34. ai_competitor_promting = AIPromptConfig(
  35. name="竞品和长尾词分析",
  36. introduce="没有变量",
  37. template="""
  38. 我是日本站的亚马逊运营,我在给我的产品选主要关键词和长尾关键词。
  39. 请根据以上竞品数据,按以下规则分析:
  40. - 选出搜索量在1万以上的相同关键词作为主要关键词3个。
  41. - 如果竞品的搜索量都不足1万,则从排名前十的关键词中筛选3个搜索量最大且相关性最强的词。
  42. - 结合日本市场特点分析
  43. - 根据我的产品基本信息,从竞品的主要信息和同类竞品的相似关键词中,筛选出最符合我产品的长尾关键词 tail_keys 12 个(如果存在的话)。
  44. 筛选长尾词的示例:
  45. - 假设我的产品是电线保护,那么竞品关键词中,“隐藏排线管” 就不符合长尾词
  46. - 假设我的产品是“防老化、防动物咬”用途,你就不能在竞品数据中选择不属于我这个使用场景的长尾关键词。
  47. """,
  48. )
  49. return ai_marketting_prompt_config,ai_competitor_promting
  50. async def create_user():
  51. db_mongo = BaseMongoManager()
  52. await db_mongo.initialize()
  53. user = await UserConfig.find_one(UserConfig.user_name == "test_user")
  54. if user:
  55. return user
  56. user = UserConfig(
  57. user_name="test_user",
  58. )
  59. await user.save()
  60. async def add_promt():
  61. db_mongo = BaseMongoManager()
  62. await db_mongo.initialize()
  63. await create_user()
  64. user = await UserConfig.find_one(UserConfig.user_name == "test_user")
  65. p = AIPromptConfig(
  66. name="竞品和长尾词分析-变量",
  67. template="""
  68. 我是日本站的亚马逊运营,我在给产品名称为 {product_name} 选主要关键词和长尾关键词。
  69. 请根据以上 {len_competitor_data} 个竞品数据,按以下规则分析:
  70. - 选出搜索量在1万以上的相同关键词作为主要关键词 {main_key_num} 个。
  71. - 如果竞品的搜索量都不足1万,则从排名前十的关键词中筛选 {main_key_num} 个搜索量最大且相关性最强的词。
  72. - 结合日本市场特点分析
  73. - 根据我的产品基本信息,从竞品的主要信息和同类竞品的相似关键词中,筛选出最符合我产品的长尾关键词 tail_keys {tail_key_num} 个以上
  74. 筛选长尾词的示例:
  75. - 假设我的产品是电线保护,那么竞品关键词中,“隐藏排线管” 就不符合长尾词
  76. - 假设我的产品是“防老化、防动物咬”用途,你就不能在竞品数据中选择不属于我这个使用场景的长尾关键词。
  77. """
  78. )
  79. p1,p2 = get_ai_prompt_config()
  80. await user.add_prompting(p)
  81. await user.add_prompting(p1)
  82. await user.add_prompting(p2)
  83. # 主要是用于查找列表元素。但是返回字典,不够友好
  84. async def find_demo():
  85. db_mongo = BaseMongoManager(db_name='test')
  86. await db_mongo.initialize()
  87. user = await UserConfig.find_one(UserConfig.user_name == "test_user")
  88. # 查找所有包含"营销文案"配置的用户
  89. pipeline = [
  90. {
  91. "$match": {
  92. "prompting.marketing.name": "营销文案"
  93. }
  94. },
  95. {
  96. "$project": {
  97. "results": {
  98. "$filter": {
  99. "input": "$prompting.marketing",
  100. "as": "item",
  101. "cond": { "$eq": ["$$item.name", "营销文案"] }
  102. }
  103. }
  104. }
  105. }
  106. ]
  107. # 使用 aggregate 方法执行管道
  108. result = await UserConfig.aggregate(pipeline).to_list()
  109. logger.info(f"{result}")
  110. pipeline = [
  111. {
  112. "$match": {
  113. "prompting.competitor.name": "竞品和长尾词分析"
  114. }
  115. },
  116. {
  117. "$project": {
  118. "results": {
  119. "$slice": [
  120. {
  121. "$filter": {
  122. "input": "$prompting.competitor",
  123. "as": "item",
  124. "cond": { "$eq": ["$$item.name", "竞品和长尾词分析"] }
  125. }
  126. },
  127. 1
  128. ]
  129. }
  130. }
  131. }
  132. ]
  133. # 使用正确的管道结构执行聚合查询
  134. result = await UserConfig.aggregate(pipeline).to_list()
  135. logger.info(f"{result}")
  136. def main():
  137. asyncio.run(add_promt())
  138. if __name__ == "__main__":
  139. main()