"""
提示词集中管理模块
将各工作流中的提示词统一提取到此处，方便调整和维护。
每个提示词都附有详细注释说明其用途和所属工作流节点。

模块结构：
- 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"
        "请给出一般性的操作指导建议："
    ),
}

