cross_field_comparison_check 跨字段比较校验Skill
功能概述
本skill用于逐行验证两个字段值之间的逻辑关系是否成立。典型应用场景:
- 时间区间校验:
start_time < end_time
- 数值范围校验:
min_value <= max_value
- 价格逻辑校验:
cost < price
- 库存校验:
sold <= total
支持运算符
| 运算符 |
含义 |
示例 |
< |
小于 |
start,<,end |
<= |
小于等于 |
min,<=,max |
> |
大于 |
end,>,start |
>= |
大于等于 |
current,>=,baseline |
== |
等于 |
computed,==,expected |
!= |
不等于 |
status,!=,deleted |
约束格式
- 每个约束:
左字段,运算符,右字段
- 多个约束用
| 分隔
- 约束之间为 AND 关系(任一违反即标记)
- 示例:
start,<,end|min,<=,max 表示同时满足 start<end 且 min≤max
触发条件
当用户请求以下任务时,应使用此skill:
- 跨字段比较校验
- 字段间逻辑约束检查
- 大小关系验证
- 字段值一致性比对
- 数据逻辑规则检查
处理逻辑
- 读取输入数据表
- 解析 constraints 字符串,拆分出每个约束(按
| 分割)
- 对每行数据:
a. 提取左右字段的值并转为数值(numeric)
b. 按指定运算符比较
c. 违反任一约束 → 标记
qc_mark
- 非数值数据(如字符串)转为 NaN 后跳过该约束的比较
- 输出标记结果和统计摘要
支持的文件格式
- CSV (.csv)
- TSV (.tsv)
- Excel (.xls, .xlsx)
- SPSS (.sav)
使用方法
步骤1:获取用户输入输出路径及参数
向用户确认:
- 输入文件路径(需要校验的文件)
- 输出文件路径(校验结果文件)
- 约束表达式(格式:左字段,运算符,右字段|...)
- 质控标识
步骤2:执行跨字段比较校验脚本
在 scripts/ 目录下找到 cross_field_comparison_check.py,使用Python执行:
单约束(时间区间):
python scripts/cross_field_comparison_check.py \
--input_path data.csv \
--output_path checked.csv \
--constraints "start_time,<,end_time" \
--qc_mark QCFLAG
多约束(范围+价格):
python scripts/cross_field_comparison_check.py \
--input_path data.csv \
--output_path checked.csv \
--constraints "start,<,end|min,<=,max|cost,<=,price" \
--qc_mark QCFLAG
步骤3:返回结果
脚本执行完成后,告知用户:
参数说明
| 参数 |
必填 |
说明 |
--input_path |
是 |
输入文件路径(支持CSV/TSV/Excel/SPSS) |
--output_path |
是 |
输出文件路径 |
--constraints |
是 |
约束表达式,` |
--qc_mark |
是 |
质控标识(如QC标识) |
--mark_field_name |
否 |
质控标识字段名(默认QC0000) |
输出示例
发现问题
[OK] Using encoding UTF-8 successfully read CSV file
Successfully read file: /path/to/data.csv, shape: (500, 8)
Constraints: start < end | min <= max
[QC FAIL] 跨字段比较校验未通过 (2 项问题):
[start < end] 3 行违反 (示例: 行42 start=100 > end=80)
[min <= max] 5 行违反 (示例: 行126 min=50 > max=30)
已标记 8 行
Successfully written file: /path/to/checked.csv
通过
[OK] Using encoding UTF-8 successfully read CSV file
Successfully read file: /path/to/data.csv, shape: (300, 6)
Constraints: start < end | cost <= price
[QC PASS] 跨字段比较校验通过
Successfully written file: /path/to/checked.csv
注意事项
- 输入输出路径需要用户提供
- 输出文件格式会自动保持与输入文件一致
- 约束分隔符规则:
- 约束内部用半角逗号
, 分隔(左字段,运算符,右字段)
- 约束之间用竖线
| 分隔
- 数值类型:字段值强制转为 numeric,非数值按 NaN 处理并跳过该行
- 约束之间为 AND 关系:每条约束独立判断,任一违反即标记该行
- 被比较的两个字段名在表中必须存在,否则报错退出
- 如果用户没有指定输出路径,可以建议使用原文件名加上
_checked 后缀
1---2name: cross-field-comparison-check3description: 跨字段比较校验工具。读取结构化数据文件(CSV、TSV、Excel等),检查两个字段之间的逻辑约束关系 是否满足(如 start < end、min ≤ max、price >= cost),支持六种比较运算符,多约束可组合使用。 当用户提到跨字段校验、字段间比较、逻辑约束检查、大小关系验证等需求时使用此skill。 即使用户没有明确说出"跨字段",只要任务涉及验证两个字段值之间的逻辑关系,就应该使用此skill。4---56# cross_field_comparison_check 跨字段比较校验Skill78## 功能概述910本skill用于逐行验证两个字段值之间的逻辑关系是否成立。典型应用场景:1112- 时间区间校验:`start_time < end_time`13- 数值范围校验:`min_value <= max_value`14- 价格逻辑校验:`cost < price`15- 库存校验:`sold <= total`1617### 支持运算符1819| 运算符 | 含义 | 示例 |20|------|------|------|21| `<` | 小于 | `start,<,end` |22| `<=` | 小于等于 | `min,<=,max` |23| `>` | 大于 | `end,>,start` |24| `>=` | 大于等于 | `current,>=,baseline` |25| `==` | 等于 | `computed,==,expected` |26| `!=` | 不等于 | `status,!=,deleted` |2728### 约束格式2930- 每个约束:`左字段,运算符,右字段`31- 多个约束用 `|` 分隔32- 约束之间为 AND 关系(任一违反即标记)33- 示例:`start,<,end|min,<=,max` 表示同时满足 start<end 且 min≤max3435## 触发条件3637当用户请求以下任务时,应使用此skill:38- 跨字段比较校验39- 字段间逻辑约束检查40- 大小关系验证41- 字段值一致性比对42- 数据逻辑规则检查4344## 处理逻辑45461. 读取输入数据表472. 解析 constraints 字符串,拆分出每个约束(按 `|` 分割)483. 对每行数据:49 a. 提取左右字段的值并转为数值(numeric)50 b. 按指定运算符比较51 c. 违反任一约束 → 标记 `qc_mark`524. 非数值数据(如字符串)转为 NaN 后跳过该约束的比较535. 输出标记结果和统计摘要5455## 支持的文件格式5657- CSV (.csv)58- TSV (.tsv)59- Excel (.xls, .xlsx)60- SPSS (.sav)6162## 使用方法6364### 步骤1:获取用户输入输出路径及参数6566向用户确认:671. 输入文件路径(需要校验的文件)682. 输出文件路径(校验结果文件)693. 约束表达式(格式:左字段,运算符,右字段|...)704. 质控标识7172### 步骤2:执行跨字段比较校验脚本7374在 `scripts/` 目录下找到 `cross_field_comparison_check.py`,使用Python执行:7576单约束(时间区间):7778```bash79python scripts/cross_field_comparison_check.py \80 --input_path data.csv \81 --output_path checked.csv \82 --constraints "start_time,<,end_time" \83 --qc_mark QCFLAG84```8586多约束(范围+价格):8788```bash89python scripts/cross_field_comparison_check.py \90 --input_path data.csv \91 --output_path checked.csv \92 --constraints "start,<,end|min,<=,max|cost,<=,price" \93 --qc_mark QCFLAG94```9596### 步骤3:返回结果9798脚本执行完成后,告知用户:99- 每条约束的违反行数100- 示例违反数据101- 总标记行数102103## 参数说明104105| 参数 | 必填 | 说明 |106|------|------|------|107| `--input_path` | 是 | 输入文件路径(支持CSV/TSV/Excel/SPSS) |108| `--output_path` | 是 | 输出文件路径 |109| `--constraints` | 是 | 约束表达式,`|` 分隔。格式:`左字段,运算符,右字段` |110| `--qc_mark` | 是 | 质控标识(如QC标识) |111| `--mark_field_name` | 否 | 质控标识字段名(默认QC0000) |112113## 输出示例114115### 发现问题116117```118[OK] Using encoding UTF-8 successfully read CSV file119Successfully read file: /path/to/data.csv, shape: (500, 8)120Constraints: start < end | min <= max121[QC FAIL] 跨字段比较校验未通过 (2 项问题):122 [start < end] 3 行违反 (示例: 行42 start=100 > end=80)123 [min <= max] 5 行违反 (示例: 行126 min=50 > max=30)124已标记 8 行125Successfully written file: /path/to/checked.csv126```127128### 通过129130```131[OK] Using encoding UTF-8 successfully read CSV file132Successfully read file: /path/to/data.csv, shape: (300, 6)133Constraints: start < end | cost <= price134[QC PASS] 跨字段比较校验通过135Successfully written file: /path/to/checked.csv136```137138## 注意事项1391401. 输入输出路径需要用户提供1412. 输出文件格式会自动保持与输入文件一致1423. 约束分隔符规则:143 - 约束内部用半角逗号 `,` 分隔(左字段,运算符,右字段)144 - 约束之间用竖线 `|` 分隔1454. 数值类型:字段值强制转为 numeric,非数值按 NaN 处理并跳过该行1465. 约束之间为 AND 关系:每条约束独立判断,任一违反即标记该行1476. 被比较的两个字段名在表中必须存在,否则报错退出1487. 如果用户没有指定输出路径,可以建议使用原文件名加上 `_checked` 后缀