t_mongo_template_service.py 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. import asyncio
  2. from src.models.template_model import Template, TemplateType
  3. from src.manager.template_manager import TemplateManager, TemplateService
  4. from src.manager.core.db_mongo import BaseMongoManager
  5. from bson import json_util
  6. import json
  7. from utils.logu import get_logger
  8. logger = get_logger('test', console_level='DEBUG')
  9. import asyncio
  10. import aiofiles
  11. import os
  12. import sys
  13. product_info_pipeline = [
  14. {
  15. '$match': {
  16. 'basic_info.name': '{{product_name}}'
  17. }
  18. },
  19. {
  20. '$project': {
  21. 'basic_info': 1,
  22. '_id': 0
  23. }
  24. }
  25. ]
  26. filter_competior_by_name = [
  27. {
  28. '$match': {
  29. 'basic_info.name': "{{ product_name }}"
  30. }
  31. },
  32. {
  33. '$project': {
  34. 'competitor_crawl_data': 1
  35. }
  36. }, {
  37. '$addFields': {
  38. 'competitors': {
  39. '$objectToArray': '$competitor_crawl_data'
  40. }
  41. }
  42. }, {
  43. '$unwind': '$competitors'
  44. }, {
  45. '$project': {
  46. '_id': 0,
  47. 'asin': '$competitors.k',
  48. 'product_info': {
  49. 'main_text': '$competitors.v.extra_result.product_info.main_text'
  50. },
  51. 'result_table': {
  52. '$map': {
  53. 'input': '$competitors.v.extra_result.result_table',
  54. 'as': 'item',
  55. 'in': {
  56. 'traffic_keyword': '$$item.traffic_keyword',
  57. 'monthly_searches': '$$item.monthly_searches'
  58. }
  59. }
  60. }
  61. }
  62. }
  63. ]
  64. async def create_or_update_template():
  65. manager = TemplateManager()
  66. await manager.initialize()
  67. template = await manager.create_or_update_template(
  68. name="product_info",
  69. collection_name="Product",
  70. template_str=json.dumps(product_info_pipeline),
  71. template_type=TemplateType.AGGREGATION,
  72. description="产品信息查询模板"
  73. )
  74. await manager.create_or_update_template(
  75. name="competitor_for_llm",
  76. collection_name="Product",
  77. template_str=json.dumps(filter_competior_by_name),
  78. template_type=TemplateType.AGGREGATION,
  79. description="竞品数据查询模板,筛选出主要信息"
  80. )
  81. logger.info(f"Created template: {template}")
  82. async def render():
  83. manager = TemplateManager()
  84. await manager.initialize()
  85. template = await manager.get_template("product_info")
  86. rendered_template = manager.render_template(template_str=template.template_str, context={"product_name": "电线保护套"})
  87. logger.info(f"product_info template: {rendered_template}")
  88. template = await manager.get_template("competitor_for_llm")
  89. rendered_template = manager.render_template(template_str=template.template_str, context={"product_name": "电线保护套"})
  90. logger.info(f"competitor_for_llm template: {rendered_template}")
  91. async def task():
  92. manager = TemplateManager()
  93. await manager.initialize()
  94. result_list = await manager.execute_template(
  95. name="product_info",
  96. context={"product_name": "电线保护套"},
  97. collection_name="Product"
  98. )
  99. logger.info(f"product_info result: {result_list}")
  100. result_list = await manager.execute_template(
  101. name="competitor_for_llm",
  102. context={"product_name": "电线保护套"},
  103. collection_name="Product"
  104. )
  105. logger.info(f"competitor_for_llm result: {result_list}")
  106. def main():
  107. asyncio.run(task())
  108. if __name__ == "__main__":
  109. main()