ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

在 Ollama 上使用 Instructor:本地开源 LLM 的结构化输出完整指南

在 Ollama 上使用 Instructor:本地开源 LLM 的结构化输出完整指南 在 Ollama 上使用 Instructor本地开源 LLM 的结构化输出完整指南【免费下载链接】instructorstructured outputs for llms项目地址: https://gitcode.com/GitHub_Trending/in/instructorInstructor 提供了一种简洁、类型安全的方式让 LLM 输出严格遵循 Pydantic 模型定义的 JSON 结构。本文以 docs/examples/ollama.md 为骨架结合 docs/integrations/ollama.md 与仓库源码完整演示如何将 Ollama 本地模型接入 Instructor从环境准备、自动客户端到手动配置、超时控制与模式自动选择读完即可在你的本地环境中跑通LLM 输出 → Pydantic 对象的完整链路。为什么选择 Instructor开源大语言模型正在社区中快速普及。随着 Ollama 发布 OpenAI 兼容层我们终于可以借助 JSON Schema 从这些开源模型中获得结构化输出。Instructor 在此场景下的核心优势如下简单 API 与完整的提示词控制权Instructor 提供直观的 API同时把提示词的构造完全交还给你便于对 LLM 交互做精细化调优参见 响应模型。Reasking 与校验当验证失败时自动让模型重新回答保证输出质量同时复用 Pydantic 的验证机制做健壮的错误处理参见 Reasking 与校验。流式支持可以轻松流式获得部分结果与可迭代对象实现实时处理与更高响应性参见 部分结果与流式。由类型提示驱动借助 Pydantic 完成 schema 校验、提示词控制代码量更少且拥有 IDE 集成。简化 LLM 交互统一支持 OpenAI、Anthropic、Google、Vertex AI、Mistral/Mixtral、Anyscale、Ollama、llama-cpp-python、Cohere、LiteLLM 等众多提供商示例见 Examples。理解 PatchingInstructor 做了什么Instructor 的 patch 机制 为 OpenAI 兼容客户端增强了如下能力create调用中的response_model直接返回 Pydantic 模型实例create调用中的max_retries失败时按退避策略自动重试timeout参数控制整个重试过程的总时长对 Ollama 尤为重要。Ollama 之所以能被 Instructor 无缝驱动从源码上可以直接得到印证在 provider_specs.py 中Provider.OLLAMA的canonical_provider被声明为Provider.OPENAI、sdk_module为openai也就是说 Ollama 在 Instructor 内部被当作标准的 OpenAI 兼容端点处理。这也解释了为什么下面的示例中既可以走from_provider快捷方式也可以手工构造 OpenAI 客户端再打补丁。环境准备安装 Ollama 并拉取模型首先从 Ollama 官网下载安装包随后拉取一个开源模型如 Llama 3.2 或 Mistral。务必确认本机ollama已升级到最新版本ollama pull llama3.2拉取完成后Ollama 会在本地http://localhost:11434/v1上暴露一个 OpenAI 兼容接口这正是 Instructor 连接它的默认端点。快速开始使用自动客户端最简单的接入方式是直接使用from_providerInstructor 会自动完成针对 Ollama 的配置import instructor from pydantic import BaseModel class Character(BaseModel): name: str age: int # 简单设置——自动为 Ollama 完成配置 client instructor.from_provider(ollama/llama3.2) resp client.create( messages[{role: user, content: Tell me about Harry Potter}], response_modelCharacter, )值得说明的是这里的提供商标识符遵循统一的provider/model-name格式详见 from_provider 概念ollama/llama3.2前半部分为提供商、后半部分为模型名。若省略前缀如gpt-4o或省略模型名如ollama会直接抛出错误。手动配置显式声明 base_url 与 JSON 模式当需要显式控制连接参数与运行模式时可以使用from_provider配合base_url与mode参数。下面是一个包含列表字段的完整示例展示了从哈利·波特这类非结构化文本中抽取结构化人物档案的过程import instructor from pydantic import BaseModel, Field from typing import List class Character(BaseModel): name: str age: int fact: List[str] Field(..., descriptionA list of facts about the character) # 使用 from_provider base_url 连接 Ollama client instructor.from_provider( ollama/llama3.2, base_urlhttp://localhost:11434/v1, modeinstructor.Mode.JSON, ) resp client.create( modelllama3.2, messages[ { role: user, content: Tell me about the Harry Potter, } ], response_modelCharacter, ) print(resp.model_dump_json(indent2)) { name: Harry James Potter, age: 37, fact: [ He is the chosen one., He has a lightning-shaped scar on his forehead., He is the son of James and Lily Potter., He attended Hogwarts School of Witchcraft and Wizardry., He is a skilled wizard and sorcerer., He fought against Lord Voldemort and his followers., He has a pet owl named Snowy. ] } modeinstructor.Mode.JSON强制走 JSON 模式Instructor 会把 Pydantic schema 注入提示词要求模型直接输出符合 schema 的 JSON再交给 Pydantic 完成解析与校验最终得到Character实例。超时处理让本地模型的重试行为可预测Ollama 本地推理速度取决于硬件模型越大响应越慢。若在max_retries存在的情况下没有整体超时控制多次重试会把总等待时间成倍放大。因此 Instructor 为 Ollama 正确支持了timeout参数from pydantic import BaseModel import instructor class Character(BaseModel): name: str age: int client instructor.from_provider( ollama/llama3.2, modeinstructor.Mode.JSON, ) resp client.create( messages[ { role: user, content: Tell me about Harry Potter, } ], response_modelCharacter, max_retries2, timeout10.0, # 覆盖所有重试尝试的总超时时间 )timeout的语义需要特别强调总超时控制限制的是所有重试尝试累计的总时长而非单次请求的时长Ollama 兼容性避免因重试把总等待时间相乘造成请求超时失控行为可预测设置 3 秒超时那么整体等待就是 3 秒而不是在重试时变成 9 秒甚至更长。实践建议使用 Ollama尤其是较大的模型时应根据模型的实际响应速度设置合适的timeout值使整体响应时间稳定可预期。异步调用不阻塞的本地结构化输出Ollama 同样支持异步客户端方便在并发或 IO 密集型应用中提升吞吐import instructor from pydantic import BaseModel import asyncio async_client instructor.from_provider( ollama/llama3.2, async_clientTrue, ) class Character(BaseModel): name: str age: int async def get_character(): return await async_client.create( messages[{role: user, content: Tell me about Harry Potter}], response_modelCharacter, ) print(asyncio.run(get_character()))智能模式选择TOOLS 与 JSON 的自动决策自动客户端会根据模型是否支持函数调用自动选择最合适的模式。这一逻辑在源码 auto_client.py 的_build_ollama中有着明确的实现其中维护了一个tool_capable_models集合若模型名匹配集合中的条目如llama3.1、llama3.2、llama4、mistral-nemo、qwen2.5等默认使用Mode.TOOLS函数调用模式否则回退到Mode.JSON。# 这些模型自动使用 TOOLS 模式函数调用 client instructor.from_provider(ollama/llama3.1) client instructor.from_provider(ollama/qwen2.5) # 其他模型默认使用 JSON 模式 client instructor.from_provider(ollama/llama3.2)你也可以手动覆盖默认模式这在模型能力与默认判断不符时非常有用import instructor # 强制 JSON 模式 client instructor.from_provider(ollama/llama3.1, modeinstructor.Mode.JSON) # 强制 TOOLS 模式 client instructor.from_provider(ollama/llama2, modeinstructor.Mode.TOOLS)同时_build_ollama也展示了两个默认连接参数的取值base_url默认为http://localhost:11434/v1api_key默认取ollama——该 key 仅为满足 OpenAI 客户端构造而占位Ollama 本地服务并不会校验它。本地部署定位与延伸阅读Ollama 集成在 Instructor 的示例体系中被归类为本地部署场景适用于隐私敏感或离线环境下的结构化抽取任务见 docs/examples/index.md 中的部署对照表。若想继续深入建议按以下路径展开为什么使用 Instructor——了解 Instructor 的设计动机与适用场景核心概念模型、重试与校验——深入response_model、重试与验证机制Reasking 与语义校验——当校验失败时如何自动重问Patching 详解——理解response_model、max_retries的底层实现完整示例集——覆盖各 LLM 提供商的实战案例入门教程——从零开始的交互式学习提示工程——提升结构化输出质量的提示词策略。通过本文的组合拳——自动客户端快速上手、手动模式精确控制、总超时保证可靠性、异步调用提升吞吐——你已经可以在本地完全掌控开源模型的结构化输出把 Ollama 变成你应用中一个稳定、隐私友好的数据抽取引擎。【免费下载链接】instructorstructured outputs for llms项目地址: https://gitcode.com/GitHub_Trending/in/instructor创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表