大模型吐 JSON
各位大佬,我现在遇到一个问题,就是提示词规定了模型要吐的 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”
然后用正则贪婪匹配[]或者{};加了这句提示词后大多数模型不会输出错,除非你的模型能力很弱。
比如 example.nacos.com 这是我的 nacos 地址, 帮我写个 bash 脚本, 查询 cpp_long_link 命名空间下的所有服务信息, grok 可以…
请教大伙儿现在博客都放哪儿了? 同收到 寻求一个轻量的、稳定的博客存放方案~ github ,不想实名只能牺牲其他体验 github 呗,要么 coding 加腾讯 c…
长期以来,不绑定手机号的微信,只能在 8.0.18 以前版本登录,其后的版本无法登录,必须强制绑定;6 月底发现的限制是:无法主动添加好友,无法加入新的群聊。微信支付服务,是连…