feat:预定会议时帮用户过滤掉与用户预定时间冲突的会议室,并提示会议室的可用时间段

This commit is contained in:
yujj128
2025-07-04 16:48:08 +08:00
parent 3b0830b66b
commit 62de7ae494

View File

@@ -296,13 +296,21 @@ def build_prompt(params):
{
"func_name":"query_room",
"capacity":20,
"Region":"成都"
"Region":""
}
'''
qry_avail_meetingroom_for_mart_str = '''
{
"func_name":"query_avali_room",
"start_time":"",
"end_time":""
}
'''
book_for_mart_str = '''
{
"room_id":"11",
"room_id":"2001463478978084871",
"capacity":20,
"subject":"会议主题",
"start_time":"2025-06-04 09:30:10",
@@ -355,15 +363,15 @@ def build_prompt(params):
1. 预订会议室
当用户表达预订意向时:
(1) 先检查用户的表达中是否包含以下信息,仅作检查判断:
会议室Id (必需)
会议室Id (必需,注意:[1]会议室编号是长度大于15位的数字编号不要混淆会议室名称和编号[2]可以根据会议室名称去上下文中去匹配会议室Id禁止使用默认的)
具体时间段 (必需)
参会人数(非必需参会人数未指明则默认20)
会议主题(非必需,会议主题不存在则用:默认主题)
(2) 若信息不完整,禁止使用历史数据,直接查询,查询json示例如下
(2) 若信息不完整,禁止使用历史数据,直接查询,按如下方式填充构造json只返回填充构造好的json,查询会议室信息(satrt_time和end_time可以为空)
```
{qry_room_info_for_mart_str}
{qry_avail_meetingroom_for_mart_str}
```
(3) 若信息完整,直接输出标准JSON,执行预定操作:
(3) 若用户确认预定且提供的信息完整议室可用,直接构造标准JSON,返回如下JSON执行预定操作:
```
{book_for_mart_str}
```
@@ -371,10 +379,15 @@ def build_prompt(params):
```
{qry_book_info_for_mart_str}
```
3. 查询会议室信息
当用户表达需要查询会议室情况时,实时查询,禁止使用历史对话数据,禁止假设返回信息直接返回json示例如下
```
{qry_room_info_for_mart_str}
```
3. 取消会议
当用户表达取消会议意向时:
(1) 先检查用户是否提供以下信息:
会议编号(该信息禁止从历史对话中查找)
会议Id(该信息禁止从历史对话中查找,注意会议室Id是长度大于15位的纯数字编号)
(2) 若信息不全,先查询用户所有预定禁止联想历史上下文数据直接返回json示例如下
```
{qry_book_info_for_mart_str}
@@ -385,8 +398,8 @@ def build_prompt(params):
{cancel_meeting_info_for_mart_str}
```
4. 修改会议
当用户表达修改编辑会议意向时:
(1) 先检查是否用户是否提供以下信息
当用户表达修改编辑会议意向时(注意:有的项用户没明说要修改,则视为不变)
(1) 先检查是否具备以下信息(如果用户有选择的行为,可以从选择中提取信息,这些信息均需要提取)
会议编号,会议开始时间,会议结束时间,会议主题
(2) 若会议编号未提供, 无需询问用户,直接查询用户所有预定,提供给用户选择,禁止假设返回信息,直接返回json示例如下
```
@@ -395,7 +408,7 @@ def build_prompt(params):
将查询结果以友好的方式列出,过滤掉已经结束的会议,推荐方式:{return_booking_info_str}
(3)若会议编号和其他信息均已提供(从用户的选择提取),则提取出下面格式里所需的字段信息(开始时间,结束时间,主题)进行会议修改,修改操作与格式规范如下
(3)若会议编号和其他信息均已提供(从用户的选择提取),则提取出下面格式里所需的字段信息(开始时间,结束时间,主题)进行会议修改,按如下方式填充构造json只返回填充构造好的json
```
{edit_meeting_info_for_mart_str}
```
@@ -550,7 +563,7 @@ def process_query_room(data, params) -> tuple:
```
{result}
```
解析本次查询结果和用户需求进行推理name或typeName字段里面可能包含了区域信息,isApprove 代表是否需要审批,注意根据地理信息过滤,返回格式如下
解析本次查询结果和用户需求进行推理name或typeName字段里面可能包含了区域信息,isApprove 代表是否需要审批,state是会议室的状态注意根据地理信息过滤,必须严格按照以下格式返回处理后的查询结果
```
会议室名称: <name>
会议室Id: <id>
@@ -573,7 +586,7 @@ def process_query_book_room(**kwargs) -> tuple:
```
{result}
```
请帮用户解析已有的预订会议室的结果,此次操作根据本次查询的结果进行推理,不要省略且结果中需要返回会议ID,并根据结果给予用户相应自然语言反馈
请帮用户解析已有的预订会议室的结果,此次操作根据本次查询的结果进行推理,不要省略且结果中需要返回会议ID,必须返回处理后的查询结果:
'''
return False, book_promot
@@ -608,6 +621,26 @@ def process_cancel_room_meeting(data, params) -> tuple:
return False, book_promot
def process_query_avali_room(data, params) -> tuple:
logger.info("current data is :{}".format(data))
start_time = data.get("start_time", None)
end_time = data.get("end_time", None)
all_meeting_rooms = query_room_info(data=data, params=params)
booked_rooms = query_booking_info(params=params)
book_promot = f'''
系统调用API查询了现有的所有会议室和已预订的会议室的结果如下:
```
开始时间:{start_time}
结束时间:{end_time}
所有会议室:{all_meeting_rooms}
已预定会议室:{booked_rooms}
```
请帮用户解析结果,给用户推荐可用会议室,如果用户给出的开始和结束时间不为空,且已预定会议室中有与该时间段冲突的预定,则把该会议室排除,不予推荐,并根据结果给予用户相应自然语言反馈
注意name或typeName字段里面可能包含了区域信息,isApprove 代表是否需要审批state是会议室的状态注意根据地理信息过滤
'''
return True, book_promot
'''
函数调用map维护
'''
@@ -617,6 +650,7 @@ 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
}
@@ -648,7 +682,12 @@ def process_chat(user_id: str, user_input: str, params: dict):
if history is None or len(history) == 0:
prompt = build_prompt(params)
add_message_async(dialog_manager, user_id, 'user', prompt)
print("step1---userinput----------{0}".format(user_input))
add_message_async(dialog_manager, user_id, 'user', user_input)
history2=[]
query_history2 = dialog_manager.get_history(user_id)
history2.extend(query_history2)
print("step2----history2----------{0}".format(history2))
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))
@@ -660,6 +699,7 @@ def process_chat(user_id: str, user_input: str, params: dict):
# new_content = check_and_process_think(content=content)
add_message_async(dialog_manager, user_id, 'assistant', content)
json_content = extract_json_blocks(content)
print("step3--jsoncontent----------{0}".format(json_content))
for json_item in json_content:
logger.info("jsonitem:{0} type{1}".format(json_item,type(json_item)))
@@ -706,8 +746,17 @@ def process_chat(user_id: str, user_input: str, params: dict):
new_content = check_and_process_think(content)
if add_to_content:
dialog_manager.add_message(user_id, 'user', book_promot)
history3 = []
query_history3 = dialog_manager.get_history(user_id)
history3.extend(query_history3)
print("step4----history3----------{0}".format(history3))
add_message_async(dialog_manager, user_id, 'assistant', new_content)
history4 = []
query_history4 = dialog_manager.get_history(user_id)
history4.extend(query_history4)
print("step5----history4----------{0}".format(history4))
return {'response': new_content}
return {'response': content}
else:
new_content = check_and_process_think(content=content)