306 lines
9.2 KiB
Python
306 lines
9.2 KiB
Python
"""
|
||
GraphRAG core prompts (Chinese, aerospace-oriented).
|
||
"""
|
||
|
||
GRAPH_FIELD_SEP = "<SEP>"
|
||
PROMPTS = {}
|
||
|
||
PROMPTS[
|
||
"claim_extraction"
|
||
] = """-任务定位-
|
||
你是航天知识情报分析助手,负责从文本中抽取实体相关的主张/断言(claim)。
|
||
|
||
-目标-
|
||
给定输入文本、实体约束和主张说明,抽取满足条件的实体及其对应主张,结果必须可溯源。
|
||
|
||
-执行步骤-
|
||
1. 先识别满足实体约束的命名实体。实体约束可能是实体名称列表,也可能是实体类型列表。
|
||
2. 对步骤1中的每个实体,抽取其作为主语的主张。每条主张需输出:
|
||
- Subject: 主张主体实体名(大写;必须来自步骤1)
|
||
- Object: 客体实体名(大写;未知时使用 **NONE**)
|
||
- Claim Type: 主张类型(大写;应可复用)
|
||
- Claim Status: **TRUE**、**FALSE** 或 **SUSPECTED**
|
||
- Claim Description: 说明主张的依据、逻辑和关键证据
|
||
- Claim Date: 起止时间(ISO-8601);未知时为 **NONE**
|
||
- Claim Source Text: 与主张直接相关的原文引文(尽量完整)
|
||
|
||
格式要求:
|
||
(<subject_entity>{tuple_delimiter}<object_entity>{tuple_delimiter}<claim_type>{tuple_delimiter}<claim_status>{tuple_delimiter}<claim_start_date>{tuple_delimiter}<claim_end_date>{tuple_delimiter}<claim_description>{tuple_delimiter}<claim_source>)
|
||
|
||
3. 使用 **{record_delimiter}** 连接所有记录。
|
||
4. 结束时输出 {completion_delimiter}。
|
||
|
||
-约束-
|
||
- 仅基于输入文本,不得编造。
|
||
- 航天语境优先(如航天器、推进系统、姿态控制、任务阶段、地面系统、试验事件、故障模式等)。
|
||
|
||
-输入-
|
||
Entity specification: {entity_specs}
|
||
Claim description: {claim_description}
|
||
Text: {input_text}
|
||
Output: """
|
||
|
||
PROMPTS[
|
||
"community_report"
|
||
] = """你是航天领域知识图谱分析助手,负责为一个社区(community)生成结构化研判报告。
|
||
|
||
# 目标
|
||
根据给定的实体、关系和可选主张,输出可用于技术评审与任务决策的社区报告。
|
||
|
||
# 报告结构
|
||
必须返回 JSON 字符串,结构如下:
|
||
{
|
||
"title": <标题>,
|
||
"summary": <执行摘要>,
|
||
"rating": <0-10 浮点评分>,
|
||
"rating_explanation": <评分说明>,
|
||
"findings": [
|
||
{
|
||
"summary": <要点小结>,
|
||
"explanation": <详细说明>
|
||
}
|
||
]
|
||
}
|
||
|
||
# 字段要求
|
||
- title: 简洁且具体,尽量包含代表性实体。
|
||
- summary: 说明社区整体结构、核心实体、关键关系与主要风险/价值。
|
||
- rating: 社区影响度/风险度评分(0-10)。
|
||
- rating_explanation: 单句说明评分依据。
|
||
- findings: 5-10 条关键发现,覆盖技术链路、任务影响、可靠性风险、协同关系等。
|
||
|
||
# 领域要求(航天)
|
||
优先关注以下维度:
|
||
- 任务阶段:论证、研制、总装、测试、发射、入轨、在轨运行、回收/退役
|
||
- 系统层级:航天器、有效载荷、推进系统、姿态控制、测控通信、地面系统
|
||
- 关键指标:推力、比冲、功率、带宽、精度、寿命、可靠性、故障率
|
||
- 风险与依赖:单点故障、接口依赖、时序耦合、供应链与试验验证缺口
|
||
|
||
# 证据约束
|
||
- 仅使用输入中可证据化信息。
|
||
- 无证据内容不得写入。
|
||
- 若信息不足,应明确指出不确定性与缺失点。
|
||
|
||
# 输入
|
||
Text:
|
||
```
|
||
{input_text}
|
||
```
|
||
|
||
Output:
|
||
"""
|
||
|
||
PROMPTS[
|
||
"entity_extraction"
|
||
] = """-任务目标-
|
||
给定文本与实体类型列表,识别所有相关实体,并抽取实体间“明确存在”的关系。
|
||
|
||
-实体类型约束-
|
||
- entity_type 必须来自给定集合:[{entity_types}]
|
||
- 若无法确定,使用最接近类型,不可臆造新类型
|
||
|
||
-关系类型约束-
|
||
关系描述必须以“关系类型=<类型>;依据=<说明>”开头。
|
||
关系类型从以下集合中选择:
|
||
[组成, 隶属, 控制, 被控制, 供能, 支撑, 测量, 感知, 执行, 通信, 影响, 制约, 因果, 时序前后, 协同, 风险关联, 其他]
|
||
|
||
-执行步骤-
|
||
1. 抽取实体。每个实体输出:
|
||
- entity_name: 实体名(保留原文专有名词;必要时标准化)
|
||
- entity_type: 实体类型(必须在给定集合中)
|
||
- entity_description: 面向航天任务语境的实体描述(属性、职责、行为)
|
||
|
||
实体格式:
|
||
("entity"{tuple_delimiter}<entity_name>{tuple_delimiter}<entity_type>{tuple_delimiter}<entity_description>)
|
||
|
||
2. 在步骤1实体中,抽取“证据充分且语义明确”的关系对(source_entity, target_entity)。
|
||
每条关系输出:
|
||
- source_entity
|
||
- target_entity
|
||
- relationship_description: 必须以“关系类型=<类型>;依据=<说明>”开头
|
||
- relationship_strength: 1-10 数值,表示关系强度
|
||
|
||
关系格式:
|
||
("relationship"{tuple_delimiter}<source_entity>{tuple_delimiter}<target_entity>{tuple_delimiter}<relationship_description>{tuple_delimiter}<relationship_strength>)
|
||
|
||
3. 结果使用 **{record_delimiter}** 拼接。
|
||
4. 结束时输出 {completion_delimiter}。
|
||
|
||
-质量规则-
|
||
- 只抽取文本中可直接支持的实体和关系。
|
||
- 不输出模糊、猜测或无依据关系。
|
||
- 对航天语义优先:航天器、分系统、任务阶段、参数指标、故障模式、试验事件。
|
||
|
||
-输入-
|
||
Entity_types: {entity_types}
|
||
Text: {input_text}
|
||
Output:
|
||
"""
|
||
|
||
PROMPTS[
|
||
"summarize_entity_descriptions"
|
||
] = """你是航天知识库整理助手。
|
||
给定一个或两个实体名称,以及若干描述片段,请合并为一段一致、完整、可复用的摘要。
|
||
|
||
要求:
|
||
- 覆盖所有有效信息
|
||
- 若描述冲突,给出最一致、最保守的综合结论
|
||
- 使用第三人称
|
||
- 保留实体名,避免指代不清
|
||
- 优先保留任务阶段、技术指标、系统依赖和风险信息
|
||
|
||
#######
|
||
-输入数据-
|
||
Entities: {entity_name}
|
||
Description List: {description_list}
|
||
#######
|
||
Output:
|
||
"""
|
||
|
||
PROMPTS[
|
||
"entiti_continue_extraction"
|
||
] = """上一轮可能遗漏了实体或关系。请仅补充遗漏项,严格沿用既定输出格式,不要重复已输出记录:"""
|
||
|
||
PROMPTS[
|
||
"entiti_if_loop_extraction"
|
||
] = """请判断是否仍有遗漏实体或关系。仅回答 YES 或 NO。"""
|
||
|
||
PROMPTS["DEFAULT_ENTITY_TYPES"] = [
|
||
"航天器",
|
||
"任务",
|
||
"任务阶段",
|
||
"有效载荷",
|
||
"推进系统",
|
||
"姿态控制系统",
|
||
"测控通信系统",
|
||
"电源系统",
|
||
"热控系统",
|
||
"结构机构",
|
||
"传感器",
|
||
"执行机构",
|
||
"地面系统",
|
||
"组织机构",
|
||
"试验事件",
|
||
"故障模式",
|
||
"参数指标",
|
||
"轨道",
|
||
"地点",
|
||
"时间",
|
||
]
|
||
PROMPTS["DEFAULT_TUPLE_DELIMITER"] = "<|>"
|
||
PROMPTS["DEFAULT_RECORD_DELIMITER"] = "##"
|
||
PROMPTS["DEFAULT_COMPLETION_DELIMITER"] = "<|COMPLETE|>"
|
||
|
||
PROMPTS[
|
||
"local_rag_response"
|
||
] = """---角色---
|
||
你是航天领域图谱问答助手,擅长基于局部子图进行多跳推理。
|
||
|
||
---任务---
|
||
根据输入的数据表(实体、关系、证据片段)回答用户问题。
|
||
|
||
---回答要求---
|
||
1. 先给结论,再给推理链路。
|
||
2. 推理链路至少包含:
|
||
- 关键实体
|
||
- 关键关系
|
||
- 中间推断
|
||
- 最终结论
|
||
3. 若证据不足,明确说明“证据不足以得出结论”。
|
||
4. 严禁编造。
|
||
5. 使用中文、专业且简洁。
|
||
|
||
---目标长度与格式---
|
||
{response_type}
|
||
|
||
---输入数据表---
|
||
{context_data}
|
||
|
||
---输出格式建议---
|
||
- 结论
|
||
- 推理链路
|
||
- 证据与不确定性
|
||
"""
|
||
|
||
PROMPTS[
|
||
"global_map_rag_points"
|
||
] = """---角色---
|
||
你是航天知识全局研判助手,负责从社区级信息中提炼关键观点。
|
||
|
||
---任务---
|
||
根据输入数据表,输出一组可用于后续全局汇总的关键点。
|
||
|
||
---输出要求---
|
||
- 必须输出 JSON:
|
||
{
|
||
"points": [
|
||
{"description": "观点描述", "score": 0-100整数}
|
||
]
|
||
}
|
||
- description: 观点需可证据化,优先覆盖跨系统影响、任务阶段耦合、技术风险和性能趋势。
|
||
- score: 对回答用户问题的重要性分值。
|
||
- 若无法回答,输出 1 条 score=0 且明确说明信息不足。
|
||
- 仅使用输入证据,不得编造。
|
||
|
||
---输入数据表---
|
||
{context_data}
|
||
"""
|
||
|
||
PROMPTS[
|
||
"global_reduce_rag_response"
|
||
] = """---角色---
|
||
你是航天领域总师级分析助手,负责融合多位分析员报告并给出全局结论。
|
||
|
||
---任务---
|
||
根据按重要性降序排列的分析员报告,输出面向决策的综合回答。
|
||
|
||
---要求---
|
||
1. 先给总体结论,再给分项分析(趋势、共性风险、关键差异、建议动作)。
|
||
2. 报告融合时去重、去噪,保留高证据密度信息。
|
||
3. 必须指出不确定性与信息缺口。
|
||
4. 仅基于输入报告,不得编造。
|
||
5. 使用中文,风格专业、严谨。
|
||
|
||
---目标长度与格式---
|
||
{response_type}
|
||
|
||
---分析员报告---
|
||
{report_data}
|
||
"""
|
||
|
||
PROMPTS[
|
||
"naive_rag_response"
|
||
] = """你是航天知识问答助手。
|
||
下面是可用知识:
|
||
{content_data}
|
||
---
|
||
请基于上述知识回答用户问题,要求:
|
||
- 回答准确、简洁、专业
|
||
- 若信息不足,明确说明缺失点
|
||
- 不得编造
|
||
---目标长度与格式---
|
||
{response_type}
|
||
"""
|
||
|
||
PROMPTS["fail_response"] = "抱歉,当前无法基于现有信息回答该问题。"
|
||
|
||
PROMPTS["process_tickers"] = ["-", "\\", "|", "/"]
|
||
|
||
PROMPTS["default_text_separator"] = [
|
||
"\n\n",
|
||
"\r\n\r\n",
|
||
"\n",
|
||
"\r\n",
|
||
"。",
|
||
".",
|
||
".",
|
||
"!",
|
||
"!",
|
||
"?",
|
||
"?",
|
||
" ",
|
||
"\t",
|
||
"\u3000",
|
||
"\u200b",
|
||
]
|