DeepSeek JSON提取教程:固定字段与结果校验
从一句订单备注提取商品、数量和交期时,最危险的结果不是报错,而是一个能解析、内容却错误的JSON。这个示例把模型输出当作待校验数据,先固定字段,再检查类型、来源与缺失值。适合已有程序基础的开发者;不适合把抽取结果直接接到付款、发货等不可逆操作。
明确输入和字段
先用虚构文本练习:“客户要三套蓝色收纳盒,交期还没定。”期望结构为商品、数量、颜色、交期;未给出交期就保留空值。不要让模型自行把“还没定”变成一个日期,也不要在同一字段里混放数字和解释。
{"product":"收纳盒","quantity":3,"color":"蓝色","due_date":null}
这是人工定义的期望结果,不是一次真实API调用的返回。
请求中同时指定 JSON 模式和要求
DeepSeek 官方JSON模式要求设置 response_format,同时在提示词中明确写出json并给出格式示例。当前Chat Completions文档列出deepseek-flash等模型;实际接入时应使用自己账户有权限的模型标识。以下是请求体示例,认证信息应由程序环境安全读取,不要写进源码或公开网页。
{
"model": "deepseek-flash",
"messages": [
{"role":"system","content":"从文本抽取订单信息,输出json。字段为product字符串、quantity整数或null、color字符串或null、due_date日期字符串或null。未给出就用null,不推测。示例:{\"product\":\"收纳盒\",\"quantity\":3,\"color\":\"蓝色\",\"due_date\":null}"},
{"role":"user","content":"客户要三套蓝色收纳盒,交期还没定。"}
],
"response_format": {"type":"json_object"},
"max_tokens": 512
}
通过官方Chat Completions接口发送时,HTTP状态、响应结构和生成结束原因都要检查。示例没有执行付费请求,也没有展示实际账单;API费用与聊天会员分别计算。
在自己的程序里再校验一遍
先读取正文字符串,拒绝空内容;再解析JSON,检查是否为对象、必需字段是否齐全、是否出现额外字段。quantity只能是允许范围的整数或空值,due_date需验证日期本身有效。JSON模式约束语法,不等于已经满足你的业务字段和事实要求。
对“十二盒”和“12箱”这类输入,应把数量和单位拆成不同字段,而非都写成数字十二。出现“下周五”等相对日期时,若输入没有可靠基准日期,就不自动推算;必须将基准日期作为明确输入,保留原词供回查。
为失败准备确定的处理路径
官方说明JSON输出可能出现空内容,也需避免输出长度不足导致截断。空结果、截断、解析失败和字段校验失败应进入可观察的失败队列,保留脱敏输入及原因。不要对付款或发货自动重试;即使重新抽取得到合法对象,也要由后续业务流程决定是否执行。
用缺失字段、否定句、多个商品、矛盾交期和超长文本分别测试。只有一条简单样本正确,不能代表批量资料可直接使用。对机密订单,先确认云端处理许可,再考虑上传。
接口依据:JSON Output、Chat Completions参数。产品入口见 DeepSeek详情。