feat:新增按指定用户返回已预定结果,新增会议室名称和Id的映射关系,兼容名称ID混用,
This commit is contained in:
@@ -110,9 +110,8 @@ def query_room_info(data: dict, params: dict) -> str:
|
||||
if data.get('Region') and data.get('Region') != 'None':
|
||||
region = data.get('Region')
|
||||
for b in result:
|
||||
if (region in b.get('name', 'default') or region in b.get('typeName', 'default')) and b.get('capacity',
|
||||
0) >= data.get(
|
||||
'capacity', 0):
|
||||
if ((region in b.get('name', 'default') or region in b.get('typeName', 'default'))
|
||||
and b.get('capacity',0) >= data.get('capacity', 0)):
|
||||
new_list.append(b)
|
||||
if len(new_list) >= DEFAULT_QUERY_SIZE:
|
||||
logger.debug("regin--------------- {0}".format(new_list))
|
||||
@@ -153,6 +152,36 @@ def query_booking_info(params: dict) -> str:
|
||||
return error_respones.format("查询已预定会议")
|
||||
|
||||
|
||||
def query_booking_info_by_user(params: dict):
|
||||
logger.info("Start to query_booking_info_by_user")
|
||||
user_id = params.get('user_id', None)
|
||||
try:
|
||||
if not user_id:
|
||||
raise Exception("userId cannot be empty")
|
||||
all_book_info = query_booking_info(params)
|
||||
if isinstance(all_book_info, dict):
|
||||
logger.info("all_book_info is dict")
|
||||
rooms = all_book_info.get("data", [])
|
||||
logger.debug("rooms is {0}".format(rooms))
|
||||
book_info = []
|
||||
if rooms:
|
||||
for room in rooms:
|
||||
filtered_meetings = [meeting for meeting in room['meetingDTOList'] if meeting['ownerId'] == user_id]
|
||||
if filtered_meetings:
|
||||
filter_room = room.copy()
|
||||
filter_room['meetingDTOList'] = filtered_meetings
|
||||
book_info.append(filter_room)
|
||||
result = {'code': all_book_info['code'], 'data': book_info}
|
||||
print("result is -----------",result)
|
||||
return result
|
||||
|
||||
else:
|
||||
raise Exception("query_booking_info failed")
|
||||
|
||||
except Exception as e:
|
||||
logger.error("location: query_booking_info_by_user => {0}".format(str(e)))
|
||||
return error_respones.format(f"查询指定用户{user_id}已预定会议")
|
||||
|
||||
'''
|
||||
预定会议
|
||||
'''
|
||||
@@ -180,7 +209,7 @@ def book_meeting(params: dict, data: dict) -> str:
|
||||
}
|
||||
params: tenantId (not null)
|
||||
"""
|
||||
|
||||
user_id = params.get('user_id', None)
|
||||
new_data = {
|
||||
"subject": data.get('subject','系统默认主题'),
|
||||
"meetingRoomId": data["room_id"],
|
||||
@@ -189,7 +218,7 @@ def book_meeting(params: dict, data: dict) -> str:
|
||||
"startDateTimeStamp": parse_time(data["start_time"]),
|
||||
"endDateTimeStamp": parse_time(data["end_time"]),
|
||||
"meetingPersonYhtUserIds": [
|
||||
|
||||
user_id
|
||||
],
|
||||
"meetingPersonAmount": data["capacity"],
|
||||
"remindArray": [
|
||||
@@ -284,6 +313,25 @@ def check_and_process_think(content: str) -> str:
|
||||
return filtered_text
|
||||
|
||||
|
||||
def map_meetingname_to_id(params: dict):
|
||||
map_info = []
|
||||
data = {}
|
||||
try:
|
||||
room_info = json.loads(query_room_info(data=data, params=params))
|
||||
if isinstance(room_info, str):
|
||||
raise Exception(f"get room_info error:{room_info}")
|
||||
for room in room_info:
|
||||
room_id = room.get('id')
|
||||
room_name = room.get('name')
|
||||
map_info.append({room_id: room_name})
|
||||
logger.info(f"map_info => {map_info}")
|
||||
return map_info
|
||||
except Exception as ex:
|
||||
logger.error("location: map_meetingname_to_id => {0}".format(str(ex)))
|
||||
return error_respones.format("获取会议室名称和会议室Id的映射")
|
||||
|
||||
|
||||
|
||||
'''
|
||||
初始提示词构建
|
||||
'''
|
||||
@@ -325,7 +373,11 @@ def build_prompt(params):
|
||||
"func_name":"query_booking_info"
|
||||
}
|
||||
'''
|
||||
|
||||
qry_user_book_info_for_mart_str = '''
|
||||
{
|
||||
"func_name":"query_user_booking_info"
|
||||
}
|
||||
'''
|
||||
cancel_meeting_info_for_mart_str = '''
|
||||
{
|
||||
|
||||
@@ -358,6 +410,7 @@ def build_prompt(params):
|
||||
##ROLE##:
|
||||
你是一个专业的OA会议预订助手,请根据以下信息提供服务:
|
||||
现在时间是 :{time_now}
|
||||
会议室名称和Id的映射是:{map_meetingname_to_id(params)}
|
||||
##TASK##:
|
||||
请按以下步骤处理:
|
||||
1. 预订会议室
|
||||
@@ -387,10 +440,10 @@ def build_prompt(params):
|
||||
3. 取消会议
|
||||
当用户表达取消会议意向时:
|
||||
(1) 先检查用户是否提供以下信息:
|
||||
会议Id(该信息禁止从历史对话中查找,注意:会议室Id是长度大于15位的纯数字编号)
|
||||
会议Id(该信息禁止从历史对话和上下文中查找,只能由用户提供,注意:会议Id是长度大于15位的纯数字编号)
|
||||
(2) 若信息不全,先查询用户所有预定,禁止联想历史上下文数据,直接返回json示例如下:
|
||||
```
|
||||
{qry_book_info_for_mart_str}
|
||||
{qry_user_book_info_for_mart_str}
|
||||
```
|
||||
将查询结果以友好的方式列出,推荐方式:{return_booking_info_str}
|
||||
(3) 若信息完整,直接返回以下标准JSON:
|
||||
@@ -403,7 +456,7 @@ def build_prompt(params):
|
||||
会议编号,会议开始时间,会议结束时间,会议主题
|
||||
(2) 若会议编号未提供, 无需询问用户,直接查询用户所有预定,提供给用户选择,禁止假设返回信息,直接返回json示例如下:
|
||||
```
|
||||
{qry_book_info_for_mart_str}
|
||||
{qry_user_book_info_for_mart_str}
|
||||
```
|
||||
将查询结果以友好的方式列出,过滤掉已经结束的会议,推荐方式:{return_booking_info_str}
|
||||
|
||||
@@ -586,7 +639,22 @@ def process_query_book_room(**kwargs) -> tuple:
|
||||
```
|
||||
{result}
|
||||
```
|
||||
请帮用户解析已有的预订会议室的结果,此次操作根据本次查询的结果进行推理,不要省略且结果中需要返回会议ID,必须返回处理后的查询结果:
|
||||
请帮用户解析已有的预订会议室的结果,此次操作根据本次查询的结果进行推理,不要省略且结果中需要返回会议ID,必须为用户返回处理后的查询结果供用户查看或选择:
|
||||
'''
|
||||
return False, book_promot
|
||||
|
||||
|
||||
'''
|
||||
查询指定用户的已预定信息
|
||||
'''
|
||||
def process_user_query_book_room(**kwargs) -> tuple:
|
||||
result = query_booking_info_by_user(params=kwargs['params'])
|
||||
book_promot = f'''
|
||||
系统调用API查询当前用户下已经预订的会议室的结果如下:
|
||||
```
|
||||
{result}
|
||||
```
|
||||
请帮用户解析已有的预订会议室的结果,此次操作根据本次查询的结果进行推理,不要省略且结果中需要返回会议ID,必须为用户返回处理后的查询结果供用户查看或选择:
|
||||
'''
|
||||
return False, book_promot
|
||||
|
||||
@@ -650,7 +718,8 @@ func_tion_call_map = {
|
||||
"query_booking_info": process_query_book_room,
|
||||
"cancel_room_meeting": process_cancel_room_meeting,
|
||||
"edit_room_meeting": process_edit_room_meeting,
|
||||
"query_avali_room":process_query_avali_room
|
||||
"query_avali_room":process_query_avali_room,
|
||||
"query_user_booking_info":process_user_query_book_room
|
||||
}
|
||||
|
||||
|
||||
@@ -674,16 +743,16 @@ def extract_json_blocks(text):
|
||||
'''
|
||||
|
||||
|
||||
def process_chat(user_id: str, user_input: str, params: dict):
|
||||
def process_chat(covers_id:str,user_id: str, user_input: str, params: dict):
|
||||
history = []
|
||||
query_history = dialog_manager.get_history(user_id)
|
||||
query_history = dialog_manager.get_history(covers_id)
|
||||
history.extend(query_history)
|
||||
prompt = ''
|
||||
if history is None or len(history) == 0:
|
||||
prompt = build_prompt(params)
|
||||
add_message_async(dialog_manager, user_id, 'user', prompt)
|
||||
logger.debug("step1---userinput----------{0}".format(user_input))
|
||||
add_message_async(dialog_manager, user_id, 'user', user_input)
|
||||
add_message_async(dialog_manager, covers_id, 'user', prompt)
|
||||
logger.info("step1---userinput----------{0}".format(user_input))
|
||||
add_message_async(dialog_manager, covers_id, 'user', user_input)
|
||||
resp = call_openai_api(model=MODEL_NAME, system_prompt=prompt, user_query=user_input,
|
||||
api_key=config('MODEL_API_KEY'),
|
||||
history=history, temperature=config("MODEL_TEMPERATURE", cast=float, default=0.5))
|
||||
@@ -693,9 +762,9 @@ def process_chat(user_id: str, user_input: str, params: dict):
|
||||
logger.info(f"process chat content is : {content}")
|
||||
if "func_name" in content:
|
||||
# new_content = check_and_process_think(content=content)
|
||||
add_message_async(dialog_manager, user_id, 'assistant', content)
|
||||
add_message_async(dialog_manager, covers_id, 'assistant', content)
|
||||
json_content = extract_json_blocks(content)
|
||||
logger.debug("step3--jsoncontent----------{0}".format(json_content))
|
||||
logger.info("step3--jsoncontent----------{0}".format(json_content))
|
||||
for json_item in json_content:
|
||||
|
||||
logger.info("jsonitem:{0} type{1}".format(json_item,type(json_item)))
|
||||
@@ -711,6 +780,7 @@ def process_chat(user_id: str, user_input: str, params: dict):
|
||||
if func:
|
||||
# 触发函数调用------
|
||||
logger.info(f"触发系统函数调用==>:{fun_name}")
|
||||
params["user_id"] = user_id
|
||||
add_to_content, book_promot = func(data=data, params=params)
|
||||
|
||||
logger.info("test point book_promot => {0} ".format(book_promot))
|
||||
@@ -729,7 +799,7 @@ def process_chat(user_id: str, user_input: str, params: dict):
|
||||
'''
|
||||
new_history = []
|
||||
logger.info("test point completed the function call ")
|
||||
query_history = dialog_manager.get_history(user_id)
|
||||
query_history = dialog_manager.get_history(covers_id)
|
||||
new_history.extend(query_history)
|
||||
resp = call_openai_api(model=MODEL_NAME, user_query=book_promot,
|
||||
api_key=config('MODEL_API_KEY'),
|
||||
@@ -741,15 +811,15 @@ def process_chat(user_id: str, user_input: str, params: dict):
|
||||
logger.info("final content => {0}".format(content))
|
||||
new_content = check_and_process_think(content)
|
||||
if add_to_content:
|
||||
dialog_manager.add_message(user_id, 'user', book_promot)
|
||||
add_message_async(dialog_manager, user_id, 'assistant', new_content)
|
||||
dialog_manager.add_message(covers_id, 'user', book_promot)
|
||||
add_message_async(dialog_manager, covers_id, 'assistant', new_content)
|
||||
return {'response': new_content}
|
||||
return {'response': content}
|
||||
|
||||
else:
|
||||
new_content = check_and_process_think(content=content)
|
||||
logger.info("no func ")
|
||||
add_message_async(dialog_manager, user_id, 'assistant', new_content)
|
||||
add_message_async(dialog_manager, covers_id, 'assistant', new_content)
|
||||
if reasoning_content:
|
||||
add_message_async(dialog_manager, user_id, 'assistant', reasoning_content)
|
||||
add_message_async(dialog_manager, covers_id, 'assistant', reasoning_content)
|
||||
return {'response': new_content}
|
||||
|
||||
@@ -236,5 +236,5 @@ def room_chat(request):
|
||||
if yht_token:
|
||||
params['yht_access_token'] = yht_token
|
||||
data = json.loads(request.body)
|
||||
resp = process_chat(data['user_id'], data['user_query'], params)
|
||||
resp = process_chat(data['covers_id'],data['user_id'], data['user_query'], params)
|
||||
return JsonResponse(resp)
|
||||
|
||||
Reference in New Issue
Block a user