| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436 |
- #!/usr/bin/env python3
- """
- 为现有规则补充内容定位配置(locatorType、chapterTitle、reviewCode、prompt)
- """
- import requests, json
- BASE = "http://47.108.80.98:8001"
- PROJECT_ID = 10
- # ── 1. 登录 ─────────────────────────────────────────────────
- r = requests.post(f"{BASE}/api/v1/auth/login", json={"username": "admin", "password": "admin123"})
- TOKEN = r.json()["data"]["accessToken"]
- HDR = {"Authorization": f"Bearer {TOKEN}", "Content-Type": "application/json"}
- # ── 2. 规则配置补充 ──────────────────────────────────────────
- # 格式: elementKey -> { locatorType, chapterTitle, reviewCode, tableSelector, prompt }
- RULE_CONFIGS = {
- # ═══════════════════════════════════════════════
- # 工作方案 (001008) → 全文提取
- # ═══════════════════════════════════════════════
- "project.reviewObject": {
- "locatorType": "full_text",
- "prompt": """你是一个专业的文档信息提取助手。请阅读以下内容,提取评审对象公司的全称。
- 提取规则:
- 1. 提取封面或标题第一行的受检单位全称
- 2. 通常在"一、工作目的"中出现,如"XXX公司(以下简称:XXX)"
- 3. 只输出公司全称,不要其他内容
- 输出格式:直接输出公司全称文本"""
- },
-
- "project.reviewObjectAlias": {
- "locatorType": "chapter",
- "chapterTitle": "工作目的",
- "prompt": """从内容中提取评审对象公司的简称。
- 提取规则:
- 1. 寻找"以下简称"或"简称"后面的内容
- 2. 例如"中国电建集团成都勘测设计研究院有限公司(以下简称:成都院)",简称为"成都院"
- 3. 只输出简称,不要其他内容"""
- },
-
- "project.workStartAt": {
- "locatorType": "chapter",
- "chapterTitle": "工作时间",
- "prompt": """从内容中提取评审工作开始日期。
- 提取规则:
- 1. 寻找"工作时间阶段"或"评审时间"相关内容
- 2. 格式通常为"yyyy年M月d日至yyyy年M月d日"
- 3. 提取开始日期,格式为:yyyy年M月d日"""
- },
-
- "project.workEndAt": {
- "locatorType": "chapter",
- "chapterTitle": "工作时间",
- "prompt": """从内容中提取评审工作结束日期。
- 提取规则:
- 1. 寻找"工作时间阶段"或"评审时间"相关内容
- 2. 格式通常为"yyyy年M月d日至yyyy年M月d日"
- 3. 提取结束日期,格式为:yyyy年M月d日"""
- },
-
- "project.reviewRange": {
- "locatorType": "chapter",
- "chapterTitle": "查评范围",
- "prompt": """从内容中提取复审范围,包括所有复审项目(单位和在建项目)。
- 提取规则:
- 1. 提取所有被评审的单位和项目名称
- 2. 按类型排序:先单位后项目
- 3. 格式如:成都院本部、大邑地勘项目(简称:大邑项目)"""
- },
-
- "project.workProcess": {
- "locatorType": "full_text",
- "prompt": """根据工作方案内容,生成复审工作过程描述。
- 包含以下内容:
- 1. 评审组工作会议召开情况
- 2. 现场评审安排
- 3. 具体评审时间表
- 4. 评审组成员分工
- 输出格式:按时间顺序描述复审工作过程"""
- },
-
- # ═══════════════════════════════════════════════
- # 核心要素评审记录表 (001001) → 评审代码定位
- # ═══════════════════════════════════════════════
- "project.resultScore": {
- "locatorType": "table",
- "tableSelector": "核心要素评审情况记录表",
- "prompt": """从表格中提取各评审项的标准分和实得分,计算总评审得分。
- 计算公式:总实得分/总标准分×100
- 输出格式:保留一位小数的分数,如 92.5"""
- },
-
- "project.resultLevel": {
- "locatorType": "table",
- "tableSelector": "核心要素评审情况记录表",
- "prompt": """根据评审得分判定评审结论级别。
- 判定规则:
- - ≥90分为一级
- - ≥80分为二级
- - <80分为三级
- 输出格式:一级/二级/三级"""
- },
-
- "project.target": {
- "locatorType": "review_code",
- "reviewCode": "5.1.1",
- "prompt": """从评审代码5.1.1.1~5.1.1.3的评审意见中,总结生成目标描述。
- 要求:
- 1. 提取各子项的评审意见(remark)
- 2. 综合分析,生成100字以内的目标描述
- 3. 突出企业安全生产目标的制定和落实情况"""
- },
-
- "project.duty": {
- "locatorType": "review_code",
- "reviewCode": "5.1.2.1",
- "prompt": """从评审代码5.1.2.1的评审意见中,总结生成职责描述。
- 要求:
- 1. 提取评审意见(remark)
- 2. 生成100字以内的职责描述
- 3. 突出安全生产责任制的建立和落实情况"""
- },
-
- "project.fullParticipation": {
- "locatorType": "review_code",
- "reviewCode": "5.1.3",
- "prompt": """从评审代码5.1.3的评审意见中,总结生成全员参与描述。
- 要求:
- 1. 提取评审意见(remark)
- 2. 生成100字以内的全员参与描述
- 3. 突出全员安全生产参与机制"""
- },
-
- "project.safetyInvestment": {
- "locatorType": "review_code",
- "reviewCode": "5.1.4",
- "prompt": """从评审代码5.1.4的评审意见中,总结生成安全投入描述。
- 要求:
- 1. 提取评审意见(remark)
- 2. 生成100字以内的安全投入描述
- 3. 突出安全生产费用的提取和使用情况"""
- },
-
- "project.safetyCulture": {
- "locatorType": "review_code",
- "reviewCode": "5.1.5",
- "prompt": """从评审代码5.1.5的评审意见中,总结生成安全文化描述。
- 要求:
- 1. 提取评审意见(remark)
- 2. 生成100字以内的安全文化描述
- 3. 突出企业安全文化建设情况"""
- },
-
- "project.systematicManagement": {
- "locatorType": "review_code",
- "reviewCode": "5.2",
- "prompt": """从评审代码5.2.*的评审意见中,总结生成体系化管理描述。
- 要求:
- 1. 提取5.2下所有子项的评审意见
- 2. 综合分析,生成150字以内的体系化管理描述
- 3. 突出安全管理体系的建设和运行情况"""
- },
-
- "project.employeeTraining": {
- "locatorType": "review_code",
- "reviewCode": "5.3.2",
- "prompt": """从评审代码5.3.2.*的评审意见中,总结生成人员教育培训描述。
- 要求:
- 1. 提取5.3.2下所有子项的评审意见
- 2. 综合分析,生成100字以内的人员教育培训描述
- 3. 突出安全教育培训的开展情况"""
- },
-
- "project.assetManagement": {
- "locatorType": "review_code",
- "reviewCode": "5.4.1",
- "prompt": """从评审代码5.4.1.*的评审意见中,总结生成设备设施管理描述。
- 要求:
- 1. 提取5.4.1下所有子项的评审意见
- 2. 综合分析,生成100字以内的设备设施管理描述
- 3. 突出设备设施的安全管理情况"""
- },
-
- "project.jobSafety": {
- "locatorType": "review_code",
- "reviewCode": "5.4.2.1",
- "prompt": """从评审代码5.4.2.1的评审意见中,总结生成作业安全描述。
- 要求:
- 1. 提取评审意见(remark)
- 2. 生成100字以内的作业安全描述
- 3. 突出作业现场安全管理情况"""
- },
-
- "project.positionQualified": {
- "locatorType": "review_code",
- "reviewCode": "5.4.2.3",
- "prompt": """从评审代码5.4.2.3的评审意见中,总结生成岗位达标描述。
- 要求:
- 1. 提取评审意见(remark)
- 2. 生成100字以内的岗位达标描述
- 3. 突出岗位安全达标情况"""
- },
-
- "project.partner": {
- "locatorType": "review_code",
- "reviewCode": "5.4.2.4",
- "prompt": """从评审代码5.4.2.4的评审意见中,总结生成相关方管理描述。
- 要求:
- 1. 提取评审意见(remark)
- 2. 生成100字以内的相关方管理描述
- 3. 突出相关方安全管理情况"""
- },
-
- "project.occupationalHealth": {
- "locatorType": "review_code",
- "reviewCode": "5.4.3.1",
- "prompt": """从评审代码5.4.3.1的评审意见中,总结生成职业健康描述。
- 要求:
- 1. 提取评审意见(remark)
- 2. 生成100字以内的职业健康描述
- 3. 突出职业健康管理情况"""
- },
-
- "project.riskAssessment": {
- "locatorType": "review_code",
- "reviewCode": "5.5.1",
- "prompt": """从评审代码5.5.1.1和5.5.1.2的评审意见中,总结生成风险辨识与评价描述。
- 要求:
- 1. 提取5.5.1.1和5.5.1.2的评审意见
- 2. 综合分析,生成100字以内的风险辨识与评价描述
- 3. 突出风险辨识和评价工作开展情况"""
- },
-
- "project.majorHazardManagement": {
- "locatorType": "review_code",
- "reviewCode": "5.5.2.1",
- "prompt": """从评审代码5.5.2.1的评审意见中,总结生成重大危险源管理描述。
- 要求:
- 1. 提取评审意见(remark)
- 2. 生成100字以内的重大危险源管理描述
- 3. 突出重大危险源辨识和管控情况"""
- },
-
- "project.hazardInspection": {
- "locatorType": "review_code",
- "reviewCode": "5.5.3.1",
- "prompt": """从评审代码5.5.3.1的评审意见中,总结生成隐患排查描述。
- 要求:
- 1. 提取评审意见(remark)
- 2. 生成100字以内的隐患排查描述
- 3. 突出隐患排查治理工作开展情况"""
- },
-
- "project.changeManagement": {
- "locatorType": "review_code",
- "reviewCode": "5.5.1.4",
- "prompt": """从评审代码5.5.1.4的评审意见中,总结生成变更管理描述。
- 要求:
- 1. 提取评审意见(remark)
- 2. 生成100字以内的变更管理描述
- 3. 突出变更管理制度和执行情况"""
- },
-
- "project.earlyWarning": {
- "locatorType": "review_code",
- "reviewCode": "5.5.4",
- "prompt": """从评审代码5.5.4的评审意见中,总结生成预测预警描述。
- 要求:
- 1. 提取评审意见(remark)
- 2. 生成100字以内的预测预警描述
- 3. 突出预测预警机制建设情况"""
- },
-
- "project.emergencyResponse": {
- "locatorType": "review_code",
- "reviewCode": "5.6.1.1",
- "prompt": """从评审代码5.6.1.1的评审意见中,总结生成应急救援描述。
- 要求:
- 1. 提取评审意见(remark)
- 2. 生成100字以内的应急救援描述
- 3. 突出应急预案和应急演练情况"""
- },
-
- "project.incidentManagement": {
- "locatorType": "review_code",
- "reviewCode": "5.7.1",
- "prompt": """从评审代码5.7.1的评审意见中,总结生成事故管理描述。
- 要求:
- 1. 提取评审意见(remark)
- 2. 生成100字以内的事故管理描述
- 3. 突出事故报告和调查处理情况"""
- },
-
- "project.continuousImprovement": {
- "locatorType": "review_code",
- "reviewCode": "5.8.2",
- "prompt": """从评审代码5.8.2.*的评审意见中,总结生成持续改进描述。
- 要求:
- 1. 提取5.8.2下所有子项的评审意见
- 2. 综合分析,生成100字以内的持续改进描述
- 3. 突出安全生产标准化持续改进情况"""
- },
-
- "project.safetyStandardizationStatus": {
- "locatorType": "review_code",
- "reviewCode": "5.8",
- "prompt": """从评审代码5.8.1.*和5.8.2.*的评审意见中,总结生成标准化建设运行情况描述。
- 要求:
- 1. 提取5.8下所有子项的评审意见
- 2. 综合分析,生成150字以内的标准化建设运行情况描述
- 3. 突出安全生产标准化体系的建设和运行情况"""
- },
-
- "project.safetyHighlight": {
- "locatorType": "review_code",
- "reviewCode": "5.1",
- "prompt": """综合评审代码5.1下各子项的评审意见,提炼安全生产管理亮点。
- 要求:
- 1. 提取5.1下所有子项的评审意见
- 2. 分析提炼企业安全生产管理的亮点和特色
- 3. 生成150字以内的亮点描述"""
- },
-
- # ═══════════════════════════════════════════════
- # 安全生产标准化复审实施方案 (001003)
- # ═══════════════════════════════════════════════
- "project.reviewObjectSelfAssessmentProcess": {
- "locatorType": "full_text",
- "prompt": """从安全生产标准化复审实施方案中,总结自评过程内容。
- 包含以下6个阶段:
- 1. 前期策划
- 2. 专题培训
- 3. 自查自纠
- 4. 内审整改
- 5. 报告撰写
- 6. 持续改进
- 输出格式:按阶段描述自评过程,每个阶段50-100字"""
- },
-
- "project.moreWorkReference": {
- "locatorType": "chapter",
- "chapterTitle": "工作依据",
- "prompt": """从内容中提取其他工作依据文件。
- 提取规则:
- 1. 寻找文件编号和文件名称
- 2. 格式如:《xxx管理办法》(蓉设安质〔2024〕20号)
- 3. 多个文件用换行分隔"""
- },
- }
- # ── 3. 获取现有规则并更新 ──────────────────────────────────────
- print("获取现有规则...")
- resp = requests.get(f"{BASE}/api/v1/projects/{PROJECT_ID}/rules", headers=HDR)
- if resp.status_code != 200:
- print(f"获取规则失败: {resp.status_code} {resp.text}")
- exit(1)
- rules = resp.json().get("data", [])
- print(f"共 {len(rules)} 条规则\n")
- # ── 4. 更新规则配置 ──────────────────────────────────────────
- ok, skip, fail = 0, 0, 0
- for rule in rules:
- rule_id = rule.get("id")
- element_key = rule.get("elementKey")
- rule_name = rule.get("ruleName")
-
- if element_key not in RULE_CONFIGS:
- print(f" ⏭️ [{rule_id:>5}] {element_key:50s} - 无配置,跳过")
- skip += 1
- continue
-
- config = RULE_CONFIGS[element_key]
-
- # 合并现有 actionConfig
- existing_config = {}
- if rule.get("actionConfig"):
- try:
- existing_config = json.loads(rule["actionConfig"]) if isinstance(rule["actionConfig"], str) else rule["actionConfig"]
- except:
- pass
-
- # 更新配置
- new_config = {**existing_config, **config}
-
- payload = {
- "elementKey": element_key,
- "ruleName": rule_name,
- "actionConfig": json.dumps(new_config, ensure_ascii=False),
- }
-
- resp = requests.put(f"{BASE}/api/v1/rules/{rule_id}", headers=HDR, json=payload)
- if resp.status_code == 200 and resp.json().get("code") == 200:
- print(f" ✅ [{rule_id:>5}] {element_key:50s} - locatorType={config.get('locatorType')}")
- ok += 1
- else:
- print(f" ❌ [{rule_id:>5}] {element_key:50s} → {resp.status_code} {resp.text[:100]}")
- fail += 1
- print(f"\n完成:成功 {ok},跳过 {skip},失败 {fail}")
|