feat:预定会议时帮用户过滤掉与用户预定时间冲突的会议室,并提示会议室的可用时间段
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user