chat_classifier.py 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. from typing import List
  2. from applications.config import Chunk
  3. from applications.api import fetch_deepseek_completion
  4. class ChatClassifier:
  5. @staticmethod
  6. def generate_summary_prompt(query, search_results):
  7. """
  8. 生成总结的prompt。
  9. :param query: 问题
  10. :param search_results: 搜索结果列表,每个元素包含 'content', 'contentSummary', 'score'
  11. :return: 生成的总结prompt
  12. """
  13. # 为了让AI更好地理解,我们将使用以下格式构建prompt:
  14. prompt = f"问题: {query}\n\n请结合以下搜索结果,生成一个总结:\n"
  15. # 先生成基于相似度加权的summary
  16. weighted_summaries = []
  17. weighted_contents = []
  18. for result in search_results:
  19. content = result["content"]
  20. content_summary = result["contentSummary"]
  21. score = result["score"]
  22. # 加权内容摘要和内容
  23. weighted_summaries.append((content_summary, score))
  24. weighted_contents.append((content, score))
  25. # 为了生成更准确的总结,基于相似度加权内容和摘要
  26. weighted_summaries.sort(key=lambda x: x[1], reverse=True) # 按相似度降序排列
  27. weighted_contents.sort(key=lambda x: x[1], reverse=True) # 按相似度降序排列
  28. # 将加权的摘要和内容加入到prompt中
  29. prompt += "\n-- 加权内容摘要 --\n"
  30. for summary, score in weighted_summaries:
  31. prompt += f"摘要: {summary} | 相似度: {score:.2f}\n"
  32. prompt += "\n-- 加权内容 --\n"
  33. for content, score in weighted_contents:
  34. prompt += f"内容: {content} | 相似度: {score:.2f}\n"
  35. # 最后请求AI进行总结
  36. prompt += "\n基于上述内容,请帮我生成一个简洁的总结。"
  37. return prompt
  38. async def chat_with_deepseek(self, query, search_results):
  39. prompt = self.generate_summary_prompt(query, search_results)
  40. response = await fetch_deepseek_completion(model="DeepSeek-V3", prompt=prompt)
  41. return response