国内哪个大模型支持结构化输出(JSON schema, 不是 JSON mode)

9 天前
 matrix1010

看了几个似乎都不支持,比如千问的 [https://www.alibabacloud.com/help/zh/model-studio/json-mode#cedc170c4dlts] OpenAI 这个功能应该出了快一年了,不知道为什么国内大模型没跟进

2779 次点击
所在节点    程序员
22 条回复
LiuJiang
9 天前
阿?我以为所有模型都支持。。。国外好像都支持
LeslieLeung
9 天前
OpenAI 甚至把方法都公开了,就是 decode 的时候加个约束,是个工程上的方法,不需要对模型做修改。( via [link]( https://openai.com/index/introducing-structured-outputs-in-the-api/))

不知道国内的大模型研发是不是有什么难言之隐。
857681664
9 天前
我用 langchain 的 json schema ,接入 deepseek 模型是没有问题的
maemual
9 天前
neteroster
9 天前
这个其实不难,就是推理引擎加个约束采样,感觉更多是不重视,火山引擎就可以

https://www.volcengine.com/docs/82379/1568221

也可以用一些第三方平台提供的推理服务,都有这些功能

https://fireworks.ai/docs/structured-responses/structured-response-formatting

https://docs.nebius.com/studio/inference/json
matrix1010
9 天前
@LeslieLeung 模型层面应该也需要针对 json shema 训练的,可以看看这个 openai dev day 的视频 <amp-youtube data-videoid="kE4BkATIl9c" layout="responsive" width="480" height="270"></amp-youtube>?si=0Oy7D2fmnMoWUXQc&t=1986 。豆包确实支持,但不知道是只 decoding 层面约束还是模型也做了针对性训练
matrix1010
9 天前
@matrix1010 33 分钟开始,research 部分
musi
9 天前
@LeslieLeung 如果只是 decode 的时候约束,但是模型给你返回了一个不合法的字段你要怎么办呢?直接报错吗?
neteroster
9 天前
@matrix1010 这里其实比较微妙,实际上现在绝大多数的大模型都或多或少接受过“给定一个 json schema ,生成满足这个 schema 的 json” 这种训练(或者由其他类似的训练泛化得到相同能力)——你可以纯纯的使用 prompt 给模型 schema 要求它生成,他不至于完全做不了,顶多是有些地方会有语法/语义错误,然后 guided decode 就可以强制解决语法错误,至于内容和语义上,最终还是看模型的能力。

@musi #8 ,这里的 decode 是指 LLM 生成的最后一个阶段——从概率分布中采样,不是说 decode json string
iyaozhen
9 天前
@maemual +1 火山上的 deepseek 、doubao 都支持,kimi-k2 也在支持的路上了
iyaozhen
9 天前
@neteroster #9 我理解不是给一个 schema 让模型去生成一个 json 再修语法。而是使用已有的数据(非 json 的 output ),往 schema 上填。

因为按火山引擎的文档以及 openai 的文档,有提到“结合结构化信息写业务内容,而不是格式引导”


当然我对模型训练不了解。但工程经验来看,用 json schema 就不要想着你的 prompt 要输出 json ,更多是关注自己的业务逻辑,输出更有条理、结构化
neteroster
9 天前
@iyaozhen

> 不是给一个 schema 让模型去生成一个 json 再修语法。而是使用已有的数据(非 json 的 output ),往 schema 上填。

可以很明确的说并不是这样的,各大开源推理引擎都有相关实现可以参考。

---

来具体捋一下:

guided decode 可以确保模型生成的内容满足 json schema (前提是生成会终止),但是“让模型知道我要按某个 schema 输出 json” 是提示词(或者说上下文)做的事。

有的厂商,例如 OpenAI 和火山,他会告诉你:你直接在参数里给我传 schema 就行了,prompt 里不用说我要这个 json ,关注业务就好。这里,它们实际做的事是:在你的 prompt 后面或者在系统提示词里,按一定格式(可能有针对训练固定格式,也可能是直接拼接 prompt )告诉模型:下面这个是 schema ,你要按照这个生成,最后在 decode 时候由采样器强制规范,完成整个过程。实际上输入给模型的大多是这样的东西(示意)

<|user|>{你的 prompt} <|output_format|>JSON: {schema} <|assistant>

也可以参考 OpenAI 最近的开源模型,它的聊天模板里明确说了

Structured output

To control the output behavior of the model, you can define a response format at the end of the developer message with the following structure:

```
# Response Formats
## {format name}
// {description or context}
{schema}<|end|>
```

是加在系统提示里面的。最后结合推理引擎的 guided decode 生成。
liuzhedash
9 天前
@musi
差不多,现在的大模型不能百分之百保证返回的 schema 符合指令,所以必须检查返回内容
wx497657341
9 天前
我们有一个后端将图片给 google ocr 获取图片文本内容,然后将文本内容给 deepseek 提取程序可用的 json 数据。运行良好

$response = $client->post($url, [
'headers' => [
'Content-Type' => 'application/json',
'Authorization' => "Bearer {$token}",
],
'timeout' => 30,
'json' => [
'model' => 'deepseek-chat',
'messages' => [
[
'role' => 'system',
'content' => 'You are a Singapore vocational skills certificate expert and PHP developer. Your task is to extract key information about the certificate from the given text and return it in JSON format. so long as recipient.idrecipient.name 、competency.code 、competency.description 、date_issued 、certificate_number field',
],
[
'role' => 'user',
'content' => $this->text,
],
],
],
]);
asmoker
9 天前
靠提示词不稳定吧~
sitdownkevin
9 天前
sitdownkevin
9 天前
可以用 LangChain 的结构化输出。根据我的实践经验,如果返回的 JSON 只有一个层级,现在的国产模型都能通过提示词的方式返回。如果 JSON 存在多个层级,就只有 ChatGPT 比较稳定。
crackidz
9 天前
这个确实是要模型训练上单独做一些额外的处理的,但是这方面应该说是不是主要的方向,因为有很多方式可以实现这个功能,不一定需要声明 json schema 才可以做到。这些方案在 OpenAI 优化之前也是很多大模型的通用解决方案,因此这个功能确实属于优先级不高,尤其是很多 Agent 框架可以屏蔽这种差异(内置解决方案)
totoro52
9 天前
@wx497657341 不得慢死吗,我们也是这么干,结果 2 多分钟才输出完,特别是很多文字
totoro52
9 天前
我现在就是用这个方法去生成 json 没啥问题,缺点是太慢了。。 我现在自己在训练 NLP 模型了,用 LLM 模型真的慢,特别是 json 多的时候

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

https://ex.noerr.eu.org/t/1152314

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

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

© 2021 V2EX