AI 入门与核查AI 应用

AI输出JSON校验通过却仍有错?工单案例核对结构、负责人和原文证据

JSON通过校验,仍可能填了原文不存在的负责人。下面以T-007工单为完整练习,提供原文、Schema、三份编辑构造的输出和参考账本,从粘贴校验到路径查询、下载核对走完两层验收。输出都是教学材料,不声称由某个模型生成。

电脑屏幕上清晰排列的代码与数据结构
配图:Chris Ried · Unsplash License

本次修订:补原工单、Schema与三份输出下载,逐项运行校验、查询负责人、核对下载结果,并用审核账本区分结构通过与证据接受。

先明确任务与结果

先验JSON语法和约定结构,再逐个值对照原工单。第二份对象的owner为Mina,结构可通过但没有原文依据;本例应保留owner:null。校验器只能验证已写入的规则,“校验通过”或下载成功均不能代替证据审核。

先约定字段,再让 AI 提取

本篇原始材料只有一句自编说明:“Ticket T-007: User cannot export PDF. Product not identified. Owner unassigned.” 目标是提取工单编号、问题类别、负责人和证据片段。类别约定为 export、login、unknown;负责人无依据则写 null。这个约定来自编辑任务,不是模型自动定义的业务规则。

JSON Schema 官方对象文档解释 properties、required 与 additionalProperties 的用途。用这些约束控制输出结构,仍需自己确定字段含义和允许范围。某个属性被允许出现,不能证明它在材料中被确认。

本例的字段约定
字段要求原文核对
ticketIdT- 加三位数字的字符串原文明确写 T-007,不能变成数字 7。
categoryexport / login / unknown按实际问题判断,不把“紧急”当作问题类别。
owner字符串或 null,且必须保留字段原文未分配负责人,本例为 null。
evidence非空字符串引用实际问题片段,不能补造事实。

复制一个有明确边界的 Schema

下面是自编的简单 Schema,适合本站 Draft-07 校验工具。它拒绝约定之外的字段,要求四个字段存在,并检查编号、类别与数据类型。它没有访问工单系统,也不会自动判断某个负责人名字是否来自原文。

若需要让 AI 产生输出,可用后面的自编提示词。先输入同一份原文和约定,再保留模型返回的原始内容;不要在未核对时自动“清理”到通过校验。

本例 Schema

{
  "type": "object",
  "properties": {
    "ticketId": {
      "type": "string",
      "pattern": "^T-[0-9]{3}$"
    },
    "category": {
      "enum": [
        "export",
        "login",
        "unknown"
      ]
    },
    "owner": {
      "type": [
        "string",
        "null"
      ]
    },
    "evidence": {
      "type": "string",
      "minLength": 1
    }
  },
  "required": [
    "ticketId",
    "category",
    "owner",
    "evidence"
  ],
  "additionalProperties": false
}
只用于这个编辑案例;真实任务要由负责人员定义字段及业务规则。

自编提取提示词

从以下原文提取 JSON,不补充事实。
字段:ticketId、category、owner、evidence,全部保留。
category 只能是 export、login、unknown;无负责人依据则 owner 为 null。
evidence 使用原文问题片段。只返回 JSON,不增加其他字段。
原文:Ticket T-007: User cannot export PDF. Product not identified. Owner unassigned.
这是供读者尝试的提示词,不是本文已经运行某个模型的记录。

三份输出要经历不同的验收

第一份编辑构造的错误对象把 ticketId 写成数字 7,把 category 写成 urgent,还加 priority。它不符合约定的结构。第二份改好结构,却仍填 owner: Mina;名字是编辑故意加入的无依据内容。第三份将 owner 改为 null,才与本例“未分配”的事实对应。

这里最重要的是第二份:它的 owner 是允许的字符串,Schema 不知道 Mina 是否真实负责这张工单。校验器不会替你读原文,更不能以“通过”覆盖原始材料。

人工构造的测试对象
对象结构预期证据验收
{"ticketId":7,"category":"urgent","owner":"Mina","evidence":"cannot export PDF","priority":"high"}不通过:额外字段、编号类型和类别有问题无依据负责人也需要检查。
{"ticketId":"T-007","category":"export","owner":"Mina","evidence":"cannot export PDF"}通过本例结构约束Mina 无原文依据,不能接受。
{"ticketId":"T-007","category":"export","owner":null,"evidence":"cannot export PDF"}通过本例结构约束与本例工单及未知负责人处理对应。

在本站工具运行,再回到原文

打开JSON查询与Schema工具,用“JSON输入”和“JSON Schema”两个独立区域,不要把Schema也粘进业务对象。粘贴schema.json后,按下列顺序逐份检查。运行之间核对当前文件名和输入内容,避免沿用上一份结果。

校验结果可下载为json-result.txt。这是校验器的文字答复,不是包含工单数据的正式JSON导出,也不是人工审核证书。每次下载后按候选文件另存;同时保留原候选JSON和独立审核账本。

  1. 先粘贴invalid-syntax.json,运行“校验输入”;应出现JSON解析错误。改回正确源对象,不靠删业务字段换取成功。
  2. 粘贴第一份结构错误对象,保持原Schema运行。应看到约束错误,涉及额外priority、ticketId类型或category枚举;不要求不同版本的错误顺序或措辞完全一致。
  3. 粘贴第二份对象,运行应显示“校验通过”。在JSON Pointer路径填/owner,运行“查询路径”,应返回字符串“Mina”;回source.txt可知该负责人无依据。
  4. 粘贴第三份对象,运行同一Schema仍应通过;查询/owner应返回null。再查询/ticketId应是字符串“T-007”。
  5. 逐值核对category为export、evidence为原文片段cannot export PDF,owner为null。将结构结论与证据结论分别写入review-ledger.csv;本例只接受第三份。
  6. 下载各自的校验文字结果,重新打开并对照候选文件名。下载文件不替代原JSON,不能从一行“通过”重建已验对象。

结构通过之后仍可退回

仅结构有效

owner: "Mina",字符串类型符合约定

与本例来源一致

owner: null,对应 Owner unassigned

不要仅因为某个名字看起来合理就接受。结构有效和原文支持需要两条独立记录。

什么时候该保留待确认,而不是修成通过?

如果原文含糊、版本不明或字段定义尚未确定,保留待确认项并请负责人员判断。一次校验不能证明分类覆盖了所有真实场景,也不能确认跨记录关系。用空值与零值核查方法定义未知信息,避免为了凑字段随意填 0、空字符串或人名。

当前工具支持 Draft-07,JSON 输入、对比内容与 Schema 合计上限为 200 万字符,在本地执行校验。语法错误、Schema 问题与业务证据问题要分开处理。导出表格时再按CSV 与 JSON 转换检查核对编号与空值;转换不会修复无依据事实。

接受一份结构化输出前

  • 字段约定明确,未知处理有定义,Schema 与任务版本一致。
  • 语法和结构检查通过,原始错误与修正记录可追溯。
  • 关键值逐一有原文依据,允许的字符串不被误当成真实事实。
  • 保留待确认项,没有为了让自动流程继续而补造内容。

先把输入、校验结果和审核结论分开保存

练习ZIP包含source.txt、schema.json、output-01-invalid-structure.json、output-02-valid-unverified.json、output-03-source-aligned.json、invalid-syntax.json与review-ledger.csv。三份输出沿用正文原有案例;invalid-syntax额外演示语法损坏。原文只有T-007无法导出PDF、产品未识别、负责人未分配这几个事实。

三份输出不是三个工单,不能纵向合并为三条真实业务记录。审核账本每行是一份候选输出的检查结果。原文、候选文件、工具返回和最终接受决定使用不同文件名;否则第二份的“校验通过”很容易被误贴到第三份的证据结论上。

两个通过,一个接受:审核账本怎么写

结构层有两份通过,证据层只有一份可接受。这是三个编辑候选的练习结果,不能写成模型准确率为1/3,也不能把两次校验成功计为两张已完成工单。没有运行模型,本例也无法估计它实际会犯错的频率。

负责人缺字段、空字符串与null是三种不同情况。required要求字段出现;owner的类型允许字符串或null,所以空字符串同样可能通过当前Schema,却不符合本例明确的未知值约定。若团队约定未知用null,应在人工规则或更严格Schema里明确这一点,不能依赖绿色通过提示猜测。

恢复时先修正无依据的值,再对修正对象重跑原Schema并重新比对证据。只改审核账本为“已通过”、不保留最终JSON,不构成可复查的交付。后续转表格可参考CSV与JSON转换核对,防止null与空格在转换时失去区别。

同一工单的三个候选,不是三条业务数据
候选结构校验原文证据本例决定
01不通过Mina无依据退回结构和事实两层
02通过Mina无依据不能接受
03通过T-007 / export / null / 原片段对应本例接受,保留原JSON

常见问题

Schema 能自动验证负责人是否真实吗?

它能检查类型和约束,但本例没有接入真实工单资料。负责人是否有依据仍需要原文核查。

owner 未知时可以省略字段吗?

本例约定要求字段存在,所以使用 null。真实任务应先定义缺失处理,不能由模型自行选择省略或补名。

校验不通过时,直接删掉额外字段可以吗?

先判断额外信息是否有业务意义。删除可能满足结构,却也可能丢失需要另行记录的事实;按已确认约定修订并保留原始输出。

参考资料与延伸阅读

按步骤开始处理

进入对应工具,预览处理结果,检查导出的文件。

继续阅读