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。交给AI根据搜索结果判断内容是否对回答问题有帮助, 并结合内容生成总结和判断是否能回答问题。 :param query: 问题 :param search_results: 搜索结果列表,每个元素包含 'content', 'contentSummary' :return: 生成的总结prompt """ prompt = f"问题: {query}\n\n请结合以下搜索结果,生成一个总结:\n" weighted_summaries = [] weighted_contents = [] # 将所有搜索结果的摘要和内容按相似度排序 for result in search_results: content = result["content"] content_summary = result["contentSummary"] weighted_summaries.append(content_summary) weighted_contents.append(content) # 拼接加权摘要和内容 prompt += "\n-- 内容摘要 --\n" for summary in weighted_summaries: prompt += f"摘要: {summary}\n" prompt += "\n-- 内容 --\n" for content in weighted_contents: prompt += f"内容: {content}\n" # 约束 AI 输出 JSON prompt += """ 请根据上述内容判断能否回答问题,并生成一个总结,返回 JSON 格式,结构如下: { "query": "<原始问题>", "summary": "<简洁总结>", "relevance_score": <0到1之间的小数,表示总结与问题的相关度>, "status": <判断能否回答这个问题,0代表不能回答,1代表可以回答> } 注意: - 只输出 JSON,不要额外解释。 - relevance_score 数字越大,表示总结和问题越相关。 - 请根据问题和给定的搜索结果内容,判断是否能回答该问题。返回一个 0 或 1 的 status,表示能否回答问题。 """ 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