Guidance 是一个用于引导语言模型的高效编程范式。通过 Guidance,你可以控制输出的结构,并为你的用例获得高质量输出,同时相比传统提示或微调降低延迟和成本。它允许用户约束生成(例如使用正则表达式和上下文无关文法),并无缝地交织控制流(条件、循环、工具使用)和生成。
主要能力
- 约束生成:使用正则表达式或上下文无关文法(CFG)约束模型输出,确保输出符合预期语法。例如,
gen()调用可以约束为匹配正则表达式;select()函数用于从预定义列表中选择输出。 - 交织控制与生成:在生成过程中嵌入条件、循环和工具调用,实现复杂的逻辑控制。
- 自定义 Guidance 函数:使用
@guidance装饰器创建自己的函数,这些函数可以与语言模型交互,并可以组合以构建完整的上下文无关文法。 - JSON 生成:JSON schema 本质上是一种上下文无关文法,Guidance 对此提供特殊支持,可以基于 Pydantic 模型等生成 JSON。
- 快速前向令牌:由于文法约束,某些令牌可以提前确定,Guidance 无需模型生成这些令牌,而是直接插入,从而节省前向传递,减少 GPU 使用。
- 离线调试文法:在迭代约束时,可以在本地验证候选字符串,并使用 Mock 模型测试完整运行,无需调用模型 API。
使用方式
Guidance 可通过 PyPI 安装。如果已经拥有模型所需的后端,只需运行安装命令即可。它支持多种后端,包括 Transformers、llama.cpp、OpenAI 等。
在 Python 中,你可以使用常见的 Python 惯用法与大语言模型交互。例如,在命令行运行时会生成输出;在 Jupyter notebook 中,Guidance 提供小部件以获得更丰富的用户体验。捕获生成的文本也非常容易。
创建自定义 Guidance 函数时,使用 @guidance 装饰器标记函数,language_model 参数会自动填充。这些函数可以像 gen() 或 select() 一样使用,并且可以组合以构建完整的上下文无关文法。例如,可以创建函数来生成不包含 HTML 标签的文本、在任意 HTML 标签内生成文本、生成页面标题、定义正文中的标题和段落,最终生成完整的 HTML 页面。
适用场景
- 需要精确控制语言模型输出结构的场景,如生成特定格式的 JSON、HTML 等。
- 需要将逻辑控制与生成交织的复杂任务,如多轮问答、工具调用。
- 希望减少延迟和成本,同时获得高质量输出的应用。
限制
- 约束生成(如上下文无关文法)需要后端 LLM 完全支持 Guidance。
- 具体支持的后端列表和安装细节请参考官方文档。
- 关于收费、价格、平台等信息,资料中暂未提供。