各位大佬,我现在遇到一个问题,就是提示词规定了模型要吐的 JSON 格式,然后也让模型处理转义字符。但是还是会出现模型吐的 JSON 字符串不对,缺或者多括号,然后双引号没有转义等问题,导致 Java 转 JSON 的时候报错。有什么好的办法吗

pydantic AI

ai.pydantic.org.cn/

建议选择官方支持 json schema output 的模型

现在用的豆包 1.6

很多语言都有一些 json 修复库,对于存在少量异常的 json 修正为合法格式。

从推理的角度看,即使加上 guided decoding 也不能完全保证输出就一定是 json 的。一方面你可以选择 #2 说的训练过程中有 json 相关训练的模型,另一方面你可以在客户端进行 json 的检查,检查不过就重发请求,几次不行就报错好了。

给一个建议哈,行不行自己试一试,你让模型把 json 吐在代码块里面,你从代码块里面取内容,忽略非代码块的部分

www.volcengine.com/docs/82379/1568221
www.volcengine.com/docs/82379/1330310#5414cb1d

官方文档声称支持 json_schema 的 response_output ,这样你调用的时候,模型会保证返回的结构是合法的 JSON 。实际上,业界是先有的 json 这个 output 类型,已经能保证返回合法的 json ,后来大家发现用 prompt 来说明结构太呆了,又纷纷支持了 json_schema 这种标准的描述 response json 的形式。

换个好点的模型,大部分的问题其实都是模型能力不足,除非没的选,不建议从工程上想办法解决。

搜 AI 结构化输出吧,现在模型基本都支持

最靠谱的就是找豆包有没有相关的官方 api ,简单的就做个重试机制,报错就把 json 再发给大模型让他修复,如果不行就是大模型能力问题。

用另一个提示词检查 JSON 格式输出验证信息,以及你自己程序的 JSON 转格式时的报错信息。
若检查到格式不对,补充错误信息让他重出 JSON 。

github.com/HAibiiin/json-repair

建议用库先修一下,然后再解析。代码里做点容错也能解决嵌套不对的问题

解析 try catch ,异常处理把原值丢回给 AI 让他把格式处理对再返回

用支持 json 输出的模型加上 pydantic 就行了

13 楼正解

先看模型支不支持结构化输出,不支持结构化输出的模型,你提示词在怎么写他都会出现幻觉, 我现在也遇到这个问题哦

我也用豆包,目前用 json 化输出的模型没出现 json 格式错误的问题,好奇问下什么情况下出现的

提示词:
角色
你是启航考研的视频课程全文概要总结专家,你将根据视频内容,按要求总结出视频课程的全文概要,生成一个结构完美、语法正确的 JSON 对象

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

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

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

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

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

这是我的处理方式,但是还是有很少很少的还是有点问题,但是覆盖绝大部分情况了

看看支不支持 写 json schema 吧,不要光靠提示词

提升词最后加上一句
“确保结果可以被 json.loads”
然后用正则贪婪匹配[]或者{};加了这句提示词后大多数模型不会输出错,除非你的模型能力很弱。