deepseek_utils.py 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. import json
  2. from openai import OpenAI
  3. from service.search_service import query_data
  4. def generate_summary_prompt(query, search_results):
  5. """
  6. 生成总结的prompt。
  7. :param query: 问题
  8. :param search_results: 搜索结果列表,每个元素包含 'content', 'contentSummary', 'score'
  9. :return: 生成的总结prompt
  10. """
  11. # 为了让AI更好地理解,我们将使用以下格式构建prompt:
  12. prompt = f"问题: {query}\n\n请结合以下搜索结果,生成一个总结:\n"
  13. # 先生成基于相似度加权的summary
  14. weighted_summaries = []
  15. weighted_contents = []
  16. for result in search_results:
  17. content = result['content']
  18. content_summary = result['contentSummary']
  19. score = result['score']
  20. # 加权内容摘要和内容
  21. weighted_summaries.append((content_summary, score))
  22. weighted_contents.append((content, score))
  23. # 为了生成更准确的总结,基于相似度加权内容和摘要
  24. weighted_summaries.sort(key=lambda x: x[1], reverse=True) # 按相似度降序排列
  25. weighted_contents.sort(key=lambda x: x[1], reverse=True) # 按相似度降序排列
  26. # 将加权的摘要和内容加入到prompt中
  27. prompt += "\n-- 加权内容摘要 --\n"
  28. for summary, score in weighted_summaries:
  29. prompt += f"摘要: {summary} | 相似度: {score:.2f}\n"
  30. prompt += "\n-- 加权内容 --\n"
  31. for content, score in weighted_contents:
  32. prompt += f"内容: {content} | 相似度: {score:.2f}\n"
  33. # 最后请求AI进行总结
  34. prompt += "\n基于上述内容,请帮我生成一个简洁的总结。"
  35. return prompt
  36. def generate_summary_query(query, search_results):
  37. prompt = generate_summary_prompt(query, search_results)
  38. return chat_with_deepseek(prompt)
  39. def chat_with_deepseek(prompt, model="deepseek-chat", max_tokens=8192, temperature=0.7):
  40. """
  41. 使用OpenAI兼容方式调用DeepSeek API
  42. 参数:
  43. prompt (str): 用户输入的提示文本
  44. model (str): 使用的模型,默认为deepseek-chat
  45. max_tokens (int): 生成的最大token数
  46. temperature (float): 控制生成随机性的参数(0-1)
  47. 返回:
  48. str: API的回复内容
  49. """
  50. # 初始化客户端,指定DeepSeek的API端点
  51. client = OpenAI(
  52. api_key='sk-cfd2df92c8864ab999d66a615ee812c5',
  53. base_url="https://api.deepseek.com/v1", # DeepSeek的API端点
  54. )
  55. try:
  56. # 创建聊天完成请求
  57. response = client.chat.completions.create(
  58. model=model,
  59. messages=[{"role": "user", "content": prompt}],
  60. max_tokens=max_tokens,
  61. temperature=temperature,
  62. stream=False
  63. )
  64. # 返回回复内容
  65. return response.choices[0].message.content
  66. except Exception as e:
  67. return f"发生异常: {str(e)}"
  68. if __name__ == '__main__':
  69. query = '帮我查询一些AI工具'
  70. search_results = query_data(query, [1,2])
  71. print(generate_summary_query(query, search_results))