SGLang 结构化输出
概念
Structured Generation Language(SGL) 可以理解为:用"结构化的指令 + 约束 + 模板"来引导模型输出可控、可解析、可复用的结果(例如 JSON、表格、分段文档、代码骨架等),从而降低"随意发挥"和后处理成本。
它通常由三类要素组成:
- 结构(Schema/格式):规定输出长什么样(字段、层级、类型、必填/可选)。
- 生成规则(Constraints):规定怎么生成(不得编造、必须引用来源、长度限制、枚举值、校验规则)。
- 模板(Template):把结构与规则落到可复用的"提示模板/片段",并支持参数化(变量注入)。
为什么需要 SGL
- 可解析:输出稳定成机器可读格式(JSON/YAML/CSV/Markdown 表格)。
- 可验证:能做自动校验(缺字段、类型不符、超长、非法枚举值)。
- 可复用:相同任务在不同项目/团队中重复使用,降低提示工程成本。
- 可组合:复杂任务拆成多个结构化子任务,最后拼装成一份交付物。
- 更安全:通过"只允许在限定字段里回答"等约束,减少越界内容与幻觉。
典型应用场景
- 信息抽取
- 内容生产
- 代码与配置
- 对话型工作流
一个最小 SGL 示例(JSON 结构输出)
目标:让模型输出"读书笔记"且可解析。
你将输出严格的 JSON(不要包含多余文字、不要使用 Markdown)。
JSON Schema(概念性):
{
"title": string,
"author": string | null,
"summary": string,
"key_points": string[3..7],
"action_items": { "item": string, "why": string }[0..5]
}
约束:
- key_points 至少 3 条,最多 7 条
- 如果无法确定作者,author = null
- 不要编造书中不存在的内容;不确定则在 summary 中说明不确定点
输入:
《XXXX》全文/节选如下:…
设计 SGL 的实用原则(Checklist)
- 先定"消费方式":输出给人看还是给程序用?决定用 Markdown 还是 JSON。
- 先定 Schema,再写提示:字段名、类型、枚举、必填项优先。
- 明确错误处理:缺信息时填
null/ 空数组 / 给出unknown_reason字段。 - 减少自由文本范围:把自由发挥限制在少数字段里(如 summary),其他字段尽量结构化。
- 加示例(Few-shot):给 1 个正例往往比加 10 条规则更有效。
- 分步生成:复杂输出分两步:先生成结构/大纲,再填充内容。
在 Notion 里的用法建议
- 用 数据库属性承接结构化字段(例如:状态、标签、负责人、日期)。
- 用页面正文承接长文本(例如:摘要、正文、附录)。
- 对于固定格式输出,优先用"模板按钮/数据库模板"配合 SGL 生成,减少人工整理。
可直接复用的 SGL 模板(可复制)
1) 会议纪要 → 行动项抽取(JSON)
输出严格 JSON,不要额外文字:
{
"meeting_title": string,
"date": "YYYY-MM-DD" | null,
"decisions": string[],
"action_items": [
{ "owner": string | null, "task": string, "due": "YYYY-MM-DD" | null }
],
"risks": string[]
}
规则:
- 只根据输入内容,不要推测
- owner 不明确则为 null
输入如下:
{{MEETING_NOTES}}
2) 文章/文档 → 摘要卡片(Markdown 固定结构)
请按以下 Markdown 结构输出(不要改标题名):
## 一句话结论
…
## 关键要点(3-5条)
1. …
2. …
3. …
## 适用场景
- …
## 不适用/风险
- …
输入文档:
{{DOC}}
相关概念对照
- Prompt Template:提示模板(SGL 的载体之一)。
- Schema / JSON Schema:结构定义(SGL 的核心)。
- Guardrails:约束与防护栏(类型、枚举、长度、来源要求等)。
- Function calling / Tools:把输出对接到可执行动作(常与 SGL 搭配)。
- Structured Output:结构化输出(SGL 目标)。
如果你希望这页更贴合你的用法,可以告诉我:你主要想用 SGL 做「抽取」「写作」「代码」「工作流」里的哪一种,以及你更偏好 JSON 还是 Markdown 结构。