import json from openai import OpenAI from service.search_service import query_data def generate_summary_prompt(query, search_results): """ 生成总结的prompt。 :param query: 问题 :param search_results: 搜索结果列表,每个元素包含 'content', 'contentSummary', 'score' :return: 生成的总结prompt """ # 为了让AI更好地理解,我们将使用以下格式构建prompt: prompt = f"问题: {query}\n\n请结合以下搜索结果,生成一个总结:\n" # 先生成基于相似度加权的summary 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中 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进行总结 prompt += "\n基于上述内容,请帮我生成一个简洁的总结。" return prompt def generate_summary_query(query, search_results): prompt = generate_summary_prompt(query, search_results) return chat_with_deepseek(prompt) def chat_with_deepseek(prompt, model="deepseek-chat", max_tokens=8192, temperature=0.7): """ 使用OpenAI兼容方式调用DeepSeek API 参数: prompt (str): 用户输入的提示文本 model (str): 使用的模型,默认为deepseek-chat max_tokens (int): 生成的最大token数 temperature (float): 控制生成随机性的参数(0-1) 返回: str: API的回复内容 """ # 初始化客户端,指定DeepSeek的API端点 client = OpenAI( api_key='sk-cfd2df92c8864ab999d66a615ee812c5', base_url="https://api.deepseek.com/v1", # DeepSeek的API端点 ) try: # 创建聊天完成请求 response = client.chat.completions.create( model=model, messages=[{"role": "user", "content": prompt}], max_tokens=max_tokens, temperature=temperature, stream=False ) # 返回回复内容 return response.choices[0].message.content except Exception as e: return f"发生异常: {str(e)}" if __name__ == '__main__': query = '帮我查询一些AI工具' search_results = query_data(query, [1,2]) print(generate_summary_query(query, search_results))