V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
young1
V2EX  ›  程序员

大模型吐 JSON

  •  1
     
  •   young1 · 17 小时 53 分钟前 · 3967 次点击
    各位大佬,我现在遇到一个问题,就是提示词规定了模型要吐的 JSON 格式,然后也让模型处理转义字符。但是还是会出现模型吐的 JSON 字符串不对,缺或者多括号,然后双引号没有转义等问题,导致 Java 转 JSON 的时候报错。有什么好的办法吗
    45 条回复    2025-09-06 00:06:45 +08:00
    luoyou1014
        1
    luoyou1014  
       17 小时 51 分钟前
    Vegetable
        2
    Vegetable  
       17 小时 50 分钟前
    建议选择官方支持 json schema output 的模型
    young1
        3
    young1  
    OP
       17 小时 49 分钟前
    @Vegetable 现在用的豆包 1.6
    chenluo0429
        4
    chenluo0429  
       17 小时 46 分钟前 via Android
    很多语言都有一些 json 修复库,对于存在少量异常的 json 修正为合法格式。
    nolan1864
        5
    nolan1864  
       17 小时 43 分钟前 via iPhone
    从推理的角度看,即使加上 guided decoding 也不能完全保证输出就一定是 json 的。一方面你可以选择 #2 说的训练过程中有 json 相关训练的模型,另一方面你可以在客户端进行 json 的检查,检查不过就重发请求,几次不行就报错好了。
    zsc8917zsc
        6
    zsc8917zsc  
       17 小时 43 分钟前
    给一个建议哈,行不行自己试一试,你让模型把 json 吐在代码块里面,你从代码块里面取内容,忽略非代码块的部分
    Vegetable
        7
    Vegetable  
       17 小时 41 分钟前   ❤️ 1
    @young1
    https://www.volcengine.com/docs/82379/1568221
    https://www.volcengine.com/docs/82379/1330310#5414cb1d

    官方文档声称支持 json_schema 的 response_output ,这样你调用的时候,模型会保证返回的结构是合法的 JSON 。实际上,业界是先有的 json 这个 output 类型,已经能保证返回合法的 json ,后来大家发现用 prompt 来说明结构太呆了,又纷纷支持了 json_schema 这种标准的描述 response json 的形式。
    zfjdif
        8
    zfjdif  
       17 小时 40 分钟前
    换个好点的模型,大部分的问题其实都是模型能力不足,除非没的选,不建议从工程上想办法解决。
    fzdwx
        9
    fzdwx  
       17 小时 32 分钟前
    搜 AI 结构化输出吧,现在模型基本都支持
    metadata
        10
    metadata  
       17 小时 25 分钟前
    最靠谱的就是找豆包有没有相关的官方 api ,简单的就做个重试机制,报错就把 json 再发给大模型让他修复,如果不行就是大模型能力问题。
    cheng6563
        11
    cheng6563  
       17 小时 24 分钟前
    用另一个提示词检查 JSON 格式输出验证信息,以及你自己程序的 JSON 转格式时的报错信息。
    若检查到格式不对,补充错误信息让他重出 JSON 。
    zjyl1994
        12
    zjyl1994  
       17 小时 19 分钟前
    https://github.com/HAibiiin/json-repair

    建议用库先修一下,然后再解析。代码里做点容错也能解决嵌套不对的问题
    dddd1919
        13
    dddd1919  
       17 小时 15 分钟前
    解析 try catch ,异常处理把原值丢回给 AI 让他把格式处理对再返回
    knva
        14
    knva  
       16 小时 24 分钟前
    用支持 json 输出的模型加上 pydantic 就行了
    luckrnx09
        15
    luckrnx09  
       16 小时 22 分钟前 via iPhone
    13 楼正解
    totoro52
        16
    totoro52  
       16 小时 22 分钟前
    先看模型支不支持结构化输出,不支持结构化输出的模型,你提示词在怎么写他都会出现幻觉, 我现在也遇到这个问题哦
    734694671
        17
    734694671  
       14 小时 55 分钟前
    @young1 我也用豆包,目前用 json 化输出的模型没出现 json 格式错误的问题,好奇问下什么情况下出现的
    peter1314
        18
    peter1314  
       14 小时 53 分钟前
    提示词:
    角色
    你是启航考研的视频课程全文概要总结专家,你将根据视频内容,按要求总结出视频课程的全文概要,生成一个结构完美、语法正确的 JSON 对象

    给一些 json 正确输出的案例:

    输出前,请先自我检查:\n" +
    "1. JSON 大括号是否配对?\n" +
    "2. 引号是否统一为双引号?\n" +
    "3. 逗号、换行是否正确?\n" +
    "4. 有无多余字符(如末尾额外 })?\n" +
    "若发现错误,请自动修正后再输出最终结果。" +


    然后他给的数据绝大部分情况是:
    ```json 和结尾的 ```

    代码里面需要移除开头的 ```json 和结尾的 ``` 标记

    然后再是处理一些 json 有问题的情况:
    1.处理常见错误(如末尾多余的 } 或其他字符)
    2.处理引号不匹配(如混用单引号)
    3.处理大括号不配对(尝试补全或删减)

    这是我的处理方式,但是还是有很少很少的还是有点问题,但是覆盖绝大部分情况了
    elevioux
        19
    elevioux  
       14 小时 41 分钟前
    看看支不支持 写 json schema 吧,不要光靠提示词
    forestrs
        20
    forestrs  
       14 小时 36 分钟前
    提升词最后加上一句
    “确保结果可以被 json.loads”
    然后用正则贪婪匹配[]或者{};加了这句提示词后大多数模型不会输出错,除非你的模型能力很弱。
    guaguaguaxia1
        21
    guaguaguaxia1  
       14 小时 17 分钟前
    大模型能力不夠,你用 grok3 之类的不会有这个问题
    gewuzhizhi
        22
    gewuzhizhi  
       14 小时 16 分钟前
    遇到过同样的问题,给 fewshot 就行
    yadam
        23
    yadam  
       14 小时 13 分钟前
    可以试试 k2, 有 token enforcer 保证可以吐对
    beloved70020
        24
    beloved70020  
       14 小时 8 分钟前
    输出 tool_calls 呗
    icyalala
        25
    icyalala  
       13 小时 53 分钟前
    如果你用普通的大模型,那肯定有概率生成不标准的 JSON
    你得找支持 json mode 的大模型 API ,那个在生成 token 阶段就会进行语法约束,把无效 token 概率调到 0 ,才能 100%保证 JSON 合法
    Liftman
        26
    Liftman  
       13 小时 49 分钟前
    不可能出错。除非你模型很拉跨。。。比如你用的豆包。。

    我这边 gpt5 日常生成固定报告的 json 。然后渲染。毫无压力。失败率 0 。。。

    而且目前 gpt5 是对 json 指令遵循最好的感觉。
    annilq
        27
    annilq  
       13 小时 36 分钟前
    13 楼处理方式基本能满足,我之前写了个生成书记目录的应用,也是会出现 json 解析问题,然后 catch 错误再扔回 llm 修复基本都可以的
    young1
        28
    young1  
    OP
       12 小时 59 分钟前
    @dddd1919 目前是这样做的,但是这样耗时,因为在做内容召回,文本很长,然后模型吐的时间也比较长。所以还是期望一次就解决 json
    young1
        29
    young1  
    OP
       12 小时 58 分钟前
    @734694671 长文本的时候
    young1
        30
    young1  
    OP
       12 小时 54 分钟前
    @734694671 还有就是引号问题,模型给的长文本里面包含了召回内容里面带有的引号,有的时候会无法转换,还有就是经纬度,已经限定了条件,但是模型后面输出的时候就会吧经纬度的'转成"
    dddd1919
        31
    dddd1919  
       12 小时 28 分钟前
    @young1 #28 如果是支持多轮会话的 AI ,可以在 catch 这一步启用新的会话只做 json 修正,减少大模型理解上下文的时间
    glitter1105
        32
    glitter1105  
       12 小时 22 分钟前
    我的处理方法是手动使用正则匹配提取。
    matrix1010
        33
    matrix1010  
       11 小时 56 分钟前
    zxr615
        34
    zxr615  
       11 小时 21 分钟前
    用 tools,限制返回的 Json 结构,在请求中指定定义结构:

    ``` json
    {
    "tools": [
    {
    "type": "function",
    "function": {
    "name": "generateContent",
    "parameters": {
    "type": "object",
    "properties": {
    "filed_1": {
    "type": "string",
    "description": "这是要返回的字段 1"
    },
    "filed_2": {
    "type": "string",
    "description": "这是要返回的字段 2"
    }
    }
    },
    "required": [
    "filed_1",
    "filed_2"
    ]
    }
    }
    ],
    "tool_choice": {
    "type": "function",
    "function": {
    "name": "generateContent"
    }
    }
    }
    ```
    quicksandznzn
        35
    quicksandznzn  
       11 小时 5 分钟前
    json-repair 或者 json_schema 的方式
    pathetique
        36
    pathetique  
       9 小时 48 分钟前
    structured output or function calling (openai)?
    kabob
        37
    kabob  
       9 小时 42 分钟前
    我这边换了 claude 模型后就解决了,或者 openai o 系列推理模型,总结就是换厉害的模型
    donaldturinglee
        38
    donaldturinglee  
       9 小时 38 分钟前
    我解析 json 用的 json_schema 格式,或者你 call 一个 tool ,让 tool 帮你完成 json 格式的转换
    IceBay
        39
    IceBay  
       9 小时 22 分钟前
    hopeoffer
        40
    hopeoffer  
       8 小时 19 分钟前
    我也遇到类似问题,用 claude 4 sonnet 都可能出现,有些转义符号导致 json 错误的情况。
    我后面在这个 workflow 框架,发现作者提到用 yaml 代替 json ,目前觉得比 json 好使。
    https://the-pocket.github.io/PocketFlow/design_pattern/structure.html#prompt-engineering
    xiaowangge
        41
    xiaowangge  
       8 小时 1 分钟前 via iPhone
    关键字搜索「结构化输出」。需要定义 json schema
    igeeky
        42
    igeeky  
       6 小时 53 分钟前
    就是模型能力问题. 我最近也是大量这种长文本的生成. 豆包 1.6 错误率非常高. qwen, ds3.1, gemini 要好一些. 但是要多样化, 几个模型都要使用. json_schema 也依赖模型能力, 使用了 json_schema,返回非 json 也是很常见的. 后面直接改成返回非 json 了(适用于返回的字段比较少的情况)
    akira
        43
    akira  
       5 小时 45 分钟前
    1. 换更强大的模型 能极大的降低 json 幻觉的概率。 之前 qwen 2.5 几乎每天都有,切到 qwen3 就基本上很少见到了。
    2. 重试。一般都是偶发的,出现问题的时候 重试一下就可以了。
    3. 代码兜底处理。
    ClericPy
        44
    ClericPy  
       4 小时 45 分钟前
    @luoyou1014 遇到了楼主说的 JSON 多半个花括号的问题,用了 langchain 的那个 output schema 什么的好多了

    最近几天刷到 pydantic AI ,这东西好用么
    刚才随手试了下,光切换成百炼模型就折腾了好一会(直接看源码还是太菜)
    dongcxcx
        45
    dongcxcx  
       4 小时 13 分钟前
    确实。有时候还给我在 json 里加上``` ```这种 markdown 语法,想骂人。
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   900 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 20:20 · PVG 04:20 · LAX 13:20 · JFK 16:20
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.