查看: 95|回复: 0

JSON 完整详解|大模型接口、Function Calling 结构化输出落地指南

[复制链接]

849

主题

1

回帖

2602

积分

超级版主

积分
2602
发表于 2026-8-14 08:57:24 | 显示全部楼层 |阅读模式
导语

       做 AI 接口开发、RAG 知识库、Agent 智能体、前后端对话平台时,JSON 是数据传输通用标准。很多新手分不清 JSON 与 JS 对象、经常出现解析报错,搭建 Function Calling 工具调用、信息抽取任务时,模型输出格式混乱导致程序崩溃。本期从 JSON 基础语法、六大原生数据类型讲起,区分对象 / 数组核心使用场景,梳理高频语法错误排查方案,重点结合大模型业务给出 JSON Schema、强制结构化输出、工具调用落地最佳实践,解决模型乱输出、解析失败线上故障。

一、JSON 基础定义与通俗类比

JSON 全称JavaScript Object Notation(JavaScript 对象标记语言),是跨语言通用纯文本结构化数据交换标准,不受编程语言限制,Python/Java/Go/ 前端 JS、各类大模型 API 全部原生支持。生活化类比:JSON 相当于通用标准化快递清单,统一规范物品名称、数量、分类,不管哪个仓库(程序)都能看懂;纯自然文字像手写随笔,机器无法自动提取字段。核心两大优势:
  • 人类可读、机器可快速解析;
  • 无语言绑定,后端推理服务、前端页面、向量库之间无缝互通。
关键区分:JSON ≠ JavaScript 对象

  • JSON:纯文本传输格式,严格遵循 RFC 8259 国际标准,用于网络请求、配置文件、模型输出;
  • JS 对象:浏览器 / Node 内存里的程序数据结构,语法宽松,仅 JS 内部使用;二者写法相似但规则完全不同,不能直接混用。

二、JSON 六大基础数据类型 + 两大核心容器

1 六种基础原生数据类型

  • 字符串 string:必须双引号包裹,单引号非法,支持中文、转义字符;
  • 数字 number:整数、小数,无需引号;
  • 布尔 boolean:仅true/false,小写,不加引号;
  • null 空值:代表无数据,区别于空字符串"";
  • 对象 object:大括号{}包裹,一组"键":值键值对;
  • 数组 array:中括号[]包裹,有序值列表,元素类型可混合。
2 两大核心容器区分

对象 {} — 描述单一实体(一对一属性)

适用:用户、文档、商品、模型工具参数,每一个 key 代表属性名。标准示例:
  1. {
  2.   "username": "AI开发工程师",
  3.   "age": 26,
  4.   "is_vip": true,
  5.   "remark": null
  6. }
复制代码
数组 [] — 有序集合(多条同类数据)

适用:聊天历史、文档片段、商品列表、工具参数数组。标准示例:、

  1. ["RAG知识库", "向量数据库", "vLLM推理"]
复制代码



嵌套结构(AI 项目最常用)


对象内部嵌套数组、数组内部嵌套对象,用来表达复杂业务数据(订单、对话记录):

  1. {
  2.   "user": "张三",
  3.   "chat_history": [
  4.     {"question": "什么是RAG", "answer": "检索增强生成"},
  5.     {"question": "vLLM优势", "answer": "分页KV缓存"}
  6.   ]
  7. }
复制代码

三、JSON 强制语法规范(踩坑高频红线)

  • 所有键名(key)必须双引号,单引号、无引号全部非法;
  • 字符串只能双引号,单引号不被标准 JSON 解析器识别;
  • 对象 / 数组最后一个元素禁止末尾逗号,Java/Python 解析直接报错;
  • JSON 不支持 //、/* */ 注释,写注释会解析失败;
  • 不能包含函数、日期对象这类编程语言特有结构;
  • 文本特殊符号" \ /必须转义。
典型错误示例(线上 90% 解析报错根源)

  1. {
  2.   name: "李四", // key无引号 错误
  3.   'age': 25, // 单引号key 错误
  4.   "tags": ["大模型", "RAG",], // 末尾逗号 错误
  5.   // 这是注释 非法JSON
  6. }
复制代码
四、三大 AI 核心 JSON 应用场景

场景 1:前后端 LLM 流式 / 普通 API 交互

所有大模型请求体、响应体统一使用 JSON 传输。普通对话请求示例:

  1. {
  2.   "model": "qwen-7b",
  3.   "messages": [
  4.     {"role": "system", "content": "你是知识库助手"},
  5.     {"role": "user", "content "解释向量数据库"}
  6.   ],
  7.   "stream": true,
  8.   "temperature": 0.2
  9. }
复制代码

SSE 流式返回每一段 delta 增量也是标准 JSON 片段。

场景 2:Function Calling 工具调用(Agent 智能体底层)

模型需要调用数据库、接口、计算器时,必须输出标准 JSON 格式工具参数,后端程序才能自动解析执行。工具定义 JSON Schema 示例:

  1. {
  2.   "type": "function",
  3.   "function": {
  4.     "name": "query_knowledge",
  5.     "description": "检索企业知识库",
  6.     "parameters": {
  7.       "type": "object",
  8.       "required": ["query", "doc_type"],
  9.       "properties": {
  10.         "query": {"type": "string", "description": "用户问题"},
  11.         "doc_type": {"type": "string", "enum": ["合同","产品手册"]}
  12.       }
  13.     }
  14.   }
  15. }
复制代码

场景 3:结构化信息抽取(RAG、文档解析)

要求模型输出固定 JSON,批量提取合同、简历、商品结构化字段,避免纯文本无法入库。抽取输出规范:

  1. {
  2.   "company_name": "XX科技",
  3.   "contract_amount": 50000,
  4.   "expire_date": "2026-12-31",
  5.   "risk_points": ["付款周期过长"]
  6. }
复制代码

五、大模型稳定输出 JSON 两套工业方案

方案 1 Prompt 约束(简易 Demo 使用)

在系统提示词强制输出规则:
你的输出只能返回标准 JSON,禁止任何解释、前言、markdown 代码块;所有 key 使用双引号,数组末尾不能带逗号,不添加注释;输出结构严格遵循模板:{xxx}短板:低参数量模型、复杂任务容易失效,偶尔夹带文字。
方案 2 JSON Schema 强制结构化(生产首选)

主流商用 API(GPT、DeepSeek、通义千问)、Ollama、vLLM 均支持response_format参数,传入规范 Schema,底层 Token 生成时做语法约束,模型无法输出非法格式,解析失败概率趋近 0。OpenAI 标准调用片段:

  1. from openai import OpenAI
  2. client = OpenAI()
  3. resp = client.chat.completions.create(
  4.     model="qwen2-14b",
  5.     messages=[{"role":"user","content":"提取合同信息"}],
  6.     response_format={
  7.         "type": "json_schema",
  8.         "json_schema": {
  9.             "name": "contract_extract",
  10.             "strict": true,
  11.             "schema": {
  12.                 "type": "object",
  13.                 "required": ["company","amount"],
  14.                 "properties": {
  15.                     "company": {"type":"string"},
  16.                     "amount": {"type":"number"}
  17.                 },
  18.                 "additionalProperties": false
  19.             }
  20.         }
  21.     }
  22. )
复制代码

核心参数strict:true禁止额外字段,从底层锁定输出结构。
本地推理(Ollama/llama.cpp)

启动参数增加format json,强制模型仅输出合法 JSON,省去人工文本清洗。

六、线上 JSON 解析故障排查全流程

  • 查看 HTTP 响应头Content-Type,必须为application/json;
  • 复制原始响应文本,在线 JSON 校验工具检查语法(多余逗号、单引号、注释);
  • 区分语法错误(括号 / 引号错)、结构错误(缺失必填 key、类型不匹配);
  • 大模型场景:无 Schema 约束优先升级为结构化输出;
  • 后端框架统一开启严格 JSON 解析(Spring/Express 默认拒绝宽松格式)。
高频报错根因

  • Unexpected token:存在单引号、注释、多余逗号;
  • Expected number/string:字段类型不匹配(数字加引号、布尔写字符串);
  • Unexpected end of input:流式 JSON 片段截断、网络超时。

七、新手高频认知误区澄清


误区 1 JSON 可以写 // 注释方便调试

纠正标准 JSON 完全不支持注释,上线必须删除,否则服务解析崩溃。
误区 2 JS 对象可以直接当作 JSON 传输

纠正 JS 特有函数、单引号写法、无 key 引号均不符合规范,跨语言解析报错。
误区 3 只要提示词要求,模型一定输出纯 JSON

纠正 7B 及以下轻模型容易夹带说明文字,生产必须用 JSON Schema 强制约束。
误区 数组最后加逗号只是警告不影响

纠正 Java、Go、Python 解析器直接抛出异常,服务 500。
误区 null 和 "" 空字符串作用相同

纠正 null 代表无数据,空字符串是空白文本,数据库入库逻辑完全不同。

八、本期全文总结

1 JSON 是跨语言标准化文本格式,六大基础类型 + 对象 / 数组两大容器;2 语法红线:双引号、无末尾逗号、禁止注释、不支持单引号;3 AI 三大核心用途:LLM 接口传输、Function Calling 工具参数、文档结构化抽取;4 线上稳定方案:抛弃纯 Prompt,使用 JSON Schema 强制结构化输出;5 解析报错优先校验原始文本语法,再核对字段类型与 Schema;6 Agent、RAG、API 服务开发全部依赖 JSON,是 AI 工程底层基础数据标准。


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|天翼网

相关侵权、举报、投诉及建议等,请发 E-mail:2026@typc.net

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.|晋ICP备2026008270号-1|晋公网安备14010602111293号

QQ客服返回顶部