chat_classifier.py 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  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. prompt = f"问题: {query}\n\n请结合以下搜索结果,生成一个总结:\n"
  14. weighted_summaries = []
  15. weighted_contents = []
  16. for result in search_results:
  17. content = result["content"]
  18. content_summary = result["contentSummary"]
  19. score = result["score"]
  20. weighted_summaries.append((content_summary, score))
  21. weighted_contents.append((content, score))
  22. weighted_summaries.sort(key=lambda x: x[1], reverse=True)
  23. weighted_contents.sort(key=lambda x: x[1], reverse=True)
  24. prompt += "\n-- 加权内容摘要 --\n"
  25. for summary, score in weighted_summaries:
  26. prompt += f"摘要: {summary} | 相似度: {score:.2f}\n"
  27. prompt += "\n-- 加权内容 --\n"
  28. for content, score in weighted_contents:
  29. prompt += f"内容: {content} | 相似度: {score:.2f}\n"
  30. # 约束 AI 输出 JSON
  31. prompt += """
  32. 请基于上述内容生成一个总结,并返回 JSON 格式,结构如下:
  33. {
  34. "query": "<原始问题>",
  35. "summary": "<简洁总结>",
  36. "relevance_score": <0到1之间的小数,表示总结与问题的相关度>
  37. }
  38. 注意:
  39. - 只输出 JSON,不要额外解释。
  40. - relevance_score 数字越大,表示总结和问题越相关。
  41. """
  42. return prompt
  43. async def chat_with_deepseek(self, query, search_results):
  44. prompt = self.generate_summary_prompt(query, search_results)
  45. response = await fetch_deepseek_completion(
  46. model="DeepSeek-V3", prompt=prompt, output_type="json"
  47. )
  48. return response