pipeline.py 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. """
  2. @author: luojunhui
  3. prompt pipeline
  4. """
  5. import json
  6. from applications.ai import kimi_ai, tly_ai
  7. # 第一步先把问题裂变
  8. def question_fission(query):
  9. """
  10. 问题裂变
  11. :param query
  12. :return:
  13. """
  14. prompt = f"""
  15. - 你是一个提问裂变器,能够将用户提供的搜索query裂变成4个不同方向的提问,以便获取更加全面的搜索结果。
  16. - 根据搜索query:'{query}',生成5个在主题一致但方向有所差别的提问。
  17. - 确保生成的提问简洁明了,直接输出5个问句。
  18. - 以JSON格式输出5个问句,每个问句可以分别引用。
  19. 你拥有以下技能
  20. - 技能1:语义理解与转换
  21. 1. 理解用户提供的搜索query的核心主题和意图。
  22. 2. 在保持主题一致的前提下,生成不同方向的提问。
  23. - 技能2:提问生成
  24. 1. 根据原始query,生成5个不同方向的提问。
  25. 2. 确保每个提问都能引导用户获得不同的搜索结果。
  26. - 技能3:多领域适应
  27. 1. 能够处理任何主题的搜索query。
  28. 2. 生成的提问适用于各种搜索引擎和信息检索场景。
  29. 限制
  30. - 每次生成的提问数量固定为5个。
  31. - 不添加额外的说明或解释,直接输出5个问句。
  32. - 不考虑特定的关键词或排除某些关键词。
  33. - 以JSON格式输出问句,每个问句可以分别引用。
  34. 输出格式模板
  35. key, value分别是
  36. "question1": "问句1",
  37. "question2": "问句2",
  38. "question3": "问句3",
  39. "question4": "问句4",
  40. "question5": "问句5"
  41. """
  42. # print(prompt)
  43. question_dict = kimi_ai(prompt=prompt)
  44. print(type(question_dict))
  45. try:
  46. res = json.loads(question_dict.replace("'", '"'))
  47. except:
  48. res = json.loads(question_dict)
  49. return res
  50. # 第二步搜索内容
  51. def search_materials(question):
  52. """
  53. 信息搜索
  54. :param question:
  55. :return:
  56. """
  57. response = tly_ai(prompt=question)
  58. return response
  59. def generate_text(question):
  60. """
  61. 使用kimi生成文章
  62. :param question:
  63. :return:
  64. """
  65. prompt = f"""
  66. 通过给到你的这个问题:'{question}',
  67. 生成一篇小文章,文章需要有逻辑,有参考意义
  68. """
  69. text = kimi_ai(prompt)
  70. return text.replace("\n", "").replace("*", "").replace("#", "").replace(":", "").replace('"', "").replace("'", "")
  71. # 第三步,清洗,筛选,总结, 生成文章
  72. def summary_articles(materials):
  73. """
  74. 从材料中清洗,总结,并且生成文章
  75. :param materials:
  76. :return:
  77. """
  78. if materials:
  79. materials_ = json.loads(materials.replace("\\", ""))
  80. keys = []
  81. for key in materials_:
  82. keys.append(key)
  83. prompt = f"""
  84. # Role:信息萃取师
  85. - 介绍:作为信息萃取师,我拥有从海量信息源中进行细致分析的能力,能找出最核心的信息点,并对其真实性进行评估。我对复杂问题的处理方式是逻辑思考者的方式,依据事实证据而非容易出错的直觉来形成结论。此外,我擅长以专业的写作技巧,有条理地组织思想和观点,确保所写内容引人入胜,并且绝不枯燥。
  86. ## Task:
  87. - 背景:用户有各种问题想通过搜索引擎获取答案,但网络世界大量信息往往含有噪音,比如虚假、夸大、不准确等情况。
  88. - 目标:筛选出可信信息源,并对用户的问题进行准确、专业、有效的结构化回复,且不会忽略查询的任何细节。
  89. ## Skills:
  90. - 信息分析:根据用户的问题,从大量信息源中筛选出最关键的信息,并对其真实性进行评估。
  91. - 逻辑思考:以事实证据为依据,而非直觉,对复杂问题进行推理和得出结论。
  92. - 专业写作:有条理地组织思想和特殊性,确保所写内容引人入胜,语言流畅而不乏味。
  93. ## Rules:
  94. - 操作指南:根据用户的问题,使用中文编写清晰、简洁且准确的回答。
  95. - 限制要求:不要忽略问题的任何细节,从给定的参考资料中引述的信息需要经过论证并且不能照搬原话。
  96. - 工作流程:
  97. 1. 根据给定的参考资料(以数字索引表示)进行阅读和分析:
  98. 材料1 标题: '{keys[0]}', 材料: '{materials_[keys[0]]}' ,
  99. 材料1 标题: '{keys[1]}', 材料: '{materials_[keys[1]]}' ,
  100. 材料1 标题: '{keys[2]}', 材料: '{materials_[keys[2]]}' ,
  101. 材料1 标题: '{keys[3]}', 材料: '{materials_[keys[3]]}' ,
  102. 材料1 标题: '{keys[4]}', 材料: '{materials_[keys[4]]}'
  103. 2. 创作回答:依照专业的写作技巧,使用汉语有条理地组织思想,写出高质量的文章
  104. ## OutputFormat:
  105. 返回json格式,key, value如下
  106. "title": 总结上述材料的标题,
  107. "text": 编写的文章,文章字数在1000字以上。
  108. """
  109. response = kimi_ai(prompt=prompt)
  110. try:
  111. response = json.loads(response.replace("\n", ""))
  112. except:
  113. response = json.loads(response.replace("'", '"'))
  114. return response['title'], response['text']
  115. else:
  116. return "ai_title", "ai_text"