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

大模型吐 JSON

  •  1
     
  •   young1 · 2 天前 · 5035 次点击
    各位大佬,我现在遇到一个问题,就是提示词规定了模型要吐的 JSON 格式,然后也让模型处理转义字符。但是还是会出现模型吐的 JSON 字符串不对,缺或者多括号,然后双引号没有转义等问题,导致 Java 转 JSON 的时候报错。有什么好的办法吗
    53 条回复    2025-09-07 14:36:32 +08:00
    luoyou1014
        1
    luoyou1014  
       2 天前
    Vegetable
        2
    Vegetable  
       2 天前
    建议选择官方支持 json schema output 的模型
    young1
        3
    young1  
    OP
       2 天前
    @Vegetable 现在用的豆包 1.6
    chenluo0429
        4
    chenluo0429  
       2 天前 via Android
    很多语言都有一些 json 修复库,对于存在少量异常的 json 修正为合法格式。
    nolan1864
        5
    nolan1864  
       2 天前 via iPhone
    从推理的角度看,即使加上 guided decoding 也不能完全保证输出就一定是 json 的。一方面你可以选择 #2 说的训练过程中有 json 相关训练的模型,另一方面你可以在客户端进行 json 的检查,检查不过就重发请求,几次不行就报错好了。
    zsc8917zsc
        6
    zsc8917zsc  
       2 天前
    给一个建议哈,行不行自己试一试,你让模型把 json 吐在代码块里面,你从代码块里面取内容,忽略非代码块的部分
    Vegetable
        7
    Vegetable  
       2 天前   ❤️ 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  
       2 天前
    换个好点的模型,大部分的问题其实都是模型能力不足,除非没的选,不建议从工程上想办法解决。
    fzdwx
        9
    fzdwx  
       2 天前
    搜 AI 结构化输出吧,现在模型基本都支持
    metadata
        10
    metadata  
       2 天前
    最靠谱的就是找豆包有没有相关的官方 api ,简单的就做个重试机制,报错就把 json 再发给大模型让他修复,如果不行就是大模型能力问题。
    cheng6563
        11
    cheng6563  
       2 天前
    用另一个提示词检查 JSON 格式输出验证信息,以及你自己程序的 JSON 转格式时的报错信息。
    若检查到格式不对,补充错误信息让他重出 JSON 。
    zjyl1994
        12
    zjyl1994  
       2 天前
    https://github.com/HAibiiin/json-repair

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

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

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


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

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

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

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

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

    而且目前 gpt5 是对 json 指令遵循最好的感觉。
    annilq
        27
    annilq  
       2 天前
    13 楼处理方式基本能满足,我之前写了个生成书记目录的应用,也是会出现 json 解析问题,然后 catch 错误再扔回 llm 修复基本都可以的
    young1
        28
    young1  
    OP
       2 天前
    @dddd1919 目前是这样做的,但是这样耗时,因为在做内容召回,文本很长,然后模型吐的时间也比较长。所以还是期望一次就解决 json
    young1
        29
    young1  
    OP
       2 天前
    @734694671 长文本的时候
    young1
        30
    young1  
    OP
       2 天前
    @734694671 还有就是引号问题,模型给的长文本里面包含了召回内容里面带有的引号,有的时候会无法转换,还有就是经纬度,已经限定了条件,但是模型后面输出的时候就会吧经纬度的'转成"
    dddd1919
        31
    dddd1919  
       2 天前
    @young1 #28 如果是支持多轮会话的 AI ,可以在 catch 这一步启用新的会话只做 json 修正,减少大模型理解上下文的时间
    glitter1105
        32
    glitter1105  
       2 天前
    我的处理方法是手动使用正则匹配提取。
    matrix1010
        33
    matrix1010  
       1 天前
    zxr615
        34
    zxr615  
       1 天前
    用 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  
       1 天前
    json-repair 或者 json_schema 的方式
    pathetique
        36
    pathetique  
       1 天前
    structured output or function calling (openai)?
    kabob
        37
    kabob  
       1 天前
    我这边换了 claude 模型后就解决了,或者 openai o 系列推理模型,总结就是换厉害的模型
    donaldturinglee
        38
    donaldturinglee  
       1 天前
    我解析 json 用的 json_schema 格式,或者你 call 一个 tool ,让 tool 帮你完成 json 格式的转换
    IceBay
        39
    IceBay  
       1 天前
    hopeoffer
        40
    hopeoffer  
       1 天前
    我也遇到类似问题,用 claude 4 sonnet 都可能出现,有些转义符号导致 json 错误的情况。
    我后面在这个 workflow 框架,发现作者提到用 yaml 代替 json ,目前觉得比 json 好使。
    https://the-pocket.github.io/PocketFlow/design_pattern/structure.html#prompt-engineering
    xiaowangge
        41
    xiaowangge  
       1 天前 via iPhone
    关键字搜索「结构化输出」。需要定义 json schema
    igeeky
        42
    igeeky  
       1 天前
    就是模型能力问题. 我最近也是大量这种长文本的生成. 豆包 1.6 错误率非常高. qwen, ds3.1, gemini 要好一些. 但是要多样化, 几个模型都要使用. json_schema 也依赖模型能力, 使用了 json_schema,返回非 json 也是很常见的. 后面直接改成返回非 json 了(适用于返回的字段比较少的情况)
    akira
        43
    akira  
       1 天前
    1. 换更强大的模型 能极大的降低 json 幻觉的概率。 之前 qwen 2.5 几乎每天都有,切到 qwen3 就基本上很少见到了。
    2. 重试。一般都是偶发的,出现问题的时候 重试一下就可以了。
    3. 代码兜底处理。
    ClericPy
        44
    ClericPy  
       1 天前
    @luoyou1014 遇到了楼主说的 JSON 多半个花括号的问题,用了 langchain 的那个 output schema 什么的好多了

    最近几天刷到 pydantic AI ,这东西好用么
    刚才随手试了下,光切换成百炼模型就折腾了好一会(直接看源码还是太菜)
    dongcxcx
        45
    dongcxcx  
       1 天前
    确实。有时候还给我在 json 里加上``` ```这种 markdown 语法,想骂人。
    Stevenv
        46
    Stevenv  
       1 天前 via iPhone
    没事,gemini 2.5 pro 都会有这种问题。
    andrew2558
        47
    andrew2558  
       1 天前
    这个似乎无解,多了总会有一些出错
    kalafinaian
        48
    kalafinaian  
       1 天前
    用 json_repair
    kalafinaian
        50
    kalafinaian  
       1 天前
    更复杂的情况可以用 LLM 进行二次修正
    changz
        51
    changz  
       1 天前
    写个启发式的 json parser ,不难的
    yulon
        52
    yulon  
       1 天前
    大模型就是会出错,所以工具侧要有纠错机制。

    上次 v2 有个人说什么掌握了 Claude Code 核心机制,然后说别人纠错代码那么多根本没用,真是惹我发笑。
    shihira
        53
    shihira  
       1 小时 23 分钟前 via Android
    就我自己测试来看,结构化输出比起什么限制都不加容易降智,不如解析 markdown 代码块
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2685 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 07:59 · PVG 15:59 · LAX 00:59 · JFK 03:59
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.