使用AI模型返回结构化数据的实用指南

156 阅读3分钟
# 使用AI模型返回结构化数据的实用指南

## 引言

在人工智能领域,常常需要处理文本数据,并从中提取出结构化的数据以便插入数据库或其他下游系统。这篇文章将介绍几种方法,帮助你通过AI模型获取结构化输出。这对于确保数据符合特定的格式和标准至关重要。

## 主要内容

### 1. `.with_structured_output()`方法

这是获取结构化输出的最简单和可靠的方法。通过此方法,可以定义一个模式,指定输出属性的名称、类型和描述。该方法返回一个类似于模型的可运行对象,但输出的是与给定模式对应的对象。可以使用`TypedDict`类、`JSON Schema``Pydantic`类来定义模式。

### 2. 使用Pydantic进行数据验证

Pydantic提供了一个强大的验证机制,确保模型生成的输出符合预期。在使用Pydantic类时,如果任何必须的字段缺失或者字段类型错误,将会抛出错误。

```python
from typing import Optional
from langchain_core.pydantic_v1 import BaseModel, Field

# 定义Pydantic类
class Joke(BaseModel):
    setup: str = Field(description="笑话的开场")
    punchline: str = Field(description="笑话的结尾")
    rating: Optional[int] = Field(default=None, description="笑话的趣味评级,从1到10")

structured_llm = llm.with_structured_output(Joke)

# 使用API代理服务提高访问稳定性
response = structured_llm.invoke("Tell me a joke about cats")
print(response)

3. 使用TypedDict或JSON Schema

如果不需要Pydantic的验证功能,可以使用TypedDictJSON Schema来定义模式。TypedDict类允许描述字段的默认值和详细描述。

from typing_extensions import Annotated, TypedDict

# 定义TypedDict类
class Joke(TypedDict):
    setup: Annotated[str, ..., "笑话的开场"]
    punchline: Annotated[str, ..., "笑话的结尾"]
    rating: Annotated[Optional[int], None, "笑话的趣味评级,从1到10"]

structured_llm = llm.with_structured_output(Joke)

# 使用API代理服务提高访问稳定性
response = structured_llm.invoke("Tell me a joke about cats")
print(response)

代码示例

下面是一个完整的代码示例,展示如何使用Pydantic类从模型中获取笑话并返回结构化数据:

from typing import Optional
from langchain_core.pydantic_v1 import BaseModel, Field
from langchain_openai import ChatOpenAI

# 使用API代理服务提高访问稳定性
structured_llm = ChatOpenAI(model="gpt-4o-mini").with_structured_output(Joke)

response = structured_llm.invoke("Tell me a joke about cats")
print(response)

常见问题和解决方案

  1. 网络访问受限: 由于某些地区的网络限制,开发者可能需要使用API代理服务以提高访问稳定性。
  2. 数据验证失败: 如果使用Pydantic时验证失败,检查模型生成的数据是否符合所有字段的要求。

总结和进一步学习资源

掌握如何从AI模型获取结构化数据是处理复杂文本数据的重要技能。建议进一步研究以下资源,以更深入地理解本主题:

参考资料

  1. LangChain 官方文档
  2. Pydantic 官方文档
  3. JSON Schema 官方文档

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

---END---