智能数据采集技能,用于从图片或文档(PDF、Word、Excel)中提取结构化数据,基于知识网络完成字段映射,生成SQL并写入数据库。当用户提到"数据采集"、"从文档提取数据"、"图片转数据"、"数据导入"、"文档数据入库"、"批量数据提取"或需要从非结构化文件中提取结构化数据并存储时,自动使用此技能。
92%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
Passed
No findings from the security scan
本 skill 定义 固定顺序 的数据写入工具链,完全由 ontology native 子命令(bkn / dataview / ds)实现;
所有 CLI 执行均委托 ontology-core。
mysql / mysqldump / pymysql / sqlalchemy+pymysql / 直接 JDBC 连接等方式向 data_source 写入数据。
ontology ds get 返回的 bin_data.password 是 平台加密串,不是明文密码;尝试解密或直连均视为违规。ontology ds import-csv <datasource_id> --table-name <table> --file <csv> [...]
POST /api/automation/v1/data-flow/flow,由平台 data-flow 服务统一执行写入与回执。import-csv 仅支持 INSERT,不支持 UPDATE/UPSERT/REPLACE:
INSERT;若主键已存在,MySQL 直接报 Error 1062 (23000): Duplicate entry '<pk>' for key '<table>.PRIMARY',整批失败、summary.failed=1、rows_written=0。kn / object_type / dataview / datasource / table_name / row_count,得到用户确认后再执行。dataview query --sql / --raw-sql 执行 INSERT/UPDATE/DELETE:该入口在本部署只允许 SELECT/WITH,不是写入通道。smart-data-collection(本 skill:定义写入工具链与顺序)
└─ ontology-core(实际执行 ontology 命令)ontology --user-id <accountId> <command> [options]--user-id <accountId>:必传(顶层选项,写在子命令之前)。ONTOLOGY_BASE_URL 由 ontology-core 承担。--token / Authorization。-bd bd_public:默认值,可省。当用户给的不是结构化 CSV,而是 .jpg / .jpeg / .png / .bmp / .pdf / .doc / .docx / .xls / .xlsx,必须先经 Phase 0 转成 CSV,再进入下面的第 1~10 步主流程。Phase 0 由本 skill 编排,绝不新增「直接生成 INSERT SQL」或「直连 mysql」通道,IRON RULE 全部保留。
e0e2ed66-8eff-4f14-8e15-9fd6171f8e53;用户指定时优先。参数名统一 kn_id。yj-ocr-parser skill(契约见 skills/yj-ocr-parser/SKILL.md),输出 Markdown(含表头、表格行)。bkn object-type query/get 拿 data_properties[](字段名 / 类型 / required / enum),作为映射目标的唯一字段定义来源。是否确认以上映射? 的总确认。未确认前禁止写出 CSV。dataview.fields[].name 对齐,便于第 4 步无歧义消费)。.sql 文件、不生成 INSERT/UPDATE/DELETE 语句、不连 mysql、不读 bin_data.password。| 步骤 | 说明 | Reference |
|---|---|---|
| 0a | 非 CSV 输入 → Markdown(图片和pdf文档走 yj-ocr-parser;其他文档走解析工具) | references/parse-input.md |
| 0b | object-type 字段语义映射 + 用户逐条确认 → CSV | references/map-fields.md |
| 1 | 从对象类解出 dataview-id | references/resolve-target.md |
| 2 | 从 dataview 解出 datasource-id 与物理表名 | references/resolve-target.md |
| 3 | CSV 列与字段对齐 + 主键预检(差集) | references/csv-prepare.md |
| 4 | 通过 ds import-csv 走 data-flow 写入 | references/import-csv.md |
复制进度:
数据采集进度:
- [ ] 0a. (仅非 CSV 输入)解析输入文件 → Markdown:图片和pdf文档走 yj-ocr-parser;其他文档(Word/Excel等)走解析工具
- [ ] 0b. (仅非 CSV 输入)取 object-type data_properties → 与解析字段做语义映射 → 出对照表给用户逐条确认
- [ ] 0c. (仅非 CSV 输入)按确认后的映射写出 CSV(UTF-8、RFC 4180、列名 = 映射后字段名)
- [ ] 1. 解析写入目标对象类:bkn object-type get <kn-id> <ot-id>
→ 拿 data_source.id(dataview_id)、primary_keys、data_properties
- [ ] 2. 解 dataview:ontology dataview get <dataview_id>
→ 拿 datasource_id、data_source_type、meta_table_name、fields
- [ ] 3. 解 datasource:ontology ds get <datasource_id>
→ 校验 type/connect 信息,**只读校验**;不取出 bin_data.password
- [ ] 4. 准备 CSV:列名与 fields 对齐;UTF-8;主键列不可空;行数与 batch-size 估算
- [ ] 5. 主键预检:ontology --user-id <id> dataview query <dataview_id> --sql 'SELECT <pk> FROM <stripped_meta_table_name>'
(或加 WHERE <pk> IN (...) 缩小范围)→ 取出底表已存在的主键集合
- [ ] 6. 差集:从 CSV 中剔除上一步返回的主键行;若剔除后 rows=0,直接终止并告知用户"全部已存在"
- [ ] 7. 复述写入计划并征得用户确认:kn / object_type / dataview / datasource / table / rows
- [ ] 8. 执行写入:ontology ds import-csv <datasource_id> --table-name <table> --file <csv> --batch-size <n>
- [ ] 9. 回执核对:summary.succeeded/failed;如 failed>0,定位失败行并报错,不要重试整批
- [ ] 10. (可选)触发/等待索引:必要时由上层重建 BKN 索引以保证查得到新数据object-type → dataview → datasource,三段必须全部成功才能进入写入。dataview.meta_table_name(或 fields/sql_str 中显式声明的表)为准;不得让用户口头给的表名直接生效。dataview.fields[].name 一一对齐;多余列丢弃前先告警,缺失主键列直接拒绝。--batch-size 100;超过 1000 行的导入必须分批,回执按批汇总。dataview query 位置参数用 dataview UUID,SQL 内的表名用 meta_table_name 去掉所有双引号后的形式(例:mysql_jtjlumy4.demo.product_entity)。--sql;任何位置都不要出现反斜杠——曾出现 product_entity\ LIMIT 50 触发 sqlglot ExtractTables failed 的事故。IN(...),每批 ≤ 500;总量 > 10000 时直接 SELECT <pk> FROM <table> 全量拉回客户端做差集,避免 IN 列表过长。ONTOLOGY_DEBUG_HTTP=1,确认请求落到 /api/automation/v1/data-flow/flow;切勿误以为是直连 MySQL。failed[] 中任意一条都要回显具体行号/原因;禁止自动重试,等待用户判断。ontology ds import-csv。ds get 返回的 bin_data.password。dataview query --sql 执行 INSERT/UPDATE/DELETE。import-csv;不得依赖通道侧合并。summary 与 failed[],不得粉饰失败。/smart-data-collection 把 test.csv 导入产品对象类(kn=d4rt3135s3q8va76m8fd, ot=d50jqrr5s3q8ofn0dscg)
/smart-data-collection 给"产品"对象类追加 200 行新产品数据,文件在 ~/uploads/products.csv# 1) 对象类 → dataview_id
ontology --user-id 1 bkn object-type get d4rt3135s3q8va76m8fd d50jqrr5s3q8ofn0dscg
# data_source.id = c1a934eb-7011-40f9-8a7c-c5ca6cb392a6
# 2) dataview → datasource_id + meta_table_name
ontology dataview get c1a934eb-7011-40f9-8a7c-c5ca6cb392a6
# datasource_id = 374c4c1b-8836-4e60-8099-572a1f0367c5
# meta_table_name = mysql_jtjlumy4."demo"."product_entity"
# 3) datasource 只读校验(不要拿 bin_data.password 做任何事)
ontology ds get 374c4c1b-8836-4e60-8099-572a1f0367c5
# 4) 主键预检:dataview UUID 作为位置参数,SQL 内的表名是 meta_table_name 去引号后的形式
ontology --user-id 1 dataview query c1a934eb-7011-40f9-8a7c-c5ca6cb392a6 \
--sql 'SELECT product_id FROM mysql_jtjlumy4.demo.product_entity'
# 返回底表已有的 product_id 列表;客户端用它和 CSV 做差集
# 5) 经平台 data-flow 写入(唯一允许的写入入口;仅 INSERT 已差集后的新行)
ONTOLOGY_DEBUG_HTTP=1 ontology ds import-csv 374c4c1b-8836-4e60-8099-572a1f0367c5 \
--table-name product_entity --file test_dedup.csv --batch-size 100
# 期望命中:POST http://vega-bkn-backend:13014/api/automation/v1/data-flow/flow
# 主键重复(未预检)时回执形如:
# {"failed":["product_entity"],
# "summary":{"succeeded":0,"failed":1},
# "error":"Error 1062 (23000): Duplicate entry 'P0009' for key 'product_entity.PRIMARY'"}UnicomAI/wanwu
bee2737
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.