gwdoc/prompts.py

1232 lines
62 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""
提示词集中管理模块
将各工作流中的提示词统一提取到此处,方便调整和维护。
每个提示词都附有详细注释说明其用途和所属工作流节点。
模块结构:
- 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"
"3. 确保图片链接在相关位置自然展示使用,并且只输出准确格式,`![图片](/api/v1/knowledge/files/images/xxx.jpg)` \n"
"4. 如果参考资料中没有图片,**不要输出任何关于图片的说明**\n"
"5. 确保LaTeX公式格式正确$$...$$,并在 $$...$$ 前后加空格\n"
"6. 如果有代码片段,使用适当的代码块格式\n"
"7. 不要添加任何额外的解释或说明\n"
"\n"
"【图片输出示例】\n"
"示例一: 原始内容:`![图片](images/xxx.jpg)`\n"
" 规范后输出:`![图片](/api/v1/knowledge/files/images/xxx.jpg)`\n"
"示例二: 原始内容:`![图片](/api/v1/knowledge/files/images/xxx.jpg)`\n"
" 规范后输出:`![图片](/api/v1/knowledge/files/images/xxx.jpg)`\n"
"示例三: 原始内容:`images/xxx.jpg`\n"
" 规范后输出:`![图片](/api/v1/knowledge/files/images/xxx.jpg)`\n"
"示例四: 原始内容:`xxx.jpg`\n"
" 规范后输出:`![图片](/api/v1/knowledge/files/images/xxx.jpg)`\n"
"示例五: 原始内容:`![油污清理](/api/v1/knowledge/files/images/ce9650912c24fa0ed693228469322ec2a735f14d9ac729a1dc87427441bad0b.jpg)`\n"
" 规范后输出:`![图片](/api/v1/knowledge/files/images/ce9650912c24fa0ed693228469322ec2a735f14d9ac729a1dc87427441bad0b.jpg)`\n"
"示例六: 原始内容:`![部分断裂的螺栓及垫片](![图片](/api/v1/knowledge/files/images/e34eb1ddbe26730c84409e02365db416e74ce9e3bf2793a2605db5a085548415.jpg)`\n"
" 规范后输出:`![图片](/api/v1/knowledge/files/images/e34eb1ddbe26730c84409e02365db416e74ce9e3bf2793a2605db5a085548415.jpg)`\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"
"3. 确保图片链接保持原样:`![图片](URL)`\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. **重要**:如果参考资料中包含图片链接(格式为 `![图片](URL)` 或 `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. **重要**:如果参考资料中包含图片链接(格式为 `![图片](URL)` 或 `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": (
"You are an intent classifier for a knowledge-base QA assistant. Decide whether the user question needs retrieval.\n"
"\n"
"Return true when the question asks about documents, files, knowledge-base content, equipment, systems, faults, operations, standards, procedures, meeting notes, database-related materials, or any factual/domain-specific information.\n"
"Return false only for pure greetings, thanks, cancellation/confirmation with no substantive question, or a follow-up that can be fully answered from the conversation history alone.\n"
"Default rule: when unsure, return true.\n"
"\n"
"Conversation history:\n"
"{history_messages}\n"
"\n"
"User question:\n"
"{original_query}\n"
"\n"
"Output only true or 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. **重要**:如果参考资料中包含图片链接(格式为 `![图片](URL)` 或 `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"
"请给出一般性的操作指导建议:"
),
}