请问哪个大模型 api 能支持输出标准严谨的 json 格式

56 天前
 RaftingPoint

最近有个任务需要从前端抓取一些数据转换为 json ,由于格式多变,所以打算让大模型来自动化转换成 json 。试了下文心一言的 api 发现无论如何都会有输出格式不严谨的情况,导致不能从字符串转为 json. 请问有哪个大模型版本在这方面表现是比较稳定的吗

2960 次点击
所在节点    程序员
30 条回复
NoobNoob030
56 天前
格式比较固定的话,用 function call ,国内的 LLM 基本都支持
matrix1010
56 天前
Gemini 1.5 flash/pro 用 JSON mode ,根据我几千次的测试来看 100%返回 JSON, 大约 0.5%的情况下会出现返回数组而不是 object 的情况,不过这可能跟我的 prompt 有关。GPT 4o/4o mini 虽然我没试但应该也差不多,理论上应该更好。

估计原生支持 JSON mode 的 LLM 都没问题,针对 JSON 进行过专门优化
vacuitym
56 天前
openai 的模型也支持 json 模式
Oats
56 天前
从测试来看,openai 的最严谨,如果要通用的话最好还是 function call
maocat
56 天前
你可能需要 Langchain
RaftingPoint
56 天前
@NoobNoob030 格式不太固定,每一条抓取的键值对可能有不同程度的嵌套关系,好像不太适合这种方式
RaftingPoint
56 天前
@maocat 谢谢,我也看到这个,打算试一下
crackidz
56 天前
LLM 不可能完全绝对严格,有几种做法:
1. 换一个更好的模型...
2. 选择验证相对松散的验证,当然也仍旧会有概率有问题,但会比 JSON 低
3. 提升 prompt 尝试保证更强的输出,当然这对底模有要求,底模也要单独优化过
RaftingPoint
56 天前
@matrix1010 谢谢!我看了下我的文本并不复杂,按理模型转成 json 难度应该不大,prompt 的关系估计比较小,或许我换个模型试试
varxo
56 天前
我使用文心提示返回信息“必须返回 Json 格式”, 不加必须有时候返回的就不是 json
LeslieLeung
56 天前
可以尝试给 prompt 里加上 JSON schema ,我写了一篇文章可以看看 https://ameow.xyz/archives/llm-structural-output

另外,据说 finetuning 给他几个 JSON 的例子也能让它更稳定地输出。
DjvuLee
56 天前
@matrix1010 flash 啥时候支持 JSON Mode 了?只有 pro 支持。
DjvuLee
56 天前
实测最好是是 GPT 系列,其他的都不稳定。指定 json mode 就可以。
RaftingPoint
56 天前
@varxo 我也加了,返回的 json 字符串是放在 markdown 格式里的,不知道是否和编码有关系
matrix1010
56 天前
@DjvuLee https://ai.google.dev/gemini-api/docs/json-mode?lang=python "This approach works with both Gemini 1.5 Flash and Gemini 1.5 Pro. Since the model gets the format specification from text in the prompt, you may have some flexibility in how you represent the specification. Any reasonable format for representing a JSON schema may work."
DjvuLee
56 天前
@matrix1010 我看到的是下面原文开头是这样说的。我认为的是在 model 层面可以直接指定的这种。不过可能你说的是对的,实际上 flash 可以 work 。

> In your prompt, you can ask Gemini to produce JSON-formatted output, but note that Google can't guarantee that it will produce JSON and nothing but JSON. However, if you use Gemini 1.5 Pro, you can pass a specific JSON schema in a response_schema field so that Gemini always responds with an expected structure.


> As a structured schema supplied through model configuration. This approach works with Gemini 1.5 Pro but not Gemini 1.5 Flash.
qweruiop
56 天前
最好是用 function call ,实在不行就重试,目前是这样解决的。。。
winterbells
56 天前
openai 的用过一段时间,很稳定,但还是得加校验
NoobNoob030
56 天前
复杂 json 场景,目前我用的解决方案是 few shot 里掺了点 markdown 的 json ,并且加了重试机制( 2-3 次) ,格式通过率在 99%,主要在处理中文符号和 \" 的时候会报错,中后期开发基本没有格式问题的烦恼
joyce95
56 天前
我是偷懒党,不行就让重试。

但是 openai 用提示词基本能靠谱返回,但也不稳定。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1059074

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX