HTML 标签由程序配对,正文让模型写:Guidance 把生成范围划清楚

为什么值得关注
在需要固定文本结构的生成任务中,让代码负责语法、模型负责有限范围内的内容。
适合谁:生成受限HTML片段、需要按语法约束模型输出的Python开发者
这次有哪些亮点
- 正则排除正文里的尖括号,函数生成配对标签
- select和one_or_more组合允许的结构,capture提取最终HTML
使用前需要知道
示例不是完整HTML实现,约束语法不保证文案、事实或页面设计质量;完整语法能力依赖后端支持,Guidance MIT许可。
让模型写一小段 HTML,最麻烦的有时不是文案,而是漏标签、乱嵌套,或者在不该出现的地方插入新标记。Guidance 的一个官方示例把问题分开:允许的页面骨架由程序定义,模型只在这些范围内生成文字和选择结构。
它适合需要固定格式文本的开发者。最终成果不是一句“请严格遵守 HTML”,而是一套可以组合、检查的生成规则,以及从结果中取出的 html_text。
先限制正文,再让标签成对出现
README 的 HTML 案例先定义 _gen_text,用正则 [^<>]+ 生成不含尖括号的文字。随后,_gen_text_in_tag 接受一个 tag 参数,依次加入开始标签、受约束正文和相应结束标签。
这意味着标签配对交给代码,文字内容交给模型。标题部分可复用这个函数来生成 title;正文标题则在 h1、h2、h3 三种选项里选择。改变允许的标签,可以直接修改组合函数,不必只在提示词里反复提醒。
段落也有自己的规则:允许普通文字、em、strong 和换行,通过 one_or_more 组合。最后,head、body 被装进 html 根节点,capture 给整份结果命名,供程序后续提取。
已经确定的部分,可以直接补上

官方 Notebook 截图展示了受约束生成的 HTML 及其标记;截图中的耗时和比例属于该次官方样例,不能作为本文或其他环境的性能结果。
Guidance 将可提前确定的 token 直接补入,称为 fast-forwarding。例如已知刚打开 h1 标签,生成到闭合起始部分后,后续 h1> 可以由规则确定,无需让模型重新选择。
这个机制说明,生成结果并非每个字符都必须由模型逐个决定。固定内容与待生成内容交错,代码掌握结构,模型在合法选择中继续写。实际节省多少计算,仍取决于后端、语法与任务,不能从这张截图推广。
语法范围之外,仍要另外判断
官方明确说明,这不是完整 HTML 实现。示例没有提供整套 CSS、布局设计或浏览器安全策略;文案是否真实、有用,也不是标签配对能回答的。一个结构合法的页面,仍可能写出无关内容。
项目还给出 grammar.match 与 Mock 模型的离线调试方法,可以先检查候选字符串是否符合规则,再连接真实模型。这能帮助开发者先排除语法定义本身的问题。
Guidance采用 MIT 许可,完整语法约束需要所选后端支持。这个案例值得借鉴的,是把生成自由度放到明确位置:哪些标签可出现,正文在哪里展开,结果怎样被程序拿走,都可以在同一份规则中读出来。
以上为编辑整理,功能、许可与使用条件以官方说明为准。