更新词库,添加同义词和描述,删除冗余条目,优化意图识别逻辑,调整向量检索参数.
This commit is contained in:
@@ -62,7 +62,8 @@
|
||||
{
|
||||
"name": "博微储能计价通C1软件",
|
||||
"synonymous": [
|
||||
"储能C1软件"
|
||||
"储能C1软件",
|
||||
"储能软件"
|
||||
],
|
||||
"description": "用于锂离子电池储能工程编制的软件"
|
||||
},
|
||||
@@ -11522,7 +11523,8 @@
|
||||
"synonymous": [
|
||||
"配网D3",
|
||||
"配网软件D3",
|
||||
"配网计价通D3"
|
||||
"配网计价通D3",
|
||||
"配网软件"
|
||||
],
|
||||
"description": ""
|
||||
},
|
||||
@@ -22480,13 +22482,6 @@
|
||||
],
|
||||
"description": "功能模块,用于在工程量界面或材机分析界面中快速查找、定位指定的工程量明细或消耗量,并进行修改。当工程量较多时,可通过右侧搜索框输入查询条件快速定位。"
|
||||
},
|
||||
{
|
||||
"name": "编码",
|
||||
"synonymous": [
|
||||
"清单编码"
|
||||
],
|
||||
"description": "唯一标识符,用于标识工程量、一笔性费用或工程量清单项目。"
|
||||
},
|
||||
{
|
||||
"name": "规格型号",
|
||||
"synonymous": [],
|
||||
@@ -25678,13 +25673,14 @@
|
||||
},
|
||||
{
|
||||
"name": "工程量清单",
|
||||
"synonymous": [
|
||||
"清单",
|
||||
"zwqd文件",
|
||||
"招标工程量清单"
|
||||
],
|
||||
"synonymous": [],
|
||||
"description": "工程项目中的具体工作项及其数量的详细清单,是业务专用术语。通常由招标方提供,用于招标、投标报价或记录工程项目中各部分工程量的详细信息,包括所需材料、设备、人工等明细。软件格式后缀为zwqd,可用于核对工程量或作为转换后的工程文件类型。"
|
||||
},
|
||||
{
|
||||
"name": "清单",
|
||||
"synonymous": [],
|
||||
"description": ""
|
||||
},
|
||||
{
|
||||
"name": "数量系数",
|
||||
"synonymous": [
|
||||
|
||||
Binary file not shown.
Binary file not shown.
@@ -4,7 +4,8 @@
|
||||
"synonymous": [
|
||||
"配网D3",
|
||||
"配网软件D3",
|
||||
"配网计价通D3"
|
||||
"配网计价通D3",
|
||||
"配网软件"
|
||||
],
|
||||
"description": ""
|
||||
},
|
||||
@@ -1014,6 +1015,11 @@
|
||||
"synonymous": [],
|
||||
"description": ""
|
||||
},
|
||||
{
|
||||
"name": "清单",
|
||||
"synonymous": [],
|
||||
"description": ""
|
||||
},
|
||||
{
|
||||
"name": "迁改插件",
|
||||
"synonymous": [],
|
||||
|
||||
@@ -11142,10 +11142,7 @@
|
||||
},
|
||||
{
|
||||
"name": "工程量清单",
|
||||
"synonymous": [
|
||||
"清单",
|
||||
"zwqd文件"
|
||||
],
|
||||
"synonymous": [],
|
||||
"description": "工程项目中的具体工作项及其数量,简称工程量清单,是业务专用术语。用于招标或记录工程项目中各部分工程量的详细清单文件,包括所需材料、设备和人工等,软件格式后缀为zwqd。"
|
||||
},
|
||||
{
|
||||
|
||||
@@ -9,11 +9,6 @@
|
||||
"synonymous": [],
|
||||
"description": "报表的编制规范,如P128页规定的表一金额单位为“万元”"
|
||||
},
|
||||
{
|
||||
"name": "编码",
|
||||
"synonymous": [],
|
||||
"description": "一笔性费用的唯一标识码"
|
||||
},
|
||||
{
|
||||
"name": "名称",
|
||||
"synonymous": [],
|
||||
|
||||
@@ -107,7 +107,8 @@
|
||||
{
|
||||
"name": "博微储能计价通C1软件",
|
||||
"synonymous": [
|
||||
"储能C1软件"
|
||||
"储能C1软件",
|
||||
"储能软件"
|
||||
],
|
||||
"description": "用于锂离子电池储能工程编制的软件"
|
||||
},
|
||||
@@ -1683,11 +1684,6 @@
|
||||
"synonymous": [],
|
||||
"description": "在工程量界面快速查找指定的工程量"
|
||||
},
|
||||
{
|
||||
"name": "编码",
|
||||
"synonymous": [],
|
||||
"description": "工程量的唯一标识符"
|
||||
},
|
||||
{
|
||||
"name": "项目名称",
|
||||
"synonymous": [],
|
||||
|
||||
@@ -4099,10 +4099,8 @@
|
||||
"description": "用于设计和自定义报表的界面,包括设计报表内容和格式的功能,提供进入报表设计界面的功能入口。"
|
||||
},
|
||||
{
|
||||
"name": "编码",
|
||||
"synonymous": [
|
||||
"清单编码"
|
||||
],
|
||||
"name": "清单编码",
|
||||
"synonymous": [],
|
||||
"description": "定额行的关键字段,工程量清单项目的唯一标识符"
|
||||
},
|
||||
{
|
||||
|
||||
@@ -9910,10 +9910,7 @@
|
||||
},
|
||||
{
|
||||
"name": "工程量清单",
|
||||
"synonymous": [
|
||||
"招标工程量清单",
|
||||
"清单"
|
||||
],
|
||||
"synonymous": [],
|
||||
"description": "业务专用术语,指工程项目中各项工作的详细列表,包括所需的材料和施工内容。通常由招标方提供,用于展示工程项目的物料消耗量,详细列出工程项目及其数量,用于招标和计价。"
|
||||
},
|
||||
{
|
||||
|
||||
@@ -206,7 +206,7 @@ class IntentRecognizer:
|
||||
try:
|
||||
# 对matched_terms中的每个关键字进行向量检索
|
||||
for current_key in query_keys:
|
||||
vector_results = self.noun_retriever.query(current_key, top_k=3, use_intersection=True)
|
||||
vector_results = self.noun_retriever.query(current_key, top_k=5, use_intersection=False)
|
||||
current_key_terms = set()
|
||||
# 添加向量检索结果
|
||||
for result in vector_results:
|
||||
@@ -391,6 +391,8 @@ class IntentRecognizer:
|
||||
|
||||
return None
|
||||
|
||||
count=1
|
||||
|
||||
def _fill_slots_with_llm(self, query: str, classification: Classification, slot_model_class: type) -> Any:
|
||||
"""
|
||||
使用LLM进行槽位填充
|
||||
@@ -405,7 +407,6 @@ class IntentRecognizer:
|
||||
"""
|
||||
# 准备提示词
|
||||
slot_parser = PydanticOutputParser(pydantic_object=slot_model_class)
|
||||
model_schema = json.dumps(slot_model_class.model_json_schema(), ensure_ascii=False)
|
||||
|
||||
formatted_prompt = slot_filling_prompt.format(
|
||||
query=query,
|
||||
|
||||
@@ -167,13 +167,13 @@ class ProfessionalNounVectorizer:
|
||||
})
|
||||
|
||||
if len(synonymous) > 0:
|
||||
synonyms_str = ', '.join(synonymous)
|
||||
texts.append(synonyms_str.strip())
|
||||
metadatas.append({
|
||||
"name": name,
|
||||
"synonymous": synonymous,
|
||||
"description": description
|
||||
})
|
||||
for synonyms_str in synonymous:
|
||||
texts.append(synonyms_str.strip())
|
||||
metadatas.append({
|
||||
"name": name,
|
||||
"synonymous": synonymous,
|
||||
"description": description
|
||||
})
|
||||
|
||||
if len(description) > 0:
|
||||
texts.append(description.strip())
|
||||
@@ -306,7 +306,11 @@ class ProfessionalNounRetriever:
|
||||
set3 = set(json.dumps(i.metadata, sort_keys=True, ensure_ascii=False)
|
||||
for i in retriever3.invoke(query_text))
|
||||
|
||||
intersection = set1 | set2 | set3
|
||||
# 如果use_intersection为True,取交集;否则取并集
|
||||
if use_intersection:
|
||||
intersection = set1 & set2 & set3
|
||||
else:
|
||||
intersection = set1 | set2 | set3
|
||||
|
||||
# 如果交集为空,使用第一种检索方式的结果
|
||||
if not intersection:
|
||||
|
||||
@@ -12,8 +12,8 @@ extract_nouns_prompt="""
|
||||
请根据用户问题自动识别核心关键词,并按照以下规则输出:
|
||||
1. 只输出最终关键词列表,不要解释说明
|
||||
2. 关键词提取范围包括但不限于以下内容:
|
||||
- 软件相关:功能模块/操作步骤/报错提示/扩展名后缀名
|
||||
- 造价专业:费用类型/计算标准/行业规范
|
||||
- 软件相关:软件名称/功能模块/操作步骤/报错提示/扩展名后缀名
|
||||
- 造价专业:费用类型/计算标准/行业规范/文件
|
||||
- 电力工程:项目类型/设备型号/工程阶段
|
||||
3. 自动展开缩写(如将'导excel'转为'导入Excel')
|
||||
4. 严格基于用户问题提取关键词,不要输出与用户问题无关的关键词
|
||||
@@ -75,28 +75,44 @@ classification_prompt="""
|
||||
|
||||
query_rewrite_prompt = """
|
||||
|
||||
你是一名电力造价专业问答优化工程师,负责通过多维度信息整合重构用户问题以提升知识库检索准确率。请严格遵循以下流程处理:
|
||||
# 电力造价专业问答优化工程师
|
||||
|
||||
# 任务处理框架
|
||||
## 第一阶段:输入分析
|
||||
你是一名电力造价专业问答优化工程师,负责通过多维度信息整合重构用户问题以提升知识库检索准确率。
|
||||
|
||||
## 核心任务
|
||||
将用户的原始问题结合专业术语库进行规范化重构,提高知识库检索的准确性和专业性。
|
||||
|
||||
## 处理流程
|
||||
### 第一阶段:输入解析
|
||||
1. 解析基础信息
|
||||
- 原始问题(需保留核心语义):{query}
|
||||
- 关键词集合:{keywords}
|
||||
|
||||
## 第二阶段:语义匹配验证
|
||||
2. 执行关键词校验
|
||||
- 建立意图关联矩阵,验证关键词与原始问题的语义一致性
|
||||
- 若存在≥1个有效关联词 → 进入重构流程
|
||||
- 若无有效关联 → 直接输出原始问题
|
||||
### 第二阶段:匹配分析
|
||||
**匹配规则:**
|
||||
1. 检查原始问题中是否包含关键词集合中的`name`字段或`synonymous`字段中的任何词汇
|
||||
2. 统计匹配的术语数量
|
||||
3. 判断执行路径:
|
||||
- 匹配术语 ≥ 1个 → 执行重构流程
|
||||
- 匹配术语 = 0个 → 直接输出原始问题
|
||||
|
||||
## 第三阶段:专业重构
|
||||
3. 术语规范化处理
|
||||
a. 实施术语映射:将口语表达替换为知识库标准术语,优先保留原问题中的术语
|
||||
b. 执行结构优化:
|
||||
- 采用【术语标记】规范标注关键概念
|
||||
- 构建主谓宾明确的问题句式
|
||||
- 保持原问题时态与语态特征, 保留5W2H问题特征
|
||||
- 执行同义词替换:将synonymous中的同义词替换为对应name字段的标准术语
|
||||
### 第三阶段:问题重构
|
||||
**重构原则(按优先级排序):**
|
||||
|
||||
1. **语义保真**:严格保持原问题的核心意图和诉求
|
||||
2. **术语规范**:
|
||||
- 将匹配到的同义词替换为对应的标准术语(name字段)
|
||||
- 对在关键词中的标准术语使用【】进行标记
|
||||
- 保留在原问题中未在关键词库中的专业术语、限定词和修饰词
|
||||
3. **结构优化**:
|
||||
- 保持原问题的语态特征5W2H
|
||||
- 保持主谓宾结构清晰
|
||||
- 保留时间、版本等限定条件
|
||||
|
||||
**术语处理规则:**
|
||||
- 优先级1:保留原问题中的专业术语、限定词和修饰词(即使不在关键词库中)
|
||||
- 优先级2:将同义词替换为标准术语并用【】标记
|
||||
- 优先级3:对原问题中已存在的标准术语添加【】标记
|
||||
|
||||
# 输出规范
|
||||
{output_format}
|
||||
@@ -116,22 +132,20 @@ query_rewrite_prompt = """
|
||||
输出:
|
||||
{{"rewrite":"程序界面文字显示过小如何处理?"}}
|
||||
|
||||
# 质量约束条款
|
||||
1. 语义内容保真原则
|
||||
- 禁止修改原问题核心诉求(如转换主语/变更操作对象)
|
||||
- 保留原始问题的限定条件(包括:软件名称等)
|
||||
▶ 案例3(部分匹配,但保留修饰限定词)
|
||||
输入:
|
||||
原始问题:"配网软件D3能导出清单的计算公式吗?
|
||||
关键词:【'配网工程计价通D3软件', '计算式'】
|
||||
输出(保留限定修饰词"清单"):
|
||||
{{"rewrite":"【配网工程计价通D3软件】能导出清单的【计算式】吗?"}}
|
||||
|
||||
2. 术语使用规范
|
||||
- 仅使用检索返回的关键词进行术语替换
|
||||
- 新增术语必须来自关键词集合
|
||||
|
||||
3. 结构优化标准
|
||||
- 必须包含≥1个【标注术语】
|
||||
- 禁止添加解释性语句
|
||||
|
||||
4. 异常处理机制
|
||||
- 当关键词与问题无明显关联时,触发直通输出规则
|
||||
- 出现术语冲突时优先保留原始表述
|
||||
## 质量检查清单
|
||||
执行前请确认:
|
||||
- [ ] 是否保持了原问题的核心诉求?
|
||||
- [ ] 是否正确执行了同义词替换?
|
||||
- [ ] 是否保留了原问题中的专业术语和限定条件?
|
||||
- [ ] 是否正确使用了【】标记?
|
||||
- [ ] 重构后的问题是否自然流畅?
|
||||
"""
|
||||
|
||||
slot_filling_prompt = """
|
||||
@@ -154,15 +168,15 @@ slot_filling_prompt = """
|
||||
4. 只输出符合格式的JSON数据,不要有任何额外的解释
|
||||
|
||||
【示例】
|
||||
用户问题: "我的西藏Z1软件安装后闪退,提示缺少组件,怎么解决?"
|
||||
用户问题: "我的西藏Z1软件,新建工程报错:找不到许可证,怎么解决?"
|
||||
分类: 软件问题/故障排查
|
||||
输出:
|
||||
{{
|
||||
"software_name": "西藏Z1软件",
|
||||
"function_name": "软件安装",
|
||||
"error_message": "闪退,提示缺少组件",
|
||||
"software_name": "西藏电力工程计价通Z1软件",
|
||||
"function_name": "新建工程",
|
||||
"error_message": "报错:找不到许可证",
|
||||
"software_version": null,
|
||||
"os_version": null,
|
||||
"reproduction_steps": "软件安装后"
|
||||
"reproduction_steps": "新建工程"
|
||||
}}
|
||||
"""
|
||||
Reference in New Issue
Block a user