Instructor

用 Pydantic 模型从任意 LLM 稳定获取结构化 JSON,自动校验并重试。

Star 数
★ 14k
最近更新
1 天前
License
MIT
主语言
Python

30 秒速览

运行形态
代码库 / SDK
可在哪里用
通用 · 跨平台OpenAI API · Claude API
费用
软件免费,模型调用费用自付
上手难度
低 · 几分钟可跑通
开始前需要
Pythonpip/uv/poetryPydanticLLM 提供商 API 密钥或本地模型运行时Shell / 命令行网络访问
典型场景
Python 后端工程师需要从客服对话、邮件等自然语言文本中抽取姓名、年龄、地址等字段并写入数据库。
不适合
  • 希望用内置框架直接构建复杂智能体的团队
  • 不愿引入 Pydantic 与 Python 依赖栈的业务系统

这个 Agent 能做什么,适合哪些场景?

Instructor 是一个 Python 库,用于把大语言模型的自由文本输出约束为经过 Pydantic 校验的结构化对象。它通过 instructor.from_provider 统一接入 OpenAI、Anthropic、Google、Ollama 等提供方,调用时传入 response_model 即可获得类型安全的返回值。内置自动重试机制,在 Pydantic 校验失败时携带错误信息重新请求;通过 Partial 包装器支持流式返回逐步补全的对象;并原生处理嵌套模型与字段校验器。该库以 MIT 协议开源,通过 pip、uv 或 poetry 安装,作为依赖集成到调用方自己的 Python 应用中,本身不提供独立服务或托管端点。

Instructor 读取调用方定义的 Pydantic BaseModel,据此约束 LLM 输出。开发者用 instructor.from_provider("openai/gpt-4o-mini") 创建带补丁的客户端,再调用 client.chat.completions.create(response_model=User, messages=[...]),该库负责生成或注入对应的 JSON Schema/工具调用参数,发起模型请求,解析返回内容并构造 Pydantic 实例。若字段校验(含 @field_validator)失败,会按 max_retries 参数携带错误消息重新请求。传入 response_model=Partial[User] 并设置 stream=True 时,会逐步产出只填充了部分字段的对象。对嵌套模型如 List[Address] 自动递归处理。

  1. Python 后端工程师需要从客服对话、邮件等自然语言文本中抽取姓名、年龄、地址等字段并写入数据库。
  2. 数据团队要从非结构化文档中批量提取商品名称、价格、库存状态等结构化记录。
  3. 应用开发者希望在 OpenAI、Anthropic、Ollama 之间切换模型时保持同一套提取代码不变。
  4. 需要在流式响应中向前端逐字展示结构化对象生成进度的产品团队。
  5. 希望用 Pydantic 校验规则(如年龄必须为正)保证模型输出合法性的质量工程师。
  6. 在本地用 Ollama 运行模型、不希望数据出内网的隐私敏感项目。

如何安装或部署这个 Agent?

需要 Python 环境与对应模型提供方的访问凭据。使用包管理器安装:

pip install instructor

或使用 uv / poetry:

uv add instructor
poetry add instructor

安装后需准备所调用模型的 API 密钥(如 OpenAI 的 OPENAI_API_KEY),或本地运行 Ollama 等模型服务。

如何使用这个 Agent?

定义 Pydantic 模型,通过 from_provider 指定提供方与模型,并传入 response_model:

import instructor
from pydantic import BaseModel

class User(BaseModel):
    name: str
    age: int

client = instructor.from_provider("openai/gpt-4o-mini")
user = client.chat.completions.create(
    response_model=User,
    messages=[{"role": "user", "content": "John is 25 years old"}],
)
print(user)  # User(name='John', age=25)

也可直接传入 API 密钥,或切换到其他提供方:

client = instructor.from_provider("anthropic/claude-3-5-sonnet", api_key="sk-ant-...")
client = instructor.from_provider("ollama/llama3.2")

启用自动重试与流式输出:

user = client.chat.completions.create(
    response_model=User,
    messages=[{"role": "user", "content": "..."}],
    max_retries=3,
)

from instructor import Partial
for partial_user in client.chat.completions.create(
    response_model=Partial[User],
    messages=[{"role": "user", "content": "..."}],
    stream=True,
):
    print(partial_user)

这个 Agent 有哪些优点和局限?

优点
  • 以 Pydantic 模型为中心,天然获得类型提示、IDE 补全与字段级校验能力。
  • 校验失败时自动携带错误信息重试,减少手写解析与容错代码。
  • from_provider 统一接口覆盖 OpenAI、Anthropic、Google、Ollama、Groq 等提供方,切换成本低。
  • Partial 与 stream=True 支持流式产出逐步补全的对象,适合实时展示。
  • 递归处理嵌套模型,无需手写复杂 JSON Schema。
  • MIT 协议开源,可通过 pip、uv、poetry 直接集成进现有 Python 项目。
局限
  • 仅提供 Python 原语库,TypeScript、Ruby、Go、Rust 等版本为独立实现,需另行评估一致性。
  • 依赖外部 LLM 提供方;实际成本取决于所选模型与调用量,且需要网络与 API 密钥。
  • README 未给出内置可观测性、工具编排或评测能力,复杂智能体流程需自行搭建或改用 PydanticAI。
  • 调用方需自行承担提供方 SDK 版本与模型命名变化带来的适配工作。

这个 Agent 与同类方案有什么区别?

README 明确对比了三类替代方案:与原始 JSON 模式相比,Instructor 提供自动校验、重试、流式与嵌套对象支持;与 LangChain/LlamaIndex 相比,它专注于结构化抽取,更轻量、更快、更易调试;与自研方案相比,强调已被大量开发者使用并覆盖边缘情况。README 同时建议需要完整智能体运行时、内置可观测性与可分享追踪时改用 PydanticAI。

与相关度最高的同类 agent 并排比较关键指标。

Agent 源码审查 形态 / 费用 Star 最近更新 主语言 完整支持的平台
Instructor 当前 55 · 缺口较多 代码库 / SDK免费 + 模型费 ★ 14k 1 天前 Python OpenAI API · Claude API
Adaline Gateway 69 · 存在缺口 代码库 / SDK免费 + 模型费 ★ 607 2 个月前 TypeScript OpenAI API · Claude API
Pydantic AI 65 · 存在缺口 代码库 / SDK免费 + 模型费 ★ 21k 今天 Python OpenAI API · Claude API
Mirascope 55 · 缺口较多 代码库 / SDK免费 + 模型费 ★ 1.5k 今天 Python Claude API

FollowAgents 如何评估这个 Agent?

FollowAgents 源码审查 · FARS-2.1
缺口较多
55/ 100 五分制 2.8 / 5
信任安全 13/29
可靠稳定 9/14
适用触发 10/18
规范维护 10/18
有效结果 10/13
证据核验 3/8
查看各维度的扣分理由
信任安全13 / 29 · 2.2/5

信任维度:文档对数据流向有一定说明(usage.md 明确 token 累计、缓存命中与 provider 计费差异,cli/usage.md 对遗留估算给出警告),依赖版本在 pyproject.toml 中设有上下界,属中等水平。但 least_privilege 仅得 1:库默认会 patch 客户端并自动重试,README 示例直接以 api_key 明文传入,未提示最小权限或密钥管理;user_confirmation 仅 1:自动重试与缓存命中均无显式用户确认机制;sensitive_data_handling 仅 1:未见对 PII/日志脱敏的说明;external_effects 仅 1:会向外部 LLM provider 发起真实请求并产生费用,但无成本护栏说明;rollback 仅 1:无回滚/撤销机制描述;source_attribution 得 2:LICENSE 与作者、贡献者链接清晰。

可靠稳定9 / 14 · 3.2/5

可靠性:self_consistency 得 2,文档与代码结构基本一致,但 README 与 getting-started 在 client.create 与 client.chat.completions.create 两种调用风格间并存,存在轻微不一致;dependency_availability 得 2,pyproject.toml 依赖有明确版本区间且 requirements.txt 锁定,但未声明已知漏洞缓解;failure_messages 得 2,文档展示 IncompleteOutputException 与验证重试反馈,属普通可用水平。

适用触发10 / 18 · 2.8/5

适应性:audience_and_scenarios 得 2,覆盖多 provider、多语言实现与 FastAPI/async 场景;capability_boundaries 得 2,README 明确建议复杂 agent 场景改用 PydanticAI,边界清晰;trigger_precision 仅 1,作为库而非 agent,触发条件依赖调用方,文档未系统说明何时该用哪种 mode;environment_fit 得 2,声明 Python 3.9+ 与多 provider extras。

规范维护10 / 18 · 2.8/5

惯例:information_architecture 得 2,docs 目录结构清晰;install_notes 得 2,安装与 extras 说明充分;naming_stability 仅 1,README 与 getting-started 混用 from_provider 与旧式 patch/from_openai,且仓库 URL 在 567-labs 与 jxnl 间不一致;examples_and_faq 得 2,FAQ 与示例丰富;known_limitations 得 2,usage.md 与 cli/usage.md 明确列出计费与累计限制;license 得 3,MIT 全文完整;versioning_changelog 仅 1,pyproject 有版本号但无 CHANGELOG 文件;maintenance_responsibility 仅 1,维护者邮箱列出但发布者身份未经验证,更新路径不明确。

有效结果10 / 13 · 3.8/5

有效性:output_usability 得 3,直接返回类型化 Pydantic 对象,输出可用性高;marginal_value 得 2,相较手写 JSON 解析有明确增益,但同类库竞争激烈;cost_benefit 得 2,文档提示 token 优化与缓存,但自动重试可能放大成本,未见成本护栏。

证据核验3 / 8 · 1.9/5

可验证性:claim_traceability 仅 1,README 声称 3M+ 月下载、10K+ stars、1000+ 贡献者及 OpenAI/Google 等公司使用,均无仓库内证据支撑;cross_source_corroboration 仅 1,测试文件存在但未在本次静态审查中执行,无法交叉印证;fact_inference_separation 仅 1,营销性表述与事实性说明混杂,未明确区分。

风险与缓解建议
  • README 中的下载量、star 数、贡献者数及大厂使用声明缺乏仓库内证据,属营销性表述,不应作为可靠性依据。
  • 库默认自动重试并 patch 客户端,可能放大 API 成本;README 示例以明文 api_key 传参,需自行落实密钥管理与最小权限。
  • 仓库 URL 在 567-labs 与 jxnl 之间不一致,发布者身份未经验证,更新与维护路径不明确。
  • 文档混用 from_provider 与旧式 patch/from_openai 调用风格,迁移时需注意命名稳定性。
  • 本次为静态审查,未执行任何测试或运行,测试质量与确定性未经验证。
证据充分度:低 评估于 2026年10月21日 审查版本 6cd771c5254a
查看完整评分方法 →

常见问题

使用 Instructor 需要付费吗?
Instructor 本身是 MIT 协议开源软件,可免费安装使用;但调用 OpenAI、Anthropic 等云端模型需自备 API 密钥并按用量付费,若使用 Ollama 等本地模型则可避免这部分费用。
它支持哪些模型提供方?
README 展示了 OpenAI、Anthropic、Google、Ollama 与 Groq 的 from_provider 用法示例,并支持通过 api_key 参数直接传入密钥而不依赖环境变量。
模型输出不符合 Pydantic 校验时会怎样?
Instructor 会把校验错误信息带回模型并重新请求,重试次数由 max_retries 参数控制(示例中为 3 次)。
它能直接构建带工具与追踪的智能体吗?
不能。README 将 Instructor 定位为快速、低成本的结构化抽取库,需要更丰富的智能体运行时、内置可观测性或可分享追踪时应使用其推荐的 PydanticAI。
流式场景下如何拿到结构化对象?
将 response_model 设为 Partial[User] 并传入 stream=True,即可迭代获得字段逐步填充的部分对象,例如从 User(name=None, age=None) 到 User(name='John', age=25)。
在 GitHub 查看 ↗ 安装 ↓

对比同类 Agent

用同一套 FARS 评审,横向比较这个 Agent 所属的短名单。

相关 Agents