""" 提示词集中管理模块 将各工作流中的提示词统一提取到此处,方便调整和维护。 每个提示词都附有详细注释说明其用途和所属工作流节点。 模块结构: - 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. 确保图片链接在相关位置自然展示使用,并且只输出准确格式,`![图片](/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" "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": ( "你是一个专业的问题分析助手,请判断用户的问题是否需要检索知识库才能回答。\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. **重要**:如果参考资料中包含图片链接(格式为 `![图片](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" "请给出一般性的操作指导建议:" ), }