增加施工生产管理平台的页面意图

This commit is contained in:
weiweiw 2025-05-11 17:04:46 +08:00
parent 7384049e65
commit 20a2ee4651
1 changed files with 54 additions and 43 deletions

View File

@ -15,11 +15,8 @@ from config import *
from globalData import GlobalData
from apscheduler.schedulers.background import BackgroundScheduler
# MODEL_ERNIE_PATH = R"../ernie/output/checkpoint-25910"
# MODEL_UIE_PATH = R"../uie/output/checkpoint-32750"
MODEL_ERNIE_PATH = R"../ernie/output_temp/checkpoint-25627"
MODEL_UIE_PATH = R"../uie/output_temp/checkpoint-36320"
MODEL_ERNIE_PATH = R"../ernie/output/checkpoint-14672"
MODEL_UIE_PATH = R"../uie/output/checkpoint-18190"
# 类别名称列表
labels = [
@ -281,14 +278,14 @@ def extract_multi_chat(messages):
latest_user_question = latest_message.content if latest_message.role == "user" else ""
time_prefixes = ["当前","今天", "昨天", "本周", "下周", "明天", "今日","打开"]
history_messages = [] if any(prefix in latest_user_question and prefix != latest_user_question for prefix in time_prefixes) else messages[:-1]
history_messages = [] if any(prefix in latest_user_question and len(latest_user_question) > 3 for prefix in time_prefixes) else messages[:-1]
logger.info(f"len(history_messages):{len(history_messages)}")
#最新问题的上一个问题里如果含有时间,则清空最老的历史对话
last_two_messages = history_messages[-2:]
has_time_prefix = any(
msg.role == "user" and any(prefix in msg.content and prefix != msg.content for prefix in time_prefixes)
msg.role == "user" and any(prefix in msg.content and len(msg.content) > 3 for prefix in time_prefixes)
for msg in last_two_messages
)
last_chat_history = "\n".join([f"{msg.role}: {msg.content}" for msg in last_two_messages])
@ -304,64 +301,77 @@ def extract_multi_chat(messages):
规则判断与补全流程
第一步用户最新问题是否以公司为主语 原样返回无需补全
- 若用户最新问题主语是公司直接返回原句无需补全
- 主语为公司的典型句式
- 公司开头
- 今天昨天本周下周等时间词开头紧跟公司作为主语
- 示例
- 用户的最新问题今天公司有多少四级风险作业计划
- 用户的最新问题今天公司有多少作业计划
- 用户的最新问题公司今天有多少4级风险的作业面
- 最终提问均为 原句不变
第二步用户最新问题是否是完整的问题 原样返回无需补全
- 若用户最新问题中包含下列之一具体的项目部名工程名分公司名班组名地区名等信息且同时出现作业计划作业面班组等查询对象视为完整问题直接返回原句无需补全
- 示例
- 用户最新问题今天张三班组有多少作业计划
- 用户最新问题今天绿雪莲塘工程有多少作业计划
- 最终提问均为 原句不变
第三步用户最新问题是否存在指代词 结合用户最新问题和最新对话历史进行补全
- 若用户最新问题问题中出现模糊表达具体是哪些项是哪两个作业计划分别是什么合肥中心变工程呢具体是哪20项请只使用紧邻最新问题之前的用户问题和AI回复补全问题信息
第一步用户最新问题是否存在指代词 结合用户最新问题和历史用户问题进行补全
- 若用户最新问题中出现模糊表达具体是哪些项是哪两个作业计划分别是什么合肥中心变工程呢具体是哪20项考勤人数呢请根据需要结合最新对话历史和最老对话历史的补全问题信息
- 需要补全的信息包括时间主语查询对象等
- **特别地若最新用户问题中未提及时间但最新对话历史中的用户问题中出现今天昨日本周等时间词则需要将其补全进最终问题中**
- **特别地若最新用户问题中未提及时间但最老对话历史中的用户问题中出现今天昨日本周等时间词则需要将其补全进最终问题中**
- 示例1
- 用户最新问题具体的作业计划分别是什么
- 紧邻最新问题的对话历史的用户问题今天公司有多少项作业计划
- 紧邻最新问题的对话历史的AI回答2025-04-25公司一共有421项作业计划分别如下风险等级为2级的有15项3级的有144项4级的有262项5级的有0项
- 则最终提问应为
今天公司的421项作业计划分别是什么
- 示例2
- 用户最新问题具体的作业内容是什么
- 最新对话历史的用户问题今天送一分公司第一项目部有多少项作业计划
- 最新对话历史的AI回答今天送电一分公司第一项目管理部有21项作业计划
- 最新对话历史的用户问题送一分公司第一项目部今天有多少项作业计划
- 最新对话历史的AI回答送电一分公司第一项目管理部有21项作业计划
- 则最终提问应为
今天送电一分公司第一项目管理部的21项作业计划分别是什么
第四步用户最新问题是否为序号指代第一个/第2个 用完整工程/项目/公司名替换补全
- 示例2
- 用户最新问题2项作业计划是什么
- 最老对话历史的用户问题宋1分公司第一项目部今天有多少作业计划
- 最老对话历史的AI回答未匹配到您说的分公司名宋1分公司请提供更准确的分公司名
- 最新对话历史的用户问题送一分公司
- 最新对话历史的AI回答送电一分公司第一项目管理部有2项作业计划
- 则最终提问应为
今天送电一分公司第一项目管理部的2项作业计划是什么
- 示例3
- 用户最新问题具体的班组详情
- 最新对话历史的用户问题送一分公司第一项目部今天有多少班组
- 最新对话历史的AI回答送电一分公司第一项目部金上有20个班组
- 则最终提问应为
送电一分公司第一项目部金上今天具体的20个班组详情
第二步用户最新问题是否为序号指代第一个/第2个 用完整工程/项目/公司名替换补全
- 精确提取用户所指的序号第3个指第3个工程名公司名或项目部名
- 将该工程公司或项目部的完整名称包括括号中的编号提取出来
- 用完整名称替换掉最新对话历史的用户问题中出现的简称或模糊表达
- 必须保留最新对话历史的用户问题中的所有其他关键信息包括但不限于项目部名称时间计划数内容如"进度情况""作业计划""作业内容"
- 用完整工程公司或项目部的名称替换掉最新对话历史的用户问题中出现的简称或模糊表达,但保留其他信息不变
- 必须保留最新对话历史的用户问题中的所有其他关键信息如具体的动作和操作的内容包括但不限于项目部名称时间计划数内容如"进度情况""作业计划""作业内容"摄像头视频
- 禁止添加用户原始问题中未出现的动作性动词例如打开查看查询显示展示
- 示例1
- 用户最新问题:"第二个" "第2个"
- 最新对话历史的用户问题"2025年南苑调相机检修(PROJ-2023-0179)今天有多少作业计划""
- 最新对话历史的AI回答你说的工程名可能是第一个检修公司调相机一二次设备检修维护和改造服务框架-2025年南苑调相机检修(PROJ-2023-0179)第二个:黄阳-仙河110kV线路工程(PROJ-2024-0047)请确认您要选择哪一个
- 则最终提问应为
`黄阳-仙河110kV线路工程(PROJ-2024-0047))今天有多少作业计划`
"黄阳-仙河110kV线路工程(PROJ-2024-0047))今天有多少作业计划"
- 示例2
- 用户最新问题:"第2个" "第二个"
- 紧最新对话历史的用户问题"请帮我查一下今天芦集变电站的进度情况"
- 最新对话历史的用户问题"请帮我查一下今天芦集变电站的进度情况"
- 最新对话历史的AI回答你说的工程名可能是第1个芦集-古沟π入潘集变电站220kV线路工程(PROJ-2024-0189)第二个淮南芦集220千伏变电站220千伏配电装置改造工程(PROJ-2024-0265)请确认您要选择哪一个
- 则最终提问应为
"请帮我查一下今天淮南芦集220千伏变电站220千伏配电装置改造工程(PROJ-2024-0265)的进度情况"
- 示例3新增关键保留示例
- 示例3
- 用户最新问题:"第2个"
- 最新对话历史的用户问题"宏源电力公司第三项目部今天有多少项作业计划"
- 最新对话历史的AI回答您说的实施组织名可能是,第1个安徽宏源电力建设有限公司(线路)第2个安徽宏源电力建设有限公司(变电),请选择哪一个
- 则最终提问应为
"安徽宏源电力建设有限公司(变电)第三项目部今天有多少项作业计划"
第五步输出最终问题
- 示例4
- 用户最新问题:"第2个"
- 最新对话历史的用户问题"打开中心变摄像头"
- 最新对话历史的AI回答您说的工程名可能是,第1个锦绣-常青π入中心变电站220kV架空线路工程(PROJ-2024-1206)第2个合肥中心变B包(PROJ-2024-0176),请选择哪一个
- 则最终提问应为
"打开合肥中心变B包(PROJ-2024-0176)摄像头"
- 示例5
- 最新对话历史的用户问题今天循环园工程有多少项作业计划
- 最新对话历史的AI回答您说的工程名可能是第1个... 第2个... 第3个黄山巷联-水西220kV线路工程(PROJ-2024-0220)请确认您要选择哪一个
- 用户最新问题第3个
- 错误输出不要这样打开黄山巷联-水西220kV线路工程(PROJ-2024-0220)今天有多少项作业计划
- 正确输出你应该输出黄山巷联-水西220kV线路工程(PROJ-2024-0220)今天有多少项作业计划
第三步输出最终问题
- 直接输出最终问题无解释无多余前缀或后缀
- 保持句式自然清晰
@ -381,6 +391,7 @@ def extract_multi_chat(messages):
{"role": "user", "content": prompt}
]
# logger.info(f"*********messages:{prompt}")
response = client.chat.completions.create(
messages=message,
model=model_name,