SmartReplyController.py 3.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. import json
  2. import os
  3. from Ansjer.config import LOGGER
  4. from Object.ResponseObject import ResponseObject
  5. from django.views import View
  6. import time
  7. from Object.WsParam.AIChatObject import ChatClient
  8. from Object.WsParam.WsParamRecognizeObject import WsParamRecognize
  9. from Object.WsParam.WsParamSynthesizeObject import WsParamSynthesize
  10. class WsParamService(View):
  11. def get(self, request, *args, **kwargs):
  12. request.encoding = 'utf-8'
  13. operation = kwargs.get('operation')
  14. request_dict = request.GET
  15. return self.validation(request, request_dict, operation)
  16. def post(self, request, *args, **kwargs):
  17. request.encoding = 'utf-8'
  18. operation = kwargs.get('operation')
  19. request_dict = request.POST
  20. return self.validation(request, request_dict, operation)
  21. def validation(self, request, request_dict, operation):
  22. language = request_dict.get('language', 'en')
  23. response = ResponseObject(language)
  24. if operation == 'smartReply':
  25. return self.smart_reply(request, request_dict, response)
  26. else:
  27. return response.json(414)
  28. def smart_reply(self, request, request_dict, response):
  29. try:
  30. audio = request.FILES.get('audio', None)
  31. system = request_dict.get('system', None)
  32. history = request_dict.get('history', None)
  33. audio_type = request_dict.get('audioType', 'pcm')
  34. save_directory = 'static/demo_files/'
  35. if not os.path.exists(save_directory):
  36. os.makedirs(save_directory)
  37. start = time.time()
  38. audio_path = os.path.join(save_directory, audio.name)
  39. with open(audio_path, 'wb') as destination:
  40. for chunk in audio.chunks():
  41. destination.write(chunk)
  42. end = time.time()
  43. LOGGER.info(f"********smartReply保存文件所需时间为{end-start}秒********")
  44. APPID = "fcff8f4b"
  45. APIKey = "037571e7285e64e8dc321fa5b937fea2"
  46. APISecret = "ZTU3NWMyNTI1MTI4NTU5ZGUxMDZhNmQ5"
  47. gpt_url = 'wss://spark-api.xf-yun.com/v3.5/chat'
  48. domain = 'generalv3.5'
  49. AudioFile = audio_path
  50. start = time.time()
  51. # 传入语音 -> 转文字 APPID, APISecret, APIKey
  52. wsParamRecognize = WsParamRecognize(APPID, APISecret, APIKey, AudioFile)
  53. query = wsParamRecognize.start()
  54. end = time.time()
  55. LOGGER.info(f"********smartReply语音转文字所需时间为{end - start}秒,内容为{query}********")
  56. start = time.time()
  57. # 大语言模型 APPID, APIKey, APISecret, gpt_url, domain, query, history=None, system=None
  58. chat = ChatClient(APPID, APIKey, APISecret, gpt_url, domain, query, history, system)
  59. answer = chat.start()
  60. end = time.time()
  61. LOGGER.info(f"********smartReplyAI回复所需时间为{end - start}秒,内容为{answer}********")
  62. start = time.time()
  63. # 文字转编码 self, APPID, APIKey, APISecret, Text, AudioType = "pcm"
  64. wsParamSynthesize = WsParamSynthesize(APPID, APIKey, APISecret, answer, audio_type)
  65. answer_base = wsParamSynthesize.start()
  66. end = time.time()
  67. LOGGER.info(f"********文字转编码所需时间为{end - start}秒********")
  68. return response.json(0, answer_base)
  69. except Exception as e:
  70. LOGGER.error('*****WsParamService.smart_reply:errLine:{}, errMsg:{}'
  71. .format(e.__traceback__.tb_lineno, repr(e)))