chat_classifier.py 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  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。交给AI根据搜索结果判断内容是否对回答问题有帮助,
  9. 并结合内容生成总结和判断是否能回答问题。
  10. :param query: 问题
  11. :param search_results: 搜索结果列表,每个元素包含 'content', 'contentSummary'
  12. :return: 生成的总结prompt
  13. """
  14. prompt = f"问题: {query}\n\n请结合以下搜索结果,生成一个总结:\n"
  15. weighted_summaries = []
  16. weighted_contents = []
  17. # 将所有搜索结果的摘要和内容按相似度排序
  18. for result in search_results:
  19. content = result["content"]
  20. content_summary = result["contentSummary"]
  21. weighted_summaries.append(content_summary)
  22. weighted_contents.append(content)
  23. # 拼接加权摘要和内容
  24. prompt += "\n-- 内容摘要 --\n"
  25. for summary in weighted_summaries:
  26. prompt += f"摘要: {summary}\n"
  27. prompt += "\n-- 内容 --\n"
  28. for content in weighted_contents:
  29. prompt += f"内容: {content}\n"
  30. # 约束 AI 输出 JSON
  31. prompt += """
  32. 请根据上述内容判断能否回答问题,并生成一个总结,返回 JSON 格式,结构如下:
  33. {
  34. "query": "<原始问题>",
  35. "summary": "<简洁总结>",
  36. "relevance_score": <0到1之间的小数,表示总结与问题的相关度>,
  37. "status": <判断能否回答这个问题,0代表不能回答,1代表可以回答>
  38. }
  39. 注意:
  40. - 只输出 JSON,不要额外解释。
  41. - relevance_score 数字越大,表示总结和问题越相关。
  42. - 请根据问题和给定的搜索结果内容,判断是否能回答该问题。返回一个 0 或 1 的 status,表示能否回答问题。
  43. """
  44. return prompt
  45. async def chat_with_deepseek(self, query, search_results):
  46. prompt = self.generate_summary_prompt(query, search_results)
  47. response = await fetch_deepseek_completion(
  48. model="DeepSeek-V3", prompt=prompt, output_type="json"
  49. )
  50. return response