1244 lines
62 KiB
Python
1244 lines
62 KiB
Python
"""
|
||
提示词集中管理模块
|
||
将各工作流中的提示词统一提取到此处,方便调整和维护。
|
||
每个提示词都附有详细注释说明其用途和所属工作流节点。
|
||
|
||
模块结构:
|
||
- COMMON_PROMPTS: 多个工作流共享的提示词(格式规范、友好回复、无检索建议等)
|
||
- BAIKE_PROMPTS: 百科问答工作流专用提示词
|
||
- STATISTICS_PROMPTS: 统计工作流专用提示词
|
||
- FAULT_DIAGNOSIS_PROMPTS: 故障诊断工作流专用提示词(仅含与操作指导不同的部分)
|
||
- OPERATE_PROMPTS: 操作指导工作流专用提示词(仅含与故障诊断不同的部分)
|
||
"""
|
||
|
||
|
||
# ============================================================
|
||
# 一、共享提示词(多个工作流通用)
|
||
# ============================================================
|
||
|
||
COMMON_PROMPTS = {
|
||
# ------------------------------------------------------------------
|
||
# 格式规范系统提示词
|
||
# 用于: workflow_baike.py (generate_answer)、workflow_utils.py (stream_format_and_postprocess)
|
||
# ------------------------------------------------------------------
|
||
"format_system": (
|
||
"你是一个专业的格式规范助手,负责将给定的文本内容规范成美观、易读的格式。"
|
||
),
|
||
|
||
# ------------------------------------------------------------------
|
||
# 格式规范用户提示词(带图片示例,用于百科问答和通用格式化)
|
||
# 输入变量: raw_content
|
||
# 用于: workflow_baike.py (generate_answer)、workflow_utils.py (stream_format_and_postprocess 无content_label时)
|
||
# ------------------------------------------------------------------
|
||
"format_user_with_image_examples": (
|
||
"请将以下内容规范成美观、易读的Markdown格式:\n"
|
||
"\n"
|
||
"【原始内容】\n"
|
||
"{raw_content}\n"
|
||
"\n"
|
||
"【格式规范要求】\n"
|
||
"1. 保持原始内容的完整性和准确性,**不要修改任何内容**,只调整格式\n"
|
||
# "2. 适当使用标题、段落分隔等Markdown格式,使内容更易读\n"
|
||
"2. 不得出现'''mardown'''符号\n"
|
||
"3. 确保图片链接在相关位置自然展示使用,并且只输出准确格式,`` \n"
|
||
"4. 如果参考资料中没有图片,**不要输出任何关于图片的说明**\n"
|
||
"5. 确保LaTeX公式格式正确:$$...$$,并在 $$...$$ 前后加空格\n"
|
||
"6. 如果有代码片段,使用适当的代码块格式\n"
|
||
"7. 不要添加任何额外的解释或说明\n"
|
||
"\n"
|
||
"【图片输出示例】\n"
|
||
"示例一: 原始内容:``\n"
|
||
" 规范后输出:``\n"
|
||
"示例二: 原始内容:``\n"
|
||
" 规范后输出:``\n"
|
||
"示例三: 原始内容:`images/xxx.jpg`\n"
|
||
" 规范后输出:``\n"
|
||
"示例四: 原始内容:`xxx.jpg`\n"
|
||
" 规范后输出:``\n"
|
||
"示例五: 原始内容:``\n"
|
||
" 规范后输出:``\n"
|
||
"示例六: 原始内容:``\n"
|
||
" 规范后输出:``\n"
|
||
"\n"
|
||
"请直接输出规范后的内容:"
|
||
),
|
||
|
||
# ------------------------------------------------------------------
|
||
# 格式规范用户提示词(简化版,用于方案重新格式化,图片链接保持原样)
|
||
# 输入变量: content_label, raw_content
|
||
# 用于: workflow_utils.py (stream_format_and_postprocess 有content_label时)
|
||
# ------------------------------------------------------------------
|
||
"format_user_simple": (
|
||
"请将以下{content_label}内容规范成美观、易读的Markdown格式:\n"
|
||
"\n"
|
||
"【原始内容】\n"
|
||
"{raw_content}\n"
|
||
"\n"
|
||
"【格式规范要求】\n"
|
||
"1. 保持原始内容的完整性和准确性,**不要修改任何内容**,只调整格式\n"
|
||
# "2. 适当使用标题、列表、段落分隔等Markdown格式,使内容更易读\n"
|
||
"2. 不得出现'''markdown'''符号\n"
|
||
"3. 确保图片链接保持原样:``\n"
|
||
"4. 确保LaTeX公式格式正确:$$...$$,并在 $$...$$ 前后加空格\n"
|
||
"5. 如果有代码片段,使用适当的代码块格式\n"
|
||
"6. 不要添加任何额外的解释或说明\n"
|
||
"\n"
|
||
"请直接输出规范后的内容:"
|
||
),
|
||
|
||
# ------------------------------------------------------------------
|
||
# 意图分类用户提示词(故障诊断和操作指导共用)
|
||
# 输入变量: combined_query
|
||
# 用于: workflow_fault_diagnosis.py、workflow_operate.py 的 classify_intent 节点
|
||
# ------------------------------------------------------------------
|
||
"classify_intent_user": (
|
||
"\n"
|
||
"### 用户输入\n"
|
||
"\"{combined_query}\"\n"
|
||
"\n"
|
||
"请根据上述标准进行意图分类:"
|
||
),
|
||
|
||
# ------------------------------------------------------------------
|
||
# 信息提取用户提示词(故障诊断和操作指导共用)
|
||
# 输入变量: existing_info_str, history_str, combined_query
|
||
# 用于: workflow_fault_diagnosis.py、workflow_operate.py 的 extract_info 节点
|
||
# ------------------------------------------------------------------
|
||
"extract_info_user": (
|
||
"请从以下内容中提取{biz_label}相关信息:\n"
|
||
"\n"
|
||
"【已提取的信息】\n"
|
||
"{existing_info_str}\n"
|
||
"\n"
|
||
"【历史对话】\n"
|
||
"{history_str}\n"
|
||
"\n"
|
||
"【当前用户输入】\n"
|
||
"{combined_query}\n"
|
||
"\n"
|
||
"请提取信息(JSON格式):"
|
||
),
|
||
|
||
# ------------------------------------------------------------------
|
||
# 询问用户系统提示词(故障诊断和操作指导共用)
|
||
# 用于: workflow_fault_diagnosis.py、workflow_operate.py 的 ask_user 节点
|
||
# ------------------------------------------------------------------
|
||
"ask_user_system": (
|
||
"你是一个专业的{biz_label}助手,需要友好地引导用户提供缺失信息。\n"
|
||
"\n"
|
||
"要求:\n"
|
||
"1. 语气友好、专业,不要生硬\n"
|
||
"2. 说明为什么需要这些信息(更准确的{biz_label_short})\n"
|
||
"3. 鼓励用户提供更多细节"
|
||
),
|
||
|
||
# ------------------------------------------------------------------
|
||
# 询问用户提示词(故障诊断和操作指导共用)
|
||
# 输入变量: info_completeness, existing_str, missing_str, combined_query
|
||
# ------------------------------------------------------------------
|
||
"ask_user_prompt": (
|
||
"请生成一段友好的回复,引导用户补充缺失信息。\n"
|
||
"\n"
|
||
"【已获取的信息】(完整性评分: {info_completeness})\n"
|
||
"{existing_str}\n"
|
||
"\n"
|
||
"【缺失的信息】\n"
|
||
"{missing_str}\n"
|
||
"\n"
|
||
"【用户当前输入】\n"
|
||
"{combined_query}\n"
|
||
"\n"
|
||
"请生成回复:"
|
||
),
|
||
|
||
# ------------------------------------------------------------------
|
||
# 无检索结果且无设备信息时的系统提示词(故障诊断和操作指导共用)
|
||
# ------------------------------------------------------------------
|
||
"generate_response_friendly_system": (
|
||
"你是一个友好的{biz_label}助手。用户可能只是在打招呼或询问一般性问题。\n"
|
||
"请友好地回复,并简要介绍你能提供的帮助。"
|
||
),
|
||
|
||
# ------------------------------------------------------------------
|
||
# 无检索结果且无设备信息时的用户提示词(故障诊断和操作指导共用)
|
||
# 输入变量: combined_query
|
||
# ------------------------------------------------------------------
|
||
"generate_response_friendly_user": (
|
||
"用户说:{combined_query}\n"
|
||
"\n"
|
||
"请友好回复:"
|
||
),
|
||
|
||
# ------------------------------------------------------------------
|
||
# 无检索结果但有设备信息时的系统提示词(故障诊断和操作指导共用)
|
||
# ------------------------------------------------------------------
|
||
"generate_response_no_rag_system": (
|
||
"你是一个专业的{biz_label}助手。\n"
|
||
"虽然没有检索到相关资料,但可以根据用户提供的信息给出一般性建议。\n"
|
||
"注意:明确告知用户这是基于一般经验的建议。"
|
||
),
|
||
|
||
# ------------------------------------------------------------------
|
||
# 无检索结果(简化版)系统提示词(故障诊断和操作指导共用)
|
||
# ------------------------------------------------------------------
|
||
"generate_response_no_rag_simple_system": (
|
||
"你是一个专业的{biz_label}助手。\n"
|
||
"虽然没有检索到相关资料,但可以根据用户提供的信息给出一般性建议。"
|
||
),
|
||
|
||
# ------------------------------------------------------------------
|
||
# 后续交互提示词(故障诊断和操作指导共用)
|
||
# 输入变量: biz_label, ship_number, device_name, item_name, detail_info,
|
||
# rag_answer, combined_query, image_guidance
|
||
# 用于: workflow_fault_diagnosis.py、workflow_operate.py 的 generate_response 节点
|
||
# ------------------------------------------------------------------
|
||
"generate_response_follow_up": (
|
||
"你是一名资深工业设备{biz_label}工程师。用户正在与你进行后续交互。\n"
|
||
"\n"
|
||
"【设备信息】\n"
|
||
"- 舷号:{ship_number}\n"
|
||
"- 设备名称:{device_name}\n"
|
||
"- {item_label}:{item_name}\n"
|
||
"{detail_info}"
|
||
"【参考资料】\n"
|
||
"{rag_answer}\n"
|
||
"\n"
|
||
"【用户当前问题】\n"
|
||
"{combined_query}\n"
|
||
"\n"
|
||
"【输出要求】\n"
|
||
"1. {image_guidance}\n"
|
||
"2. 如果参考资料包含表格,请转化成不用表格的形式输出内容\n"
|
||
"3. 如果参考资料包含 LaTeX 公式,请转为 $$...$$ 公式格式输出,并在 $$...$$ 前后加空格\n"
|
||
"4. 所有链接必须与参考资料保持一致,不得裁剪、转义或改写\n"
|
||
"5. 不能虚构参考资料中未提及的图片、表格、零件号或步骤\n"
|
||
"\n"
|
||
"请给出回复:"
|
||
),
|
||
|
||
# ------------------------------------------------------------------
|
||
# 正常生成方案提示词(故障诊断和操作指导共用)
|
||
# 输入变量: biz_label, ship_number, device_name, item_name, item_label,
|
||
# detail_info, item_action, rag_answer
|
||
# ------------------------------------------------------------------
|
||
"generate_response_normal": (
|
||
"你是一名资深工业设备{biz_label}工程师,请根据以下信息生成{biz_label}分析与{biz_label}方案。如果参考资料中有图片,一定要把图片输出在结果中\n"
|
||
"\n"
|
||
"【设备信息】\n"
|
||
"- 舷号:{ship_number}\n"
|
||
"- 设备名称:{device_name}\n"
|
||
"- {item_label}:{item_name}\n"
|
||
"{detail_info}"
|
||
"当前的{item_label}要以{item_name}为准,{item_action}。\n"
|
||
"\n"
|
||
"【参考资料】\n"
|
||
"{rag_answer}\n"
|
||
"\n"
|
||
"【输出要求】\n"
|
||
"1. **重要**:如果参考资料中包含图片链接(格式为 `` 或 `images/xxx.jpg`),请务必在相关位置自然展示使用,如果参考资料中没有图片,**不要输出任何关于图片的说明**\n"
|
||
"2. 如果参考资料包含 LaTeX 公式、连接等,请在对应位置正常使用,不得修改或删除\n"
|
||
"3. 请专注于内容的准确性、完整性和逻辑性,不要担心格式的美观性\n"
|
||
"4. 可以适当使用简单的段落分隔,但不要使用复杂的Markdown格式\n"
|
||
"5. 如果参考资料包含表格,请不要输出表格,而要直接描述表格的内容\n"
|
||
"\n"
|
||
"请给出回复:"
|
||
),
|
||
|
||
# ------------------------------------------------------------------
|
||
# 基于反馈重新生成方案提示词(故障诊断和操作指导共用)
|
||
# 输入变量: biz_label, ship_number, device_name, item_name, item_label,
|
||
# detail_info, item_action, user_feedback_for_regenerate,
|
||
# rag_answer, image_guidance
|
||
# ------------------------------------------------------------------
|
||
"generate_response_regenerating": (
|
||
"你是一名资深工业设备{biz_label}工程师。用户对之前的方案有反馈,请根据反馈重新生成{biz_label}分析与{biz_label}方案。如果参考资料中有图片,一定要把图片输出在结果中\n"
|
||
"\n"
|
||
"【设备信息】\n"
|
||
"- 舷号:{ship_number}\n"
|
||
"- 设备名称:{device_name}\n"
|
||
"- {item_label}:{item_name}\n"
|
||
"{detail_info}"
|
||
"【用户反馈】\n"
|
||
"{user_feedback_for_regenerate}\n"
|
||
"\n"
|
||
"【参考资料】\n"
|
||
"{rag_answer}\n"
|
||
"\n"
|
||
"【输出要求】\n"
|
||
"1. 先用一句话判断{item_label}原因(包含舷号、设备、{item_label},不超过40字)\n"
|
||
"2. 然后给出{biz_label}方案,步骤清晰、可直接执行\n"
|
||
"3. 根据用户的反馈调整方案\n"
|
||
"4. 如果参考资料信息不足,明确指出缺少什么\n"
|
||
"5. {image_guidance},如果参考资料中没有图片,**不要输出任何关于图片的说明**\n"
|
||
"6. 如果参考资料包含表格,请转化成不用表格的形式输出内容\n"
|
||
"7. 如果参考资料包含 LaTeX 公式,请转为 $$...$$ 公式格式输出,并在 $$...$$ 前后加空格\n"
|
||
"8. 所有链接必须与参考资料保持一致,不得裁剪、转义或改写\n"
|
||
"9. 不能虚构参考资料中未提及的图片、表格、零件号或步骤\n"
|
||
"\n"
|
||
"请直接输出调整后的方案:"
|
||
),
|
||
|
||
# ------------------------------------------------------------------
|
||
# 生成内容系统提示词(故障诊断和操作指导共用)
|
||
# ------------------------------------------------------------------
|
||
"generate_response_content_system": (
|
||
"你是一名资深工业设备{biz_label}工程师,严格依据检索信息生成{biz_label}方案。请专注于内容的准确性、完整性和逻辑性,如果参考资料中包含图片,请务必在回答中展示出来。"
|
||
),
|
||
|
||
# ------------------------------------------------------------------
|
||
# 深度分析点选择系统提示词(故障诊断和操作指导共用)
|
||
# ------------------------------------------------------------------
|
||
"deep_rag_analysis_system": (
|
||
"你是一名资深工业设备{biz_label}专家。用户反馈之前的方案没有解决问题,请分析:\n"
|
||
"1. 之前方案可能存在的不足\n"
|
||
"2. 用户当前问题的关键点\n"
|
||
"3. 选择3-5个可以深入检索的分析点(如特定部件、原理、{biz_label}方法等)\n"
|
||
"\n"
|
||
"输出格式(JSON):\n"
|
||
"{\n"
|
||
" \"analysis_points\": [\"分析点1\", \"分析点2\", \"分析点3\"],\n"
|
||
" \"reason\": \"分析理由\"\n"
|
||
"}"
|
||
),
|
||
|
||
# ------------------------------------------------------------------
|
||
# 深度分析点选择用户提示词(故障诊断和操作指导共用)
|
||
# 输入变量: ship_number, device_name, item_name, item_label, detail_info,
|
||
# history_str, last_generated_scheme, combined_query
|
||
# ------------------------------------------------------------------
|
||
"deep_rag_analysis_user": (
|
||
"【设备信息】\n"
|
||
"- 舷号:{ship_number}\n"
|
||
"- 设备名称:{device_name}\n"
|
||
"- {item_label}:{item_name}\n"
|
||
"{detail_info}"
|
||
"\n"
|
||
"【对话历史】\n"
|
||
"{history_str}\n"
|
||
"\n"
|
||
"【之前的方案】\n"
|
||
"{last_generated_scheme}\n"
|
||
"\n"
|
||
"【用户当前反馈】\n"
|
||
"{combined_query}\n"
|
||
"\n"
|
||
"请分析并选择深度分析点(JSON格式):"
|
||
),
|
||
|
||
# ------------------------------------------------------------------
|
||
# 深度响应生成提示词(故障诊断和操作指导共用)
|
||
# 输入变量: biz_label, ship_number, device_name, item_name, item_label,
|
||
# detail_info, combined_query, analysis_points_prompt,
|
||
# analysis_points_text, original_rag_text, graph_results
|
||
# ------------------------------------------------------------------
|
||
"generate_deep_response": (
|
||
"你是一名资深工业设备{biz_label}专家。用户反馈之前的方案没有解决问题,请根据多维度深度检索的资料,进行深入的{item_label}原因分析和解决方案规划。\n"
|
||
"\n"
|
||
"【设备信息】\n"
|
||
"- 舷号:{ship_number}\n"
|
||
"- 设备名称:{device_name}\n"
|
||
"- {item_label}:{item_name}\n"
|
||
"{detail_info}"
|
||
"【用户反馈】\n"
|
||
"{combined_query}\n"
|
||
"{analysis_points_prompt}"
|
||
"【针对分析点的深度检索资料】\n"
|
||
"{analysis_points_text}\n"
|
||
"{original_rag_text}\n"
|
||
"\n"
|
||
"【图谱检索结果】\n"
|
||
"{graph_results}\n"
|
||
"\n"
|
||
"【输出要求】\n"
|
||
"1. 首先重新深入分析{item_label}原因,结合所有检索资料进行推理\n"
|
||
"2. 给出更详细、更精准的{biz_label}方案,步骤清晰、可直接执行\n"
|
||
"3. 重点关注用户反馈的问题,根据用户反馈和检索资料,进行{item_label}原因分析和解决方案规划。\n"
|
||
"4. **重要**:如果参考资料中包含图片链接(格式为 `` 或 `images/xxx.jpg`),请务必在相关位置自然展示使用,如果参考资料中没有图片,**不要输出任何关于图片的说明**\n"
|
||
"5. 如果参考资料包含 LaTeX 公式、连接等,请在对应位置正常使用,不得修改或删除\n"
|
||
"6. 请专注于内容的准确性、完整性和逻辑性,不要担心格式的美观性\n"
|
||
"7. 可以适当使用简单的段落分隔,但不要使用复杂的Markdown格式\n"
|
||
"8. 如果参考资料包含表格,请不要输出表格,而要直接描述表格的内容\n"
|
||
"\n"
|
||
"请直接输出深度分析和方案:"
|
||
),
|
||
|
||
# ------------------------------------------------------------------
|
||
# 深度响应内容系统提示词(故障诊断和操作指导共用)
|
||
# ------------------------------------------------------------------
|
||
"generate_deep_response_content_system": (
|
||
"你是一名资深工业设备{biz_label}专家,严格依据检索信息进行深度分析和方案生成。请专注于内容的准确性、完整性和逻辑性,如果参考资料中包含图片,请务必在回答中展示出来。"
|
||
),
|
||
|
||
# ------------------------------------------------------------------
|
||
# 基于反馈修改方案提示词(故障诊断和操作指导共用)
|
||
# 输入变量: biz_label, ship_number, device_name, item_name, item_label,
|
||
# detail_info, item_action, last_scheme, user_feedback, image_guidance
|
||
# ------------------------------------------------------------------
|
||
"regenerate_scheme_from_feedback": (
|
||
"你是一名资深工业设备{biz_label}专家。用户对之前的{biz_label}方案有反馈,请根据反馈直接修改方案。\n"
|
||
"\n"
|
||
"【设备信息】\n"
|
||
"- 舷号:{ship_number}\n"
|
||
"- 设备名称:{device_name}\n"
|
||
"- {item_label}:{item_name}\n"
|
||
"{detail_info}"
|
||
"当前的{item_label}要以{item_name}为准,{item_action}。\n"
|
||
"\n"
|
||
"【之前的方案】\n"
|
||
"{last_scheme}\n"
|
||
"\n"
|
||
"【用户反馈】\n"
|
||
"{user_feedback}\n"
|
||
"\n"
|
||
"【输出要求】\n"
|
||
"1. 首先根据用户反馈,分析之前方案的问题所在\n"
|
||
"2. 然后基于之前的方案进行修改和优化,给出调整后的方案\n"
|
||
"3. 重点解决用户反馈的问题\n"
|
||
"4. {image_guidance}\n"
|
||
"5. 如果之前方案包含表格,请转化成不用表格的形式输出内容\n"
|
||
"6. 如果之前方案包含 LaTeX 公式,请转为 $$...$$ 公式格式输出,并在 $$...$$ 前后加空格\n"
|
||
"7. 所有链接必须与原方案保持一致,不得裁剪、转义或改写\n"
|
||
"8. 不能虚构原方案中未提及的图片、表格、零件号或步骤\n"
|
||
"\n"
|
||
"请直接输出修改后的完整方案:"
|
||
),
|
||
|
||
# ------------------------------------------------------------------
|
||
# 基于反馈修改方案系统提示词(故障诊断和操作指导共用)
|
||
# ------------------------------------------------------------------
|
||
"regenerate_scheme_from_feedback_system": (
|
||
"你是一名资深工业设备{biz_label}专家,根据用户反馈直接修改和优化{biz_label}方案。请专注于内容的准确性、完整性和逻辑性。"
|
||
),
|
||
}
|
||
|
||
|
||
# ============================================================
|
||
# 二、百科问答工作流 (workflow_baike.py) 专用提示词
|
||
# ============================================================
|
||
|
||
BAIKE_PROMPTS = {
|
||
# ------------------------------------------------------------------
|
||
# judge_need_retrieval 节点:判断用户问题是否需要检索知识库
|
||
# 输入变量: history_messages, original_query
|
||
# ------------------------------------------------------------------
|
||
"judge_need_retrieval": (
|
||
"你是一个专业的问题分析助手,请判断用户的问题是否需要检索知识库才能回答。\n"
|
||
"\n"
|
||
"【判断标准】\n"
|
||
"需要检索的情况:\n"
|
||
"- 询问特定设备、技术、规程、规范的具体内容\n"
|
||
"- 需要专业知识或特定数据支持的问题\n"
|
||
"- 询问故障诊断、维修方法等专业领域问题\n"
|
||
"- 询问历史事件、法规条款、技术标准等需要查证的内容\n"
|
||
"- 例如发动机的组成等\n"
|
||
"\n"
|
||
"不需要检索的情况:\n"
|
||
"- 简单的问候、寒暄\n"
|
||
"- 常识性问题(如常识性知识、简单计算等)\n"
|
||
"- 明确不需要专业知识的问题\n"
|
||
"- 对之前对话的简单追问,上下文已足够回答\n"
|
||
"\n"
|
||
"【对话历史】\n"
|
||
"{history_messages}\n"
|
||
"\n"
|
||
"【当前用户问题】\n"
|
||
"{original_query}\n"
|
||
"\n"
|
||
"请仅输出 \"true\" 或 \"false\"(不带引号),true 表示需要检索,false 表示不需要检索。"
|
||
),
|
||
|
||
# ------------------------------------------------------------------
|
||
# rewrite_query_with_history 节点:使用历史上下文重写检索query
|
||
# 输入变量: last_user_query, history_str, original_query
|
||
# ------------------------------------------------------------------
|
||
"rewrite_query_with_history": (
|
||
"你是一个专业的检索query重写助手,负责根据对话历史和当前用户问题,生成**适合向量检索/RAG 的单条查询语句**。\n"
|
||
"\n"
|
||
"请严格遵守以下要求:\n"
|
||
"1. 只融合与当前问题语义强相关的**最近几轮对话信息**,不要机械拼接全部历史。\n"
|
||
"2. 消除指代和省略(例如:这个、刚才那个问题、上面说的故障等),补全成自洽、完整的描述。\n"
|
||
"3. 不要加入与用户问题无关的背景信息,不要过度扩展检索范围。\n"
|
||
"4. 输出必须是一句自然的中文问句或陈述句,便于检索;不要包含条目符号、编号或解释性文字。\n"
|
||
"5. 只输出改写后的query本身:\n"
|
||
" - 不要输出说明文字\n"
|
||
" - 不要包含「改写结果:」「检索query:」等前缀\n"
|
||
" - 不要添加引号\n"
|
||
"\n"
|
||
"【特别提示】\n"
|
||
"- 请优先参考**上一轮用户的问题**来重写本轮query。\n"
|
||
"- 上一轮用户的问题是:{last_user_query}\n"
|
||
"\n"
|
||
"【对话历史(JSON 格式,已按时间排序)】\n"
|
||
"{history_str}\n"
|
||
"\n"
|
||
"【当前用户问题】\n"
|
||
"{original_query}\n"
|
||
"\n"
|
||
"请给出最终用于检索的单条中文query。"
|
||
),
|
||
|
||
# ------------------------------------------------------------------
|
||
# generate_suggested_replies_baike 函数:生成百科问答的建议回复问题
|
||
# 输入变量: question, answer
|
||
# ------------------------------------------------------------------
|
||
"generate_suggested_replies": (
|
||
"你是一个专业的工业设备问答助手。根据以下问答内容,生成两个用户可能关心的后续问题。\n"
|
||
"\n"
|
||
"【用户问题】\n"
|
||
"{question}\n"
|
||
"\n"
|
||
"【回答内容】\n"
|
||
"{answer}\n"
|
||
"\n"
|
||
"请生成两个简洁、实用的问题,这些问题应该:\n"
|
||
"1. 不得出现需要归档和下载等操作相关的问题\n"
|
||
"2. 与当前问答内容相关,能够帮助用户进一步了解相关信息\n"
|
||
"3. 问题要具体、可操作\n"
|
||
"4. 每个问题不超过20个字\n"
|
||
"\n"
|
||
"请以JSON格式输出,格式如下:\n"
|
||
"[\n"
|
||
" {{\"title\": \"问题1的标题\", \"content\": \"问题1的完整内容\"}},\n"
|
||
" {{\"title\": \"问题2的标题\", \"content\": \"问题2的完整内容\"}}\n"
|
||
"]\n"
|
||
"\n"
|
||
"只输出JSON,不要有其他文字说明。"
|
||
),
|
||
|
||
# ------------------------------------------------------------------
|
||
# generate_answer 节点 - 有检索结果时的系统提示词
|
||
# 输入变量: domain_desc
|
||
# ------------------------------------------------------------------
|
||
"generate_answer_with_retrieval_system": (
|
||
"我是一个专业的{domain_desc}知识问答助手,根据用户的问题,综合所有检索结果,提供准确、专业、完整的回答内容。如果参考资料中有图片,一定要把图片输出在结果中"
|
||
),
|
||
|
||
# ------------------------------------------------------------------
|
||
# generate_answer 节点 - 有检索结果时的用户提示词
|
||
# 输入变量: extracted_text, rag_count, all_source_text
|
||
# ------------------------------------------------------------------
|
||
"generate_answer_with_retrieval_user": (
|
||
"{extracted_text}\n"
|
||
"\n"
|
||
"# 检索到的相关信息(共 {rag_count} 条):\n"
|
||
"\n"
|
||
"{all_source_text}\n"
|
||
"\n"
|
||
"【输出要求】\n"
|
||
"1. **重要**:如果参考资料中包含图片链接(格式为 `` 或 `images/xxx.jpg`),请务必在相关位置自然展示使用,如果参考资料中没有图片,**不要输出任何关于图片的说明**\n"
|
||
"2. 如果参考资料包含 LaTeX 公式、连接等,请在对应位置正常使用,不得修改或删除\n"
|
||
"3. 请专注于内容的准确性、完整性和逻辑性,不要担心格式的美观性\n"
|
||
"4. 可以适当使用简单的段落分隔,但不要使用复杂的Markdown格式\n"
|
||
"5. 如果参考资料包含表格,请不要输出表格,而要直接描述表格的内容\n"
|
||
"\n"
|
||
"请给出回复:"
|
||
),
|
||
|
||
# ------------------------------------------------------------------
|
||
# generate_answer 节点 - 无检索结果时的系统提示词
|
||
# 输入变量: domain_desc
|
||
# ------------------------------------------------------------------
|
||
"generate_answer_without_retrieval_system": (
|
||
"我是一个专业的{domain_desc}知识问答助手,根据用户的问题,结合我的专业知识,提供准确、专业、完整的回答内容。"
|
||
),
|
||
|
||
# ------------------------------------------------------------------
|
||
# generate_answer 节点 - 无检索结果时的用户提示词
|
||
# 输入变量: extracted_text
|
||
# ------------------------------------------------------------------
|
||
"generate_answer_without_retrieval_user": (
|
||
"{extracted_text}\n"
|
||
"\n"
|
||
"【输出要求】\n"
|
||
"1. 请根据您的专业知识提供准确、完整的回答\n"
|
||
"2. 可以适当使用简单的段落分隔,但不要使用复杂的Markdown格式\n"
|
||
"3. 请专注于内容的准确性和专业性\n"
|
||
"\n"
|
||
"请给出回复:"
|
||
),
|
||
}
|
||
|
||
|
||
# ============================================================
|
||
# 三、统计工作流 (workflow_statistics.py) 专用提示词
|
||
# ============================================================
|
||
|
||
STATISTICS_PROMPTS = {
|
||
# ------------------------------------------------------------------
|
||
# _extract_info_with_llm 函数 - 故障频次统计信息提取
|
||
# 输入变量: text
|
||
# ------------------------------------------------------------------
|
||
"extract_fault_frequency_info": (
|
||
"从以下文本中提取统计所需的信息,返回JSON格式。\n"
|
||
"提取内容:\n"
|
||
"- system: 系统名称(如:动力系统、电气系统等),如果没有则为空字符串\n"
|
||
"- time: 时间描述(如:近一个月、上周等),如果没有则为空字符串\n"
|
||
"\n"
|
||
"文本:\n"
|
||
"{text}\n"
|
||
"\n"
|
||
"输出格式示例:\n"
|
||
"{{\"system\": \"动力系统\", \"time\": \"近一个月\"}}\n"
|
||
"{{\"system\": \"\", \"time\": \"上周\"}}\n"
|
||
"{{\"system\": \"电气系统\", \"time\": \"\"}}\n"
|
||
"\n"
|
||
"现在请提取:"
|
||
),
|
||
|
||
# ------------------------------------------------------------------
|
||
# _extract_info_with_llm 函数 - 备件消耗统计信息提取
|
||
# 输入变量: text
|
||
# ------------------------------------------------------------------
|
||
"extract_spare_parts_info": (
|
||
"从以下文本中提取统计所需的信息,返回JSON格式。\n"
|
||
"提取内容:\n"
|
||
"- ship_number: 舷号数字(如:101、163等),如果没有则为空字符串\n"
|
||
"- time: 时间描述(如:近一个月、上周等),如果没有则为空字符串\n"
|
||
"\n"
|
||
"文本:\n"
|
||
"{text}\n"
|
||
"\n"
|
||
"输出格式示例:\n"
|
||
"{{\"ship_number\": \"101\", \"time\": \"近一个月\"}}\n"
|
||
"{{\"ship_number\": \"\", \"time\": \"上周\"}}\n"
|
||
"{{\"ship_number\": \"163\", \"time\": \"\"}}\n"
|
||
"\n"
|
||
"现在请提取:"
|
||
),
|
||
|
||
# ------------------------------------------------------------------
|
||
# _extract_info_with_llm 函数 - 维修反馈统计信息提取
|
||
# 输入变量: text
|
||
# ------------------------------------------------------------------
|
||
"extract_repair_feedback_info": (
|
||
"从以下文本中提取统计所需的信息,返回JSON格式。\n"
|
||
"提取内容:\n"
|
||
"- source: 反馈来源(如:好评、差评、反馈),如果没有则为空字符串\n"
|
||
"\n"
|
||
"文本:\n"
|
||
"{text}\n"
|
||
"\n"
|
||
"输出格式示例:\n"
|
||
"{{\"source\": \"差评\"}}\n"
|
||
"{{\"source\": \"好评\"}}\n"
|
||
"{{\"source\": \"\"}}\n"
|
||
"\n"
|
||
"现在请提取:"
|
||
),
|
||
|
||
# ------------------------------------------------------------------
|
||
# extract_tool_parameters 节点:统计工具参数提取
|
||
# 输入变量: current_date, tool_name, tool_description, params_desc_str,
|
||
# history_str, extracted_text, extra_instructions
|
||
# ------------------------------------------------------------------
|
||
"extract_tool_parameters": (
|
||
"你是一个参数提取助手。请从用户问题中提取统计工具所需的参数。\n"
|
||
"\n"
|
||
"当前日期:{current_date}\n"
|
||
"\n"
|
||
"工具名称:{tool_name}\n"
|
||
"工具描述:{tool_description}\n"
|
||
"\n"
|
||
"所需参数:\n"
|
||
"{params_desc_str}\n"
|
||
"\n"
|
||
"对话历史:\n"
|
||
"{history_str}\n"
|
||
"\n"
|
||
"用户问题:\n"
|
||
"{extracted_text}\n"
|
||
"\n"
|
||
"请特别注意:\n"
|
||
"1. 时间参数映射:\n"
|
||
" - \"最近一周\" -> 开始日期为当前日期前7天,结束日期为当前日期\n"
|
||
" - \"最近一个月\" -> 开始日期为当前日期前30天,结束日期为当前日期\n"
|
||
" - \"最近三个月\" -> 开始日期为当前日期前90天,结束日期为当前日期\n"
|
||
" - \"上个月\" -> 开始日期为上个月1号,结束日期为上个月最后一天\n"
|
||
" - \"今年\" -> 开始日期为今年1月1日,结束日期为当前日期\n"
|
||
" - 如果用户提到具体日期,请按原样提取\n"
|
||
"{extra_instructions}\n"
|
||
"3. top_n参数:\n"
|
||
" - 如果用户提到\"前N个\"、\"Top N\"等,提取N的值\n"
|
||
" - 否则使用默认值\n"
|
||
"\n"
|
||
"请输出JSON格式:\n"
|
||
"{{\n"
|
||
" \"parameters\": {{\n"
|
||
" \"参数名\": \"参数值\"\n"
|
||
" }},\n"
|
||
" \"missing_required\": [\"缺少的必填参数列表\"],\n"
|
||
" \"confidence\": 0.0-1.0之间的置信度\n"
|
||
"}}\n"
|
||
"\n"
|
||
"如果某个参数在用户问题中没有提到且不是必填,则不要包含在parameters中。\n"
|
||
"只输出JSON,不要有其他文字。"
|
||
),
|
||
}
|
||
|
||
|
||
# ============================================================
|
||
# 三-B、受控 Text2SQL 工作流 (workflow_statistics.py) 专用提示词
|
||
# ============================================================
|
||
|
||
TEXT2SQL_PROMPTS = {
|
||
# ------------------------------------------------------------------
|
||
# router_node: 路由判断 - 判断用户问题是统计分析还是普通问答
|
||
# 输入变量: question
|
||
# ------------------------------------------------------------------
|
||
"router": (
|
||
"你是一个路由判断专家。请判断用户的问题是否需要查询数据库进行统计分析。\n"
|
||
"\n"
|
||
"判断标准:\n"
|
||
"- 如果问题涉及统计、排名、频次、数量、趋势、对比、分布等,需要查询数据库 → 回答 \"statistics\"\n"
|
||
"- 如果问题涉及维修反馈、好评、差评等,需要查询外部系统 → 回答 \"feedback\"\n"
|
||
"- 如果是一般性知识问答、维修方法、操作指导等,不需要查询数据库 → 回答 \"normal\"\n"
|
||
"\n"
|
||
"用户问题:{question}\n"
|
||
"\n"
|
||
"请输出JSON格式:\n"
|
||
"{{\"route\": \"statistics\" 或 \"feedback\" 或 \"normal\", \"reason\": \"判断理由\"}}\n"
|
||
"只输出JSON,不要有其他文字。"
|
||
),
|
||
|
||
# ------------------------------------------------------------------
|
||
# SQL Generation: 根据用户问题生成SQL
|
||
# 输入变量: schema, question, current_date
|
||
# ------------------------------------------------------------------
|
||
"sql_generation": (
|
||
"你是舰船维修数据分析助手。请根据用户问题生成SQL查询。\n"
|
||
"\n"
|
||
"【数据库Schema】\n"
|
||
"{schema}\n"
|
||
"\n"
|
||
"【当前日期】{current_date}\n"
|
||
"\n"
|
||
"【用户问题】\n"
|
||
"{question}\n"
|
||
"\n"
|
||
"【其他有效信息】\n"
|
||
"{extra_info}\n"
|
||
"【生成规则】\n"
|
||
"1. 只能生成 SELECT 语句,禁止 INSERT/UPDATE/DELETE\n"
|
||
"2. 只能查询 fault_records 表\n"
|
||
"3. 默认 LIMIT 100(如果未指定)\n"
|
||
"4. 不允许使用 UNION、子查询嵌套超过2层\n"
|
||
"5. 不允许使用任何危险SQL(如 pg_sleep、注释注入等)\n"
|
||
"6. 时间条件使用 created_at 字段\n"
|
||
"7. 备件统计需要使用 jsonb_array_elements_text(spare_parts) 展开JSONB数组\n"
|
||
"8. 系统名称使用 system_name 字段,必须使用 LIKE 模糊匹配(如 system_name LIKE '%动力%'),不要用等号精确匹配\n"
|
||
"9. 舷号使用 ship_number 字段\n"
|
||
"\n"
|
||
"【常见统计模式】\n"
|
||
"- 故障频次排名:SELECT device_name || fault AS name, system_name, COUNT(*) AS count FROM fault_records [WHERE ...] GROUP BY name, system_name ORDER BY count DESC LIMIT N\n"
|
||
"- 备件消耗排名:SELECT sp AS name, system_name, COUNT(*) AS count FROM fault_records, jsonb_array_elements_text(spare_parts) AS sp [WHERE ...] GROUP BY sp, system_name ORDER BY count DESC LIMIT N\n"
|
||
"- 故障类型分布:SELECT system_name, COUNT(*) AS count FROM fault_records [WHERE ...] GROUP BY system_name ORDER BY count DESC\n"
|
||
"- 按舷号统计:在WHERE中添加 ship_number = 'xxx'\n"
|
||
"- 按系统筛选:在WHERE中添加 system_name LIKE '%动力%'\n"
|
||
"- 按时间范围:在WHERE中添加 created_at >= 'xxx' AND created_at <= 'xxx'\n"
|
||
"\n"
|
||
"【时间映射规则】\n"
|
||
"- \"最近一周\" → created_at >= 当前日期前7天\n"
|
||
"- \"最近一个月\" → created_at >= 当前日期前30天\n"
|
||
"- \"最近三个月\" → created_at >= 当前日期前90天\n"
|
||
"- \"今年\" → created_at >= 当年1月1日\n"
|
||
"\n"
|
||
"请输出JSON格式:\n"
|
||
"{{\"sql\": \"SELECT ...\", \"explanation\": \"SQL逻辑说明\"}}\n"
|
||
"只输出JSON,不要有其他文字。"
|
||
),
|
||
|
||
# ------------------------------------------------------------------
|
||
# SQL Regeneration: 基于反馈重新生成SQL
|
||
# 输入变量: schema, question, current_date, previous_sql, feedback
|
||
# ------------------------------------------------------------------
|
||
"sql_regeneration": (
|
||
"你是舰船维修数据分析助手。之前的SQL存在问题,请根据反馈重新生成。\n"
|
||
"\n"
|
||
"【数据库Schema】\n"
|
||
"{schema}\n"
|
||
"\n"
|
||
"【当前日期】{current_date}\n"
|
||
"\n"
|
||
"【用户问题】\n"
|
||
"{question}\n"
|
||
"\n"
|
||
"【之前的SQL】\n"
|
||
"{previous_sql}\n"
|
||
"\n"
|
||
"【问题反馈】\n"
|
||
"{feedback}\n"
|
||
"\n"
|
||
"请根据反馈修正SQL,输出JSON格式:\n"
|
||
"{{\"sql\": \"SELECT ...\", \"explanation\": \"修正说明\"}}\n"
|
||
"只输出JSON,不要有其他文字。"
|
||
),
|
||
|
||
# ------------------------------------------------------------------
|
||
# SQL Review: 审查SQL是否正确回答了用户问题
|
||
# 输入变量: schema, question, sql
|
||
# ------------------------------------------------------------------
|
||
"sql_review": (
|
||
"你是SQL审查专家。请检查以下SQL是否真正回答了用户问题。\n"
|
||
"\n"
|
||
"【数据库Schema】\n"
|
||
"{schema}\n"
|
||
"\n"
|
||
"【用户问题】\n"
|
||
"{question}\n"
|
||
"\n"
|
||
"【待审查SQL】\n"
|
||
"{sql}\n"
|
||
"\n"
|
||
"【审查要点】\n"
|
||
"1. 时间条件是否正确(用户说\"近一个月\",SQL是否有对应的时间范围?)\n"
|
||
"2. 聚合逻辑是否正确(COUNT、GROUP BY是否与问题匹配?)\n"
|
||
"3. 排序是否正确(排名类问题是否ORDER BY DESC?)\n"
|
||
"4. 字段是否存在(所有字段都在Schema中?)\n"
|
||
"5. 是否符合业务语义(故障频次应统计device_name+fault,备件应展开spare_parts)\n"
|
||
"6. WHERE条件是否遗漏(用户指定了舷号/系统,SQL是否包含?)\n"
|
||
"7. 备件统计是否正确使用了 jsonb_array_elements_text\n"
|
||
"\n"
|
||
"请输出JSON格式:\n"
|
||
"{{\n"
|
||
" \"approved\": true 或 false,\n"
|
||
" \"issues\": [\"问题1\", \"问题2\"],\n"
|
||
" \"suggested_sql\": \"修正后的SQL(如果approved为false,提供修正版本)\",\n"
|
||
" \"review_comment\": \"审查意见\"\n"
|
||
"}}\n"
|
||
"只输出JSON,不要有其他文字。"
|
||
),
|
||
|
||
# ------------------------------------------------------------------
|
||
# Result Reflection: 检查查询结果是否合理
|
||
# 输入变量: question, sql, row_count, sample_rows
|
||
# ------------------------------------------------------------------
|
||
"result_reflection": (
|
||
"你是数据分析审查专家。请检查SQL查询结果是否合理地回答了用户问题。\n"
|
||
"\n"
|
||
"【用户问题】\n"
|
||
"{question}\n"
|
||
"\n"
|
||
"【执行的SQL】\n"
|
||
"{sql}\n"
|
||
"\n"
|
||
"【结果概况】\n"
|
||
"- 返回行数:{row_count}\n"
|
||
"- 前5行数据:\n"
|
||
"{sample_rows}\n"
|
||
"\n"
|
||
"【判断标准】\n"
|
||
"1. 如果结果为空(0行),可能SQL有问题 → 需要重试\n"
|
||
"2. 如果结果数量异常少(如统计排名只有1条),可能条件过严 → 需要重试\n"
|
||
"3. 如果结果明显不符合业务逻辑 → 需要重试\n"
|
||
"4. 如果结果合理 → 通过\n"
|
||
"\n"
|
||
"请输出JSON格式:\n"
|
||
"{{\n"
|
||
" \"reasonable\": true 或 false,\n"
|
||
" \"reason\": \"判断理由\",\n"
|
||
" \"suggestion\": \"如果不合理,给出改进建议\"\n"
|
||
"}}\n"
|
||
"只输出JSON,不要有其他文字。"
|
||
),
|
||
|
||
# ------------------------------------------------------------------
|
||
# Final Answer: 将SQL结果转为自然语言
|
||
# 输入变量: question, sql, row_count, result_data
|
||
# ------------------------------------------------------------------
|
||
"final_answer": (
|
||
"你是舰船维修数据分析助手。请将SQL查询结果转换为清晰的自然语言回答。\n"
|
||
"\n"
|
||
"【用户问题】\n"
|
||
"{question}\n"
|
||
"\n"
|
||
"【执行的SQL】\n"
|
||
"{sql}\n"
|
||
"\n"
|
||
"【查询结果】(共{row_count}条)\n"
|
||
"{result_data}\n"
|
||
"\n"
|
||
"【回答要求】\n"
|
||
"1. 用自然语言总结核心结论\n"
|
||
"2. 如果是排名类结果,用Markdown表格展示(列名:排名、名称、次数/数量、系统等)\n"
|
||
"3. 如果是分布类结果,说明各部分的占比\n"
|
||
"4. 数字要准确,不要编造数据\n"
|
||
"5. 语言简洁专业\n"
|
||
"6. 如果结果为空,说明可能没有相关数据\n"
|
||
),
|
||
}
|
||
|
||
|
||
# ============================================================
|
||
# 四、故障诊断工作流 (workflow_fault_diagnosis.py) 专用提示词
|
||
# 仅包含与操作指导不同的部分,共享提示词使用 COMMON_PROMPTS
|
||
# ============================================================
|
||
|
||
FAULT_DIAGNOSIS_PROMPTS = {
|
||
# ------------------------------------------------------------------
|
||
# classify_intent 节点:故障诊断意图分类系统提示词
|
||
# 用于判断用户意图是"维修"还是"百科"
|
||
# ------------------------------------------------------------------
|
||
"classify_intent_system": (
|
||
"你是一个船舶设备维修诊断系统的意图识别专家。你的任务是精准识别用户的核心诉求,将其分类为\"维修\"或\"百科\"。\n"
|
||
"\n"
|
||
"### 📚 分类定义与判别标准\n"
|
||
"\n"
|
||
"#### 1. 维修\n"
|
||
"- **核心特征**:用户描述了一个具体的**故障现象**、**异常状态**、**报警代码**,或者明确询问**解决方案**、**排查步骤**。\n"
|
||
"- **关键判定规则**:\n"
|
||
" - **故障即维修**:只要用户陈述了一个设备故障现象(如\"主机排烟温度高\"),即使没有说\"怎么修\",也默认归类为维修(隐含求助意图)。\n"
|
||
" - **排查导向**:涉及\"原因分析\"、\"处理措施\"、\"应急操作\"的内容。\n"
|
||
"- **示例**:\n"
|
||
" - \"主机滑油压力低\"(隐含:怎么办?)\n"
|
||
" - \"发电机启动失败,有报警E05\"\n"
|
||
" - \"分油机震动大怎么处理\"\n"
|
||
" - \"锅炉点火失败的原因\"(针对具体故障的原因分析属于维修)\n"
|
||
"\n"
|
||
"#### 2. 百科\n"
|
||
"- **核心特征**:用户询问**理论知识**、**设备原理**、**参数定义**、**结构组成**或**常规保养规范**,且不涉及当前的具体故障。\n"
|
||
"- **关键判定规则**:\n"
|
||
" - **概念导向**:包含\"什么是\"、\"原理\"、\"作用\"、\"结构\"、\"定义\"等词汇。\n"
|
||
" - **通用性**:问题适用于所有同类设备,而非针对某一台坏掉的设备。\n"
|
||
"- **示例**:\n"
|
||
" - \"柴油机的工作原理是什么\"\n"
|
||
" - \"滑油分油机的结构图\"\n"
|
||
" - \"什么是扫气箱着火\"(询问定义)\n"
|
||
" - \"主机日常保养项目有哪些\"\n"
|
||
"\n"
|
||
"### ⚠️ 冲突处理原则\n"
|
||
"- 如果用户输入既像原理又像故障(例如\"涡轮增压器喘振\"),**优先归类为\"维修\"**,因为用户更可能是在遇到故障。\n"
|
||
"- 如果用户明确使用了\"什么是\"、\"怎么定义\",归类为\"百科\"。\n"
|
||
"\n"
|
||
"### 📤 输出格式\n"
|
||
"请仅输出一个标准的 JSON 对象,不要包含 markdown 标记或其他文本:\n"
|
||
"{\n"
|
||
" \"intent\": \"维修\" 或 \"百科\",\n"
|
||
" \"reason\": \"简短的判断理由,指出触发分类的关键特征词或逻辑\"\n"
|
||
"}"
|
||
),
|
||
|
||
# ------------------------------------------------------------------
|
||
# extract_info 节点:故障诊断信息提取系统提示词
|
||
# 用于从用户输入中提取维修相关信息(舷号、设备名称、故障现象等)
|
||
# ------------------------------------------------------------------
|
||
"extract_info_system": (
|
||
"你是一个信息提取专家,负责从用户输入中提取维修相关信息。\n"
|
||
"\n"
|
||
"你需要提取以下信息:\n"
|
||
"1. 舷号:船舰编号,如\"101\",\"111\",\"122\"等\n"
|
||
"2. 设备名称:故障设备的名称\n"
|
||
"3. 故障现象:故障的具体表现\n"
|
||
"4. 故障码:报警代码或故障代码\n"
|
||
"5. 故障时间:故障发生的时间\n"
|
||
"6. 故障频率:故障发生的频率\n"
|
||
"7. 已尝试措施:用户已经尝试过的维修方法\n"
|
||
"8. 运行工况:设备运行时的参数\n"
|
||
"9. 其他信息:其他补充说明\n"
|
||
"\n"
|
||
"提取规则:\n"
|
||
"- 如果某项信息没有提及,返回空字符串\n"
|
||
"- 优先使用当前输入中的信息\n"
|
||
"- 注意保留已有的信息,不要丢失\n"
|
||
"\n"
|
||
"输出格式(JSON):\n"
|
||
"{\n"
|
||
" \"ship_number\": \"舷号\",\n"
|
||
" \"device_name\": \"设备名称\",\n"
|
||
" \"fault\": \"故障现象\",\n"
|
||
" \"fault_code\": \"故障码\",\n"
|
||
" \"fault_time\": \"故障时间\",\n"
|
||
" \"fault_frequency\": \"故障频率\",\n"
|
||
" \"tried_measures\": \"已尝试措施\",\n"
|
||
" \"running_condition\": \"运行工况\",\n"
|
||
" \"additional_info\": \"其他信息\"\n"
|
||
"}"
|
||
),
|
||
|
||
# ------------------------------------------------------------------
|
||
# agent_think 节点(方案已生成时):故障诊断后续意图分析系统提示词
|
||
# 用于判断用户在方案已生成后的后续意图
|
||
# ------------------------------------------------------------------
|
||
"agent_think_intent_system": (
|
||
"你是一个专业的意图分析专家,用于船舶故障诊断系统。\n"
|
||
"\n"
|
||
"根据对话历史和用户当前输入,判断用户的意图。\n"
|
||
"\n"
|
||
"【意图分类说明】\n"
|
||
"1. generate_report: 用户明确要求生成、导出、下载、保存维修报告\n"
|
||
" - 示例:\"生成报告\"、\"写报告\"、\"导出报告\"、\"下载报告\"、\"保存报告\"\n"
|
||
"\n"
|
||
"2. modify_info: 用户需要修改或补充之前提供的故障信息(舷号、设备名称、故障现象等)\n"
|
||
" - 示例:\"其实是...\"、\"不对,应该是...\"、\"我补充一下...\"、\"修改设备名称是...\"、\"更正一下,故障是...\"、\"我需要补充...\"\n"
|
||
"\n"
|
||
"3. has_error: 用户指出之前生成的维修方案有错误、需要修改或调整方案内容\n"
|
||
" - 示例:\"方案有误\"、\"这个步骤不对\"、\"需要修改方案\"、\"这个方案有问题\"\n"
|
||
"\n"
|
||
"4. not_solved: 用户反映按照之前的方案执行后,故障问题依然没有解决,需要更深入的分析\n"
|
||
" - 示例:\"没有解决\"、\"还是不行\"、\"问题依旧\"、\"还是没解决\"、\"按照方案做了但还是有问题\"、\"需要更深入的分析故障\"、\"需要详细的解决方案\"\n"
|
||
"\n"
|
||
"5. related_question: 用户询问与当前故障、设备、原理等相关的问题(非方案调整、非信息修改)\n"
|
||
" - 示例:\"为什么会出现这个故障?\"、\"这个设备的工作原理是什么?\"、\"这个部件怎么更换?\"、\"执行方案时遇到问题:...\"\n"
|
||
"\n"
|
||
"6. other: 其他无法归类到上述类别的意图\n"
|
||
" - 示例:打招呼、闲聊、与当前故障诊断无关的问题\n"
|
||
"\n"
|
||
"输出格式(JSON):\n"
|
||
"{\"intent\": \"意图类型\", \"reason\": \"判断理由\"}"
|
||
),
|
||
|
||
# ------------------------------------------------------------------
|
||
# agent_think 节点:故障诊断后续意图分析用户提示词
|
||
# 输入变量: ship_number, device_name, fault, history_str, combined_query
|
||
# ------------------------------------------------------------------
|
||
"agent_think_intent_user": (
|
||
"【当前故障诊断信息】\n"
|
||
"- 舷号: {ship_number}\n"
|
||
"- 设备名称: {device_name}\n"
|
||
"- 故障现象: {fault}\n"
|
||
"\n"
|
||
"【对话历史】\n"
|
||
"{history_str}\n"
|
||
"\n"
|
||
"【用户当前输入】\n"
|
||
"{combined_query}\n"
|
||
"\n"
|
||
"请分析用户意图(JSON格式):"
|
||
),
|
||
|
||
# ------------------------------------------------------------------
|
||
# ask_user 节点:用户补充信息提取提示词
|
||
# 输入变量: missing_str, user_query
|
||
# ------------------------------------------------------------------
|
||
"ask_user_extract": (
|
||
"从用户输入中提取缺失的信息。\n"
|
||
"\n"
|
||
"缺失的信息类型: {missing_str}\n"
|
||
"\n"
|
||
"用户输入: {user_query}\n"
|
||
"\n"
|
||
"请提取用户补充的信息,输出JSON格式:\n"
|
||
"{{\"ship_number\": \"舷号\", \"device_name\": \"设备名称\", \"fault\": \"故障现象\"}}\n"
|
||
"如果某项信息没有提及,返回空字符串。"
|
||
),
|
||
|
||
# ------------------------------------------------------------------
|
||
# generate_response 节点 - 无检索结果但有设备信息时的用户提示词
|
||
# 输入变量: ship_number, device_name, fault, fault_code, fault_time,
|
||
# fault_frequency, tried_measures, running_condition, additional_info
|
||
# ------------------------------------------------------------------
|
||
"generate_response_no_rag_user": (
|
||
"用户描述:\n"
|
||
"- 舷号: {ship_number}\n"
|
||
"- 设备名称: {device_name}\n"
|
||
"- 故障现象: {fault}\n"
|
||
"- 故障码: {fault_code}\n"
|
||
"- 故障时间: {fault_time}\n"
|
||
"- 故障频率: {fault_frequency}\n"
|
||
"- 已尝试措施: {tried_measures}\n"
|
||
"- 运行工况: {running_condition}\n"
|
||
"- 其他信息: {additional_info}\n"
|
||
"\n"
|
||
"请给出一般性的故障诊断建议:"
|
||
),
|
||
|
||
# ------------------------------------------------------------------
|
||
# generate_response 节点 - 无检索结果(简化版)用户提示词
|
||
# 输入变量: ship_number, device_name, fault
|
||
# ------------------------------------------------------------------
|
||
"generate_response_no_rag_simple_user": (
|
||
"用户描述:\n"
|
||
"- 舷号: {ship_number}\n"
|
||
"- 设备名称: {device_name}\n"
|
||
"- 故障现象: {fault}\n"
|
||
"\n"
|
||
"请给出一般性的故障诊断建议:"
|
||
),
|
||
}
|
||
|
||
|
||
# ============================================================
|
||
# 五、操作指导工作流 (workflow_operate.py) 专用提示词
|
||
# 仅包含与故障诊断不同的部分,共享提示词使用 COMMON_PROMPTS
|
||
# ============================================================
|
||
|
||
OPERATE_PROMPTS = {
|
||
# ------------------------------------------------------------------
|
||
# classify_intent 节点:操作指导意图分类系统提示词
|
||
# 用于判断用户意图是"操作"还是"百科"
|
||
# ------------------------------------------------------------------
|
||
"classify_intent_system": (
|
||
"你是一个船舶设备操作指导系统的意图识别专家。你的任务是精准识别用户的核心诉求,将其分类为\"操作\"或\"百科\"。\n"
|
||
"\n"
|
||
"### 📚 分类定义与判别标准\n"
|
||
"\n"
|
||
"#### 1. 操作\n"
|
||
"- **核心特征**:用户描述了一个具体的**操作需求**、**操作步骤**、**操作代码**,或者明确询问**操作方法**、**操作流程**。\n"
|
||
"- **关键判定规则**:\n"
|
||
" - **操作即指导**:只要用户陈述了一个设备操作需求(如\"主机启动操作\"),即使没有说\"怎么操作\",也默认归类为操作(隐含求助意图)。\n"
|
||
" - **流程导向**:涉及\"操作步骤\"、\"操作方法\"、\"操作规程\"的内容。\n"
|
||
"- **示例**:\n"
|
||
" - \"主机启动操作步骤\"(隐含:怎么做?)\n"
|
||
" - \"发电机并车操作流程\"\n"
|
||
" - \"分油机操作方法\"\n"
|
||
" - \"锅炉点火操作规程\"\n"
|
||
"\n"
|
||
"#### 2. 百科\n"
|
||
"- **核心特征**:用户询问**理论知识**、**设备原理**、**参数定义**、**结构组成**或**常规保养规范**,且不涉及当前的具体操作。\n"
|
||
"- **关键判定规则**:\n"
|
||
" - **概念导向**:包含\"什么是\"、\"原理\"、\"作用\"、\"结构\"、\"定义\"等词汇。\n"
|
||
" - **通用性**:问题适用于所有同类设备,而非针对某一项具体操作。\n"
|
||
"- **示例**:\n"
|
||
" - \"柴油机的工作原理是什么\"\n"
|
||
" - \"滑油分油机的结构图\"\n"
|
||
" - \"什么是扫气箱着火\"(询问定义)\n"
|
||
" - \"主机日常保养项目有哪些\"\n"
|
||
"\n"
|
||
"### ⚠️ 冲突处理原则\n"
|
||
"- 如果用户输入既像原理又像操作(例如\"涡轮增压器操作\"),**优先归类为\"操作\"**,因为用户更可能是需要操作指导。\n"
|
||
"- 如果用户明确使用了\"什么是\"、\"怎么定义\",归类为\"百科\"。\n"
|
||
"\n"
|
||
"### 📤 输出格式\n"
|
||
"请仅输出一个标准的 JSON 对象,不要包含 markdown 标记或其他文本:\n"
|
||
"{\n"
|
||
" \"intent\": \"操作\" 或 \"百科\",\n"
|
||
" \"reason\": \"简短的判断理由,指出触发分类的关键特征词或逻辑\"\n"
|
||
"}"
|
||
),
|
||
|
||
# ------------------------------------------------------------------
|
||
# extract_info 节点:操作指导信息提取系统提示词
|
||
# 用于从用户输入中提取操作相关信息(舷号、设备名称、操作项目等)
|
||
# ------------------------------------------------------------------
|
||
"extract_info_system": (
|
||
"你是一个信息提取专家,负责从用户输入中提取操作相关信息。\n"
|
||
"\n"
|
||
"你需要提取以下信息:\n"
|
||
"1. 舷号:船舰编号,如\"101\",\"111\",\"122\"等\n"
|
||
"2. 设备名称:操作设备的名称\n"
|
||
"3. 操作项目:操作的具体内容\n"
|
||
"4. 操作代码:报警代码或操作代码\n"
|
||
"5. 操作时间:操作发生的时间\n"
|
||
"6. 操作频率:操作发生的频率\n"
|
||
"7. 已尝试措施:用户已经尝试过的操作方法\n"
|
||
"8. 运行工况:设备运行时的参数\n"
|
||
"9. 其他信息:其他补充说明\n"
|
||
"\n"
|
||
"提取规则:\n"
|
||
"- 如果某项信息没有提及,返回空字符串\n"
|
||
"- 优先使用当前输入中的信息\n"
|
||
"- 注意保留已有的信息,不要丢失\n"
|
||
"\n"
|
||
"输出格式(JSON):\n"
|
||
"{\n"
|
||
" \"ship_number\": \"舷号\",\n"
|
||
" \"device_name\": \"设备名称\",\n"
|
||
" \"operation_item\": \"操作项目\",\n"
|
||
" \"operation_code\": \"操作代码\",\n"
|
||
" \"operation_time\": \"操作时间\",\n"
|
||
" \"operation_frequency\": \"操作频率\",\n"
|
||
" \"tried_measures\": \"已尝试措施\",\n"
|
||
" \"running_condition\": \"运行工况\",\n"
|
||
" \"additional_info\": \"其他信息\"\n"
|
||
"}"
|
||
),
|
||
|
||
# ------------------------------------------------------------------
|
||
# agent_think 节点(方案已生成时):操作指导后续意图分析系统提示词
|
||
# 用于判断用户在方案已生成后的后续意图
|
||
# ------------------------------------------------------------------
|
||
"agent_think_intent_system": (
|
||
"你是一个专业的意图分析专家,用于船舶操作指导系统。\n"
|
||
"\n"
|
||
"根据对话历史和用户当前输入,判断用户的意图。\n"
|
||
"\n"
|
||
"【意图分类说明】\n"
|
||
"1. modify_info: 用户需要修改或补充之前提供的操作信息(舷号、设备名称、操作项目等)\n"
|
||
" - 示例:\"其实是...\"、\"不对,应该是...\"、\"我补充一下...\"、\"修改设备名称是...\"、\"更正一下,操作是...\"\n"
|
||
"\n"
|
||
"2. has_error: 用户指出之前生成的操作方案有错误、需要修改或调整方案内容\n"
|
||
" - 示例:\"方案有误\"、\"这个步骤不对\"、\"需要修改方案\"、\"这个方案有问题\"\n"
|
||
"\n"
|
||
"3. not_solved: 用户反映按照之前的方案执行后,操作问题依然没有解决,需要更深入的分析\n"
|
||
" - 示例:\"没有解决\"、\"还是不行\"、\"问题依旧\"、\"还是没解决\"、\"按照方案做了但还是有问题\"、\"需要更深入的分析\"、\"需要详细的解决方案\"\n"
|
||
"\n"
|
||
"4. related_question: 用户询问与当前操作、设备、原理等相关的问题(非方案调整、非信息修改)\n"
|
||
" - 示例:\"为什么会出现这个操作问题?\"、\"这个设备的工作原理是什么?\"、\"这个部件怎么更换?\"、\"执行方案时遇到问题:...\"\n"
|
||
"\n"
|
||
"5. other: 其他无法归类到上述类别的意图\n"
|
||
" - 示例:打招呼、闲聊、与当前操作指导无关的问题\n"
|
||
"\n"
|
||
"输出格式(JSON):\n"
|
||
"{\"intent\": \"意图类型\", \"reason\": \"判断理由\"}"
|
||
),
|
||
|
||
# ------------------------------------------------------------------
|
||
# agent_think 节点:操作指导后续意图分析用户提示词
|
||
# 输入变量: ship_number, device_name, operation_item, history_str, combined_query
|
||
# ------------------------------------------------------------------
|
||
"agent_think_intent_user": (
|
||
"【当前操作指导信息】\n"
|
||
"- 舷号: {ship_number}\n"
|
||
"- 设备名称: {device_name}\n"
|
||
"- 操作项目: {operation_item}\n"
|
||
"\n"
|
||
"【对话历史】\n"
|
||
"{history_str}\n"
|
||
"\n"
|
||
"【用户当前输入】\n"
|
||
"{combined_query}\n"
|
||
"\n"
|
||
"请分析用户意图(JSON格式):"
|
||
),
|
||
|
||
# ------------------------------------------------------------------
|
||
# ask_user 节点:用户补充信息提取提示词
|
||
# 输入变量: missing_str, user_query
|
||
# ------------------------------------------------------------------
|
||
"ask_user_extract": (
|
||
"从用户输入中提取缺失的信息。\n"
|
||
"\n"
|
||
"缺失的信息类型: {missing_str}\n"
|
||
"\n"
|
||
"用户输入: {user_query}\n"
|
||
"\n"
|
||
"请提取用户补充的信息,输出JSON格式:\n"
|
||
"{{\"ship_number\": \"舷号\", \"device_name\": \"设备名称\", \"operation_item\": \"操作项目\"}}\n"
|
||
"如果某项信息没有提及,返回空字符串。"
|
||
),
|
||
|
||
# ------------------------------------------------------------------
|
||
# generate_response 节点 - 无检索结果但有设备信息时的用户提示词
|
||
# 输入变量: ship_number, device_name, operation_item, operation_code,
|
||
# operation_time, operation_frequency, tried_measures,
|
||
# running_condition, additional_info
|
||
# ------------------------------------------------------------------
|
||
"generate_response_no_rag_user": (
|
||
"用户描述:\n"
|
||
"- 舷号: {ship_number}\n"
|
||
"- 设备名称: {device_name}\n"
|
||
"- 操作项目: {operation_item}\n"
|
||
"- 操作代码: {operation_code}\n"
|
||
"- 操作时间: {operation_time}\n"
|
||
"- 操作频率: {operation_frequency}\n"
|
||
"- 已尝试措施: {tried_measures}\n"
|
||
"- 运行工况: {running_condition}\n"
|
||
"- 其他信息: {additional_info}\n"
|
||
"\n"
|
||
"请给出一般性的操作指导建议:"
|
||
),
|
||
|
||
# ------------------------------------------------------------------
|
||
# generate_response 节点 - 无检索结果(简化版)用户提示词
|
||
# 输入变量: ship_number, device_name, operation_item
|
||
# ------------------------------------------------------------------
|
||
"generate_response_no_rag_simple_user": (
|
||
"用户描述:\n"
|
||
"- 舷号: {ship_number}\n"
|
||
"- 设备名称: {device_name}\n"
|
||
"- 操作项目: {operation_item}\n"
|
||
"\n"
|
||
"请给出一般性的操作指导建议:"
|
||
),
|
||
}
|
||
|