1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- import json
- from matplotlib.font_manager import json_dump
- from sqlalchemy import select, update
- import model.records
- from app.gpt.service.ali_filetrans import file_trans
- from app.gpt.service.openai import openai_check_intent
- from common.log import log
- from database.db_mysql import async_db_session
- async def get_intent(body: dict):
- notify = body['notify']
- record = model.records.Records(
- body=body,
- staff_no=str(notify['staffNo']),
- caller=str(notify['caller']),
- callee=str(notify['callee']),
- record_file=str(notify['recordFile']),
- session=str(notify['session']),
- )
- mp3url = "https://toolsapi.gkscrm.com/api/v1/gpt/recordfile?filepath=" + notify['recordFile']
- taskId = file_trans(mp3url)
- if not taskId:
- log.error("ali_trans error")
- return False
- record.ali_task_id = taskId
- async with async_db_session() as db:
- db.add(record)
- await db.commit()
- return True
- async def ali_trans_success(body: dict):
- if 'StatusText' not in body or body['StatusText'] != "SUCCESS":
- log.info("ali_trans response not Success")
- return False
- if "Result" not in body:
- log.error("ali_trans response not Result")
- return False
- async with async_db_session() as db:
- query = select(model.records.Records).where(model.records.Records.ali_task_id == body["TaskId"]).limit(1)
- result = await db.execute(query)
- record = result.scalars().first()
- if not record:
- log.error("ali_trans response not found record")
- return False
- record.ali_trans = body
- record.ali_task_id = body["TaskId"]
- sentences = body["Result"]["Sentences"]
- chats = ""
- for sentence in sentences:
- chats += "speaker-" + sentence["SpeakerId"] + ": " + sentence["Text"] + "\n"
- log.info("聊天记录如下:\n" + chats)
- record.chats = chats
- user_intent = openai_check_intent(chats)
- log.info("用户意图为:" + user_intent.model_dump_json(indent=4))
- record.user_intent = user_intent.user_intent
- record.basis = user_intent.basis
- if user_intent.accept:
- record.accept = 1
- else:
- record.accept = 2
- async with async_db_session() as db:
- query = update(model.records.Records).where(model.records.Records.id == record.id).values({
- "ali_trans": record.ali_trans,
- "chats": record.chats,
- "user_intent": record.user_intent,
- "basis": record.basis,
- "accept": record.accept
- })
- await db.execute(query)
- await db.commit()
- return True
|