@
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 生成。