fix:增加会议室过滤
This commit is contained in:
8
.env
8
.env
@@ -1,9 +1,9 @@
|
||||
#api key
|
||||
MODEL_API_KEY=sk-42b5a1479b3b4a1b8176c13c6e2249f0
|
||||
MODEL_API_KEY=sk-7391d759f1e4488f82c2d278b977c359
|
||||
#模型地址
|
||||
MODEL_BASE_URL=http://10.254.23.128:31205/v1
|
||||
MODEL_BASE_URL=https://api.deepseek.com
|
||||
#模型名称
|
||||
MODEL_NAME=qwen-72B
|
||||
MODEL_NAME=deepseek-chat
|
||||
#模型活跃度
|
||||
MODEL_TEMPERATURE=0.8
|
||||
#放行host地址
|
||||
@@ -35,3 +35,5 @@ EDIT_MEETING = '/yonbip/uspace/external/access/edit'
|
||||
|
||||
#
|
||||
DEFAULT_PAGESIZE = 800
|
||||
DEFAULT_QUERY_SIZE = 30
|
||||
|
||||
|
||||
@@ -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)
|
||||
# """
|
||||
@@ -190,7 +203,7 @@ def book_meeting(params: dict, data: dict) -> str:
|
||||
"""
|
||||
|
||||
new_data = {
|
||||
"subject": params.get('subject',"会议主题"),
|
||||
"subject": params.get('subject', "会议主题"),
|
||||
"meetingRoomId": data["room_id"],
|
||||
"meetingRoomName": "会议室名称",
|
||||
"meetingDateTimeStamp": int(datetime.now().timestamp() * 1000),
|
||||
@@ -286,8 +299,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
|
||||
@@ -329,22 +350,21 @@ def build_prompt(params):
|
||||
# 增强提示词模板
|
||||
template = f"""你是一个专业的OA会议预订助手,请根据以下信息提供服务:
|
||||
现在时间是 :{time_now}
|
||||
可用会议室信息:
|
||||
{room_info}
|
||||
|
||||
请按以下步骤处理:
|
||||
1. 解析用户预订需求(时间、人数、设备要求等),name或typeName字段里面可能包含了区域信息,注意根据地理信息过滤
|
||||
2. 当用户需要帮忙预订会议室时,根据可用会议室列表推荐合适选项,推荐选项时,没有用户明确需要预订哪间会议室时,不需要提取用户预订信息,直接返回推荐会议室列表,按照自然语言返回即可
|
||||
3. 只有当用户确定要预订某间会议室,而不是在询问合适会议室时,请根据上下文提取用户预订信息,预订时间等信息并返回而不是直接提示预订成功,结果请只返回json格式得预订信息且不需要包含多余的描述内容以及<think>标签等,输出结果示例如下:
|
||||
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. 如果用户需要取消预订会议时,请根据上下文提取用户取消信息,如果没有获取到会议号ID,请先提示用户提供会议号ID。提取结果请按照以下的json示例返回,不需要返回其他的多余数据,返回示例如下:
|
||||
4. 如果用户需要取消预订会议时,请根据上下文提取用户取消信息,如果没有获取到会议号ID,请先提示用户提供会议号ID。提取结果请按照以下的json示例返回,不需要返回其他的多余数据,返回示例如下:
|
||||
{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
|
||||
@@ -482,6 +502,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
|
||||
|
||||
|
||||
'''
|
||||
函数调用,查询已经预订会议室详情
|
||||
'''
|
||||
@@ -530,6 +562,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,
|
||||
@@ -570,6 +603,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'''
|
||||
|
||||
@@ -176,7 +176,7 @@ def query_meetingbooking_info(params: dict):
|
||||
gateway_url, token_url = get_domain({"tenantId": tenant_id})
|
||||
request_url = gateway_url + QUERY_MEETINGBOOKING_INFO
|
||||
logger.info("request url => {0}".format(request_url))
|
||||
params['pageSize'] = 800
|
||||
params['pageSize'] = 50
|
||||
logger.debug("query_meetingbooking_info params => {0}".format(params))
|
||||
respones = requests.get(url=request_url, params=params,
|
||||
headers=header,verify=False)
|
||||
|
||||
@@ -5,9 +5,9 @@ register = template.Library()
|
||||
|
||||
# 定义各接口的必要参数白名单
|
||||
PARAM_WHITELIST = {
|
||||
'query_meeting_room': ['id', 'name', 'typeid', 'capacity',
|
||||
'common', 'commonBelongOrgId',
|
||||
'belongOrgName', 'typeName', 'isApprove'],
|
||||
'query_meeting_room': ['id', 'name', 'capacity',
|
||||
|
||||
'typeName', 'isApprove'],
|
||||
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user