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 等视觉模型兼容。这允许进行详细的图像分析,模型可以以结构化格式返回特定的字段,例如 summaryobjects(带有置信度分数)、scenecolorstime_of_day

可靠性最佳实践

为了确保最确定且可靠的结构化输出,Ollama 建议遵循以下实践:

  • Schema 定义: 使用 Pydantic (Python) 或 Zod (JavaScript) 来定义响应 schema。
  • 提示词工程: 在提示词中明确包含“return as JSON”短语以引导模型。
  • 确定性采样:temperature 设置为 0 以减少输出的变动性。

未来路线图

Ollama 概述了旨在改进受控生成的几项即将推出的增强功能:

  • 公开 logits 以实现对生成的更细粒度控制。
  • 提高结构化输出的性能和准确性。
  • 为采样实现 GPU 加速。
  • 扩展对 JSON schema 之外的格式的支持。

Sources

相关

  • Dispatch
  • Dispatch
  • Dispatch
  • Dispatch
  • Dispatch