12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- from typing import List
- from applications.config import Chunk
- from applications.api import fetch_deepseek_completion
- class ChatClassifier:
- @staticmethod
- def generate_summary_prompt(query, search_results):
- """
- 生成总结的prompt。
- :param query: 问题
- :param search_results: 搜索结果列表,每个元素包含 'content', 'contentSummary', 'score'
- :return: 生成的总结prompt
- """
- prompt = f"问题: {query}\n\n请结合以下搜索结果,生成一个总结:\n"
- weighted_summaries = []
- weighted_contents = []
- for result in search_results:
- content = result["content"]
- content_summary = result["contentSummary"]
- score = result["score"]
- weighted_summaries.append((content_summary, score))
- weighted_contents.append((content, score))
- weighted_summaries.sort(key=lambda x: x[1], reverse=True)
- weighted_contents.sort(key=lambda x: x[1], reverse=True)
- prompt += "\n-- 加权内容摘要 --\n"
- for summary, score in weighted_summaries:
- prompt += f"摘要: {summary} | 相似度: {score:.2f}\n"
- prompt += "\n-- 加权内容 --\n"
- for content, score in weighted_contents:
- prompt += f"内容: {content} | 相似度: {score:.2f}\n"
- # 约束 AI 输出 JSON
- prompt += """
- 请基于上述内容生成一个总结,并返回 JSON 格式,结构如下:
- {
- "query": "<原始问题>",
- "summary": "<简洁总结>",
- "relevance_score": <0到1之间的小数,表示总结与问题的相关度>
- }
- 注意:
- - 只输出 JSON,不要额外解释。
- - relevance_score 数字越大,表示总结和问题越相关。
- """
- return prompt
- async def chat_with_deepseek(self, query, search_results):
- prompt = self.generate_summary_prompt(query, search_results)
- response = await fetch_deepseek_completion(
- model="DeepSeek-V3", prompt=prompt, output_type="json"
- )
- return response
|