intent.py 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. import json
  2. from matplotlib.font_manager import json_dump
  3. from sqlalchemy import select, update
  4. import model.records
  5. from app.gpt.service.ali_filetrans import file_trans
  6. from app.gpt.service.openai import openai_check_intent
  7. from common.log import log
  8. from database.db_mysql import async_db_session
  9. async def get_intent(body: dict):
  10. notify = body['notify']
  11. record = model.records.Records(
  12. body=body,
  13. staff_no=str(notify['staffNo']),
  14. caller=str(notify['caller']),
  15. callee=str(notify['callee']),
  16. record_file=str(notify['recordFile']),
  17. session=str(notify['session']),
  18. )
  19. mp3url = "https://toolsapi.gkscrm.com/api/v1/gpt/recordfile?filepath=" + notify['recordFile']
  20. taskId = file_trans(mp3url)
  21. if not taskId:
  22. log.error("ali_trans error")
  23. return False
  24. record.ali_task_id = taskId
  25. async with async_db_session() as db:
  26. db.add(record)
  27. await db.commit()
  28. return True
  29. async def ali_trans_success(body: dict):
  30. if 'StatusText' not in body or body['StatusText'] != "SUCCESS":
  31. log.info("ali_trans response not Success")
  32. return False
  33. if "Result" not in body:
  34. log.error("ali_trans response not Result")
  35. return False
  36. async with async_db_session() as db:
  37. query = select(model.records.Records).where(model.records.Records.ali_task_id == body["TaskId"]).limit(1)
  38. result = await db.execute(query)
  39. record = result.scalars().first()
  40. if not record:
  41. log.error("ali_trans response not found record")
  42. return False
  43. record.ali_trans = body
  44. record.ali_task_id = body["TaskId"]
  45. sentences = body["Result"]["Sentences"]
  46. chats = ""
  47. for sentence in sentences:
  48. chats += "speaker-" + sentence["SpeakerId"] + ": " + sentence["Text"] + "\n"
  49. log.info("聊天记录如下:\n" + chats)
  50. record.chats = chats
  51. user_intent = openai_check_intent(chats)
  52. log.info("用户意图为:" + user_intent.model_dump_json(indent=4))
  53. record.user_intent = user_intent.user_intent
  54. record.basis = user_intent.basis
  55. if user_intent.accept:
  56. record.accept = 1
  57. else:
  58. record.accept = 2
  59. async with async_db_session() as db:
  60. query = update(model.records.Records).where(model.records.Records.id == record.id).values({
  61. "ali_trans": record.ali_trans,
  62. "chats": record.chats,
  63. "user_intent": record.user_intent,
  64. "basis": record.basis,
  65. "accept": record.accept
  66. })
  67. await db.execute(query)
  68. await db.commit()
  69. return True