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