Ollama 结构化输出发布
Ollama 引入了对结构化输出的支持,使开发者能够将语言模型的响应约束为由 JSON schema 定义的特定格式。此次更新提供了比以往的 JSON 模式更高的可靠性和一致性,并支持 Ollama 的 cURL API、Python 和 JavaScript 库。
关键能力与使用场景
结构化输出允许模型严格遵守预定义的 schema,这对于将 LLM 响应集成到程序化工作流中至关重要。主要使用场景包括:
- 数据解析: 从非结构化文档中提取结构化信息。
- 视觉分析: 使用视觉模型从图像中提取数据和描述。
- 响应标准化: 确保所有语言模型响应都遵循一致的格式,以便进行下游处理。
实现方法
要使用结构化输出,必须在请求中传递 format 参数。这可以通过多种接口实现:
cURL API
format 参数接受一个 JSON schema 对象,用于定义所需的属性及其类型(例如,string、array)。
Python 库
Ollama 建议使用 Pydantic 来定义 schema。该 schema 通过 model_json_schema() 方法传递给 format 参数。
JavaScript 库
Ollama 建议结合使用 Zod 和 zod-to-json-schema 来为 format 参数序列化 schema。
OpenAI 兼容性
Ollama 支持与 OpenAI 兼容的 beta.chat.completions.parse 方法,允许开发者在连接到本地 Ollama 实例时,将 Pydantic 模型作为 response_format 使用。
高级应用
结构化数据提取
通过定义一个 schema(例如包含 PetList 对象的列表),模型可以解析自然语言描述的多个实体,并将其作为经过验证的 JSON array 返回。
视觉模型集成
结构化输出与 llama3.2-vision 等视觉模型兼容。这允许进行详细的图像分析,模型可以以结构化格式返回特定的字段,例如 summary、objects(带有置信度分数)、scene、colors 和 time_of_day。
可靠性最佳实践
为了确保最确定且可靠的结构化输出,Ollama 建议遵循以下实践:
- Schema 定义: 使用 Pydantic (Python) 或 Zod (JavaScript) 来定义响应 schema。
- 提示词工程: 在提示词中明确包含“return as JSON”短语以引导模型。
- 确定性采样: 将
temperature设置为 0 以减少输出的变动性。
未来路线图
Ollama 概述了旨在改进受控生成的几项即将推出的增强功能:
- 公开 logits 以实现对生成的更细粒度控制。
- 提高结构化输出的性能和准确性。
- 为采样实现 GPU 加速。
- 扩展对 JSON schema 之外的格式的支持。
Sources
- OriginalStructured outputs
相关
- Dispatch
- Dispatch
- Dispatch
- Dispatch
- Dispatch