免费POC, 零成本试错
AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


LLM稳定JSON输出,终于摸清了

发布日期:2025-10-25 23:28:05 浏览次数: 1533
作者:Woo Tzins

微信搜一搜,关注“Woo Tzins”

推荐语

LLM生成JSON格式常出问题?三种方法帮你稳定输出,提升数据处理效率。

核心内容:
1. 使用json-repair包智能修正常见JSON格式错误
2. 通过Pydantic设置schema验证数据结构
3. 利用vllm内置参数直接格式化输出

杨芳贤
53AI创始人/腾讯云(TVP)最具价值专家
JSON 格式作为轻量级数据交换格式,已成为 API 接口、数据存储、系统集成中的 “通用语言”。然而,传统大语言模型(LLM)在生成 JSON 时,常面临格式错乱、字段缺失、语法错误等问题 —— 可能因自然语言表述偏差导致括号不匹配,也可能因复杂逻辑处理遗漏关键参数,最终让自动化数据流转 “卡壳”,不仅增加人工校验成本,更可能引发下游系统故障,成为业务效率提升的隐性瓶颈。
LLM 稳定 JSON 输出功能的出现,正是为解决这一核心痛点而生。
第一种:使用json-repair包
原理:这个包能智能地处理各种常见错误,例如:修正缺失或错误的引号、移除多余的逗号,并能自动忽略JSON内容前后无关的文本
链接:
https://github.com/mangiucugna/json_repair/
缺点:返回结果里没有json格式的数据,就会失效
举例:
"好的,这是您要的JSON:\n{'user': 'Alex', 'id': 123}\n希望对您有帮助!"为例
这种一般是因为前后有多余的字,无法直接使用json.load进行转换,因为需要使用json-repair。
from json_repair import repair_jsonllm_output_string = "好的,这是您要的JSON:\n{'user': 'Alex', 'id': 123}\n希望对您有帮助!"repaired_string = repair_json(llm_output_string)# 输出: {"user""Alex""id"123}

第二种:Pydantic设置schema
原理:定义了一个类作为数据“蓝图”,规定了数据有哪些字典。其次,当传入llm返回结果时(一般是字符串),Pydantic会自动验证数据结构,并将相应数据转换为对应的type。
缺点:Pydantic 本身无法像json-repair处理额外的文字。
举例:
from pydantic import BaseModelclass User(BaseModel):                   idint                   name: str                   is_active: bool = True  input_data = {"id""123""name""Alice" user = User(**input_data)  print(user.model_dump_json(indent=2))  # 输出: { "id": 123, "name": "Alice","is_active": true}

第三种:vllm格式化输出
原理:和schema的原理是一样,只是vllm里面集成好,可以直接设置参数extra_body来输出。
缺点:有试错成本,API会有额外消耗
举例:
from pydantic import BaseModelclass Topic(BaseModel):                     问题: str                      答案: strcompletion = client.chat.completions.create(                    model=model,                    messages=[                               {"role""system",                  "content": system_prompt },                        {"role""user",                    "content": user_prompt },  ],                   extra_body={ "guided_json": Topic.model_json_schema()},               )

第四种:约束性解码
这类方法有很多,比如:LM-Format-Enforcer库,Xgrammar等
原理:在LLM生成每个token时基于策略选择满足约束的token,从而指导LLM生成给定的json格式。简单地说,通过一个预设的规则(如JSON Schema),在模型选择下一个词(Token)的瞬间,动态地屏蔽掉所有不符合语法或格式的选项。
缺点:实现复杂,增加开销,可能会稍微降低生成速度,一定程度上牺牲模型的灵活性和创造性。

>> 作者:Woo Tzins  
>>联系邮箱:wootzins@163.com

53AI,企业落地大模型首选服务商

产品:场景落地咨询+大模型应用平台+行业解决方案

承诺:免费POC验证,效果达标后再合作。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

添加专属顾问

回到顶部

加载中...

扫码咨询