> [!NOTE] > 本文档由 WeHub 基于上游 README 翻译整理,属于社区翻译,非官方中文文档。 > [English](./README.en.md) · [原始项目](https://github.com/567-labs/instructor) · [上游 README](https://github.com/567-labs/instructor/blob/HEAD/README.md) > 原作者、版权与许可证归属以原始项目及本仓库 LICENSE 文件为准。 # Instructor:面向 LLM 的结构化输出 从任意 LLM 获取可靠的 JSON。基于 Pydantic 构建,提供验证、类型安全与 IDE 支持。 ```python import instructor from pydantic import BaseModel # Define what you want class User(BaseModel): name: str age: int # Extract it from natural language 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) ``` **就这么简单。** 无需 JSON 解析、错误处理或重试。只需定义一个模型,即可获得结构化数据。 [](https://pypi.org/project/instructor/) [](https://pypi.org/project/instructor/) [](https://github.com/567-labs/instructor) [](https://discord.gg/bD9YE9JArw) [](https://twitter.com/jxnlco) > **快速抽取用 Instructor,需要 Agent 时用 PydanticAI。** Instructor 让 schema 优先的流程保持简单、低成本。如果你的应用需要更丰富的 Agent 运行、内置可观测性(observability)或可共享的 trace,试试 [PydanticAI](https://ai.pydantic.dev/). PydanticAI 是 Pydantic 团队官方的 Agent 运行时,在沿用相同 Pydantic 模型的同时,提供类型化工具、可回放数据集、评估(evals)以及生产级仪表盘。深入阅读 [PydanticAI 文档](https://ai.pydantic.dev/) 了解它如何扩展 Instructor 风格的工作流。 ## 为什么选择 Instructor? 从 LLM 获取结构化数据很难。你需要: 1. 编写复杂的 JSON schema 2. 处理验证错误 3. 重试失败的抽取 4. 解析非结构化响应 5. 应对不同提供商的 API **Instructor 用一个简单的接口搞定这一切:**
| 不用 Instructor | 使用 Instructor |
| ```python response = openai.chat.completions.create( model="gpt-5.4-mini", messages=[{"role": "user", "content": "..."}], tools=[ { "type": "function", "function": { "name": "extract_user", "parameters": { "type": "object", "properties": { "name": {"type": "string"}, "age": {"type": "integer"}, }, }, }, } ], ) # Parse response tool_call = response.choices[0].message.tool_calls[0] user_data = json.loads(tool_call.function.arguments) # Validate manually if "name" not in user_data: # Handle error... pass ``` | ```python client = instructor.from_provider("openai/gpt-5.4-mini") user = client.chat.completions.create( response_model=User, messages=[{"role": "user", "content": "..."}], ) # That's it! user is validated and typed ``` |
由 Instructor 社区构建。特别感谢 Jason Liu 以及所有 contributors。