软件测试入门——第十九课(http和https协议详解)
2026/6/18 2:06:31
如何让AI助手不仅能回答故障报警问题,还能处理操作指南、维护保养、注意事项等各类现场工作问题?本文通过一个实际项目案例,深入解析RAG(检索增强生成)系统的三层优化策略。
在工业现场,工作人员经常需要查询各类信息:
传统的知识库系统往往只关注报警代码查询,但实际工作中,操作指南、维护方法、注意事项等同样重要。
本文介绍的项目是一个现场工作知识库系统,通过三层优化策略,实现了对多种信息类型的智能问答支持。
┌─────────────────────────────────────────┐ │ 第一层:检索结果的分类信息(数据层面) │ │ 根据知识库中信息的分类,标注信息类型 │ └─────────────────────────────────────────┘ ↓ ┌─────────────────────────────────────────┐ │ 第二层:用户问题的关键词匹配(意图识别)│ │ 通过关键词判断用户问题的类型 │ └─────────────────────────────────────────┘ ↓ ┌─────────────────────────────────────────┐ │ 第三层:LLM的提示工程(引导回答) │ │ 通过精心设计的Prompt引导LLM生成答案 │ └─────────────────────────────────────────┘在构建上下文时,根据知识库中信息的分类(category),动态标注信息类型,让LLM能够理解每条信息的性质。
# 构建上下文(取前5条最相关的)ifretrieved_alarms:context_parts=[]fori,alarminenumerate(retrieved_alarms[:5],1):# 根据分类判断信息类型category=alarm.get('category','')info_type="信息"ifcategory=="故障处理":info_type="故障处理信息"elifcategory=="操作指南":info_type="操作指南"elifcategory=="注意事项":info_type="注意事项"elifcategory=="维护保养":info_type="维护保养信息"elifcategory=="参数设置":info_type="参数设置信息"else:info_type="知识库信息"alarm_code=alarm.get('alarm_code','').strip()code_line=f"- 信息代码:{alarm_code}"ifalarm_codeelse"- 信息代码: (无代码)"context_parts.append(f"""{info_type}{i}:{code_line}- 信息标题:{alarm.get('alarm_message','')}- 详细内容:{alarm.get('solution','')}- 分类:{alarm.get('category','')}- 重要程度:{alarm.get('severity','')}""")context="\n".join(context_parts)假设检索到3条信息:
操作指南1: - 信息代码: (无代码) - 信息标题: 三坐标设备操作步骤 - 详细内容: 1. 打开电源... 2. 校准设备... - 分类: 操作指南 - 重要程度: 中 注意事项1: - 信息代码: (无代码) - 信息标题: 三坐标设备使用注意事项 - 详细内容: 使用前需检查... - 分类: 注意事项 - 重要程度: 高 故障处理信息1: - 信息代码: E001 - 信息标题: 温度传感器故障 - 详细内容: 1. 检查连接... 2. 更换传感器... - 分类: 故障处理 - 重要程度: 高关键点:
通过分析用户问题中的关键词,判断用户意图,识别问题类型。
# 判断问题类型query_lower=query.lower()# 检查是否包含操作类关键词is_operation_query=any(keywordinquery_lowerforkeywordin['如何','怎么','步骤','操作','使用','教程','方法','流程'])# 检查是否包含维护类关键词is_maintenance_query=any(keywordinquery_lowerforkeywordin['维护','保养','检查','清洁'])# 检查是否包含故障类关键词is_troubleshooting_query=any(keywordinquery_lowerforkeywordin['故障','问题','错误','报警','异常','解决'])# 根据匹配结果生成提示query_type_hint=""ifis_operation_query:query_type_hint="这是一个操作指南类问题,请提供详细的操作步骤。"elifis_maintenance_query:query_type_hint="这是一个维护保养类问题,请提供维护方法和注意事项。"elifis_troubleshooting_query:query_type_hint="这是一个故障处理类问题,请提供详细的解决方案。"| 用户问题 | 匹配关键词 | 判断结果 | 生成的提示 |
|---|---|---|---|
| “如何操作三坐标设备?” | “如何”、“操作” | 操作类 | “这是一个操作指南类问题,请提供详细的操作步骤。” |
| “设备故障了怎么办?” | “故障” | 故障类 | “这是一个故障处理类问题,请提供详细的解决方案。” |
| “如何维护设备?” | “如何”、“维护” | 维护类 | “这是一个维护保养类问题,请提供维护方法和注意事项。” |
关键点:
通过精心设计的Prompt,将前两层的分析结果传递给LLM,引导它根据问题类型和检索结果生成合适的回答。
prompt=f"""你是一个专业的现场工作知识库助手。用户正在查询现场工作相关信息,我已经在知识库中找到了相关内容。 知识库信息(已找到):{context}# 第一层:已标注信息类型的上下文{history_context}# 对话历史 用户当前问题:{query}{code_hint}# 如果有报警代码的提示{query_type_hint}# 第二层:问题类型提示 请根据以下规则回答: 1. 我已经在知识库中找到了相关信息,请直接基于这些信息回答用户的问题 2. 根据问题的类型(故障处理、操作指南、注意事项、维护保养等),提供相应的详细指导 3. 如果信息中有代码(如报警代码),请明确引用;如果没有代码,直接提供操作步骤或解决方案 4. 回答要: - 简洁、专业、易懂 - 如果是操作类问题,提供清晰的步骤(1、2、3...) - 如果是故障类问题,重点突出解决方法和注意事项 - 如果是维护类问题,说明维护周期和检查要点 5. 不要说"我的数据库中可能没有相关信息"、"可能没有"、"未找到"之类的话,因为已经找到了 6. 如果有对话历史,请结合上下文理解用户的意图 回答:"""你是一个专业的现场工作知识库助手。知识库信息(已找到): 操作指南1: - 信息代码: (无代码) - 信息标题: 三坐标设备操作步骤 ...这是一个操作指南类问题,请提供详细的操作步骤。- 如果是操作类问题,提供清晰的步骤(1、2、3...) - 如果是故障类问题,重点突出解决方法和注意事项 - 如果是维护类问题,说明维护周期和检查要点让我们通过一个实际案例,看看三层优化是如何协同工作的:
"如何操作三坐标设备?"向量搜索 → 检索到3条相关信息: - 信息1:分类="操作指南",标题="三坐标设备操作步骤" - 信息2:分类="注意事项",标题="三坐标设备使用注意事项" - 信息3:分类="故障处理",标题="三坐标设备常见故障"操作指南1:-信息代码:(无代码)-信息标题:三坐标设备操作步骤-详细内容:1.打开电源...2.校准设备...注意事项1:-信息代码:(无代码)-信息标题:三坐标设备使用注意事项-详细内容:使用前需检查...query_lower="如何操作三坐标设备?".lower()# 匹配到关键词:"如何"、"操作"is_operation_query=Truequery_type_hint="这是一个操作指南类问题,请提供详细的操作步骤。"prompt="""你是一个专业的现场工作知识库助手... 知识库信息(已找到): 操作指南1: - 信息标题: 三坐标设备操作步骤 - 详细内容: 1. 打开电源... 2. 校准设备... 用户当前问题:如何操作三坐标设备? 这是一个操作指南类问题,请提供详细的操作步骤。 请根据以下规则回答: - 如果是操作类问题,提供清晰的步骤(1、2、3...) ... """根据知识库中的操作指南,三坐标设备的操作步骤如下: 1. 打开电源:确保设备电源连接正常,按下电源开关 2. 校准设备:按照屏幕提示进行设备校准 3. 选择测量程序:从程序列表中选择需要的测量程序 4. 放置工件:将待测工件放置在测量台上 5. 开始测量:按下启动按钮,设备开始自动测量 6. 查看结果:测量完成后,在屏幕上查看测量结果 注意事项: - 使用前需检查设备状态 - 确保工件放置正确 - 测量过程中不要移动工件当前使用关键词匹配,未来可以考虑:
当前有12种分类,未来可以:
当前是统一的回答格式,未来可以:
通过三层优化策略,我们实现了一个能够处理多种信息类型的智能问答系统:
这三层策略相互配合,形成了一个完整的RAG优化方案。在实际项目中,这种分层设计不仅提高了系统的准确性,还增强了系统的可维护性和可扩展性。
本文基于实际项目经验总结,如有问题欢迎交流讨论。