@@ -13,7 +13,7 @@ MODEL_NAME = config('MODEL_NAME', default="")
BASE_URL = config ( ' MODEL_BASE_URL ' , default = " " )
logger = logging . getLogger ( ' django ' )
DEFAULT_QUERY_SIZE = config ( ' DEFAULT_QUERY_SIZE ' , cast = int , default = 30 )
'''
解析时间,转化为时间戳
'''
@@ -78,7 +78,7 @@ def query_room_type(params: dict) -> str:
'''
def query_room_info ( params : dict ) - > str :
def query_room_info ( data : dict , params: dict ) - > str :
# resp = requests.get('http://127.0.0.1:8000/myapi/room/')
"""
query_params:
@@ -98,14 +98,27 @@ def query_room_info(params: dict) -> str:
meeting_room = getinfo . query_meetingroom ( params )
content = json . loads ( json . dumps ( meeting_room ) )
result = params_filter . filter_params ( content [ ' data ' ] , " query_meeting_room " )
return str ( result )
new_list = [ ]
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 ) :
new_list . append ( b )
if len ( new_list ) > = DEFAULT_QUERY_SIZE :
return json . dumps ( new_list , ensure_ascii = False )
else :
for b in result :
if b . get ( ' capacity ' , 0 ) > = data . get ( ' capacity ' , 0 ) :
new_list . append ( b )
if len ( new_list ) > = DEFAULT_QUERY_SIZE :
return json . dumps ( new_list , ensure_ascii = False )
return json . dumps ( new_list , ensure_ascii = False )
'''
预定会议室
'''
# def book_room(data: dict, params: dict) -> str:
# # resp = requests.post('http://127.0.0.1:8000/myapi/room/', data)
# """
@@ -287,8 +300,16 @@ def check_and_process_think(content: str) -> str:
def build_prompt ( params ) :
""" 构建增强提示词 """
# 获取可用会议室信息
room_info = query_room_info ( params )
qry_room_info_for_mart_str = '''
{
" func_name " : " query_room " ,
" capacity " :20, //参会人数, 没有则返回0, ,
" Region " : " 成都 " , //会议室所在区域, 没有则返回None
}
'''
book_for_mart_str = '''
{
" room_id " : " 11 " , //会议室ID
@@ -303,6 +324,7 @@ def build_prompt(params):
qry_book_info_for_mart_str = '''
{
" func_name " : " query_booking_info " ,
}
'''
@@ -337,25 +359,24 @@ def build_prompt(params):
# 增强提示词模板
template = f """ 你是一个专业的OA会议预订助手, 请根据以下信息提供服务:
现在时间是 : { time_now }
可用会议室信息:
{ room_info }
请按以下步骤处理:
1. 解析用户预订需求(时间、人数、设备要求等),name或typeName字段里面可能包含了区域信息, 注意根据地理信息过滤
2. 当用户需要帮忙预订会议室时,根据可用会议室列表推荐合适选项,推荐选项时,没有用户明确需要预订哪间会议室时,不需要提取用户预订信息,直接返回推荐会议室列表,按照自然语言返回即可
3 . 只有当用户确定要预订某间会议室,而不是在询问合适会议室时,请根据上下文提取用户预订信息,预订时间,会议主题 等信息并返回,如果没有会议主题则默认主题为 ' 默认主题 ' ,最后提示用户确认预定信息是否准确, 输出结果示例如下:
1. 当用户需要帮忙预订会议室时,请根据上下文提取用户预订信息,会议室时信息,参数人数,会议主题等,如果没有会议主题则默认主题为 ' 默认主题 ' ,提取结果请按照以下的json示例返回,不需要返回其他的多余数据,返回示例如下:
{ qry_room_info_for_mart_str }
2 . 只有当用户确定要预订某间会议室,而不是在询问合适会议室时,请根据上下文提取用户预订信息,预订时间等信息并返回而不是直接提示预订成功,结果请只返回json格式得预订信息且不需要包含多余的描述内容以及<think>标签等, 输出结果示例如下:
{ book_for_mart_str }
4 . 用户需要查询已有的会议室预订情况或者预订情况时,结果请按照以下的json示例返回,不需要返回其他的多余数据,返回示例如下:
3 . 用户需要查询已有的会议室预订情况或者预订情况时,实时查询,禁止使用历史对话数据, 结果请按照以下的json示例返回,不需要返回其他的多余数据,返回示例如下:
{ qry_book_info_for_mart_str }
5 . 当 用户需要取消预订会议,分两种情况:
4 . 如果 用户需要取消预订会议时,请根据上下文提取用户取消信息 ,分两种情况:
(1)用户未提供要取消的会议号ID,返回已预定会议情况供用户选择,切记禁止使用历史对话中的旧数据!,查询调用如下:
{ qry_book_info_for_mart_str } 返回格式规范: { return_booking_info_str }
(2)用户给出了需要取消的会议号ID,如果用户未 从已预定会议列表中进行选择,则提示用户选择,如果用户已 选择则提取会议ID, 并提示用户是否确认取消, 取消示例如下:
(2)用户给出了需要取消的会议号ID,如果用户从已预定会议列表中选择了需要取消的会议, 则提取会议ID, 并提示用户是否确认取消, 取消示例如下:
{ cancel_meeting_info_for_mart_str }
6 . 如果用户需要修改已有的会议时,请根据上下文提取用户修改预订信息,如果没有获取到会议号ID,开始时间,结束时间,请先用自然对话提示用户提供相应的信息而不是提取json数据。提取结果请按照以下的json示例返回,不需要返回其他的多余数据,返回示例如下:
5 . 如果用户需要修改已有的会议时,请根据上下文提取用户修改预订信息,如果没有获取到会议号ID,开始时间,结束时间,请先用自然对话提示用户提供相应的信息而不是提取json数据。提取结果请按照以下的json示例返回,不需要返回其他的多余数据,返回示例如下:
{ edit_meeting_info_for_mart_str }
7 . 如果当用户再次请求预订会议室时,请不要按照json格式直接提取用户预订信息,而是请重新查看现有会议室的最新情况,基于用户需求给用户推荐合理的会议室,推荐选项时不需要提取用户预订信息按照json格式返回,只需要重新给用户推荐选项即可,按照正常自然语言对话返回
8 . 如果用户需要解析调用API返回的结果, 请解析用户提供的相应结果信息, 并给予自然语言反馈,不需要返回json数据
9 . 用户其他需求,请按照自然语言对话返回
6 . 如果当用户再次请求预订会议室时,请不要按照json格式直接提取用户的 预订信息,而是请重新查看现有会议室的最新情况,基于用户需求给用户推荐合理的会议室,推荐选项时不需要提取用户预订信息按照json格式返回,只需要重新给用户推荐选项即可,按照正常自然语言对话返回
7 . 如果用户需要解析调用API返回的结果, 请解析用户提供的相应结果信息, 并给予自然语言反馈,不需要返回json数据
8 . 用户其他需求,请按照自然语言对话返回
"""
return template
@@ -493,6 +514,18 @@ def process_book_room(data, params) -> str:
return book_promot
def process_query_room ( data , params ) - > str :
logger . info ( " current data is : {} " . format ( data ) )
result = query_room_info ( data = data , params = params )
logger . info ( " --process_query_room data is : {} " . format ( result ) )
book_promot = f '''
系统调用API查询现有空闲会议室信息结果如下:
{ result }
解析用户预订需求(时间、人数、设备要求等),name或typeName字段里面可能包含了区域信息,isApprove 代表是否需要审批,注意根据地理信息过滤,给用户推荐合适会议室,请按照自然语言描述返回。
'''
return book_promot
'''
函数调用,查询已经预订会议室详情
'''
@@ -541,6 +574,7 @@ def process_cancel_room_meeting(data, params) -> str:
'''
func_tion_call_map = {
" book_room " : process_book_room ,
" query_room " : process_query_room ,
" query_booking_info " : process_query_book_room ,
" cancel_room_meeting " : process_cancel_room_meeting ,
" edit_room_meeting " : process_edit_room_meeting ,
@@ -582,6 +616,7 @@ def process_chat(user_id: str, user_input: str, params: dict):
# 触发函数调用------
logger . info ( f " 触发系统函数调用==>: { fun_name } " )
book_promot = func ( data = data , params = params )
dialog_manager . add_message ( user_id , ' user ' , book_promot )
else :
book_promot = f '''
@@ -613,6 +648,4 @@ def process_chat(user_id: str, user_input: str, params: dict):
add_message_async ( dialog_manager , user_id , ' assistant ' , content )
if reasoning_content :
add_message_async ( dialog_manager , user_id , ' assistant ' , reasoning_content )
# result = check_and_process_think(content)
# new_content = new_content.split('```json')[-1].split('```')[0]
return { ' response ' : new_content }