1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- 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
|