提升API数据处理的利器:如何从模型返回结构化数据

146 阅读3分钟

提升API数据处理的利器:如何从模型返回结构化数据

引言

在现代的数据驱动应用程序中,模型输出的结构化数据已成为关键需求。无论是为了将文本数据提取到数据库中,还是与下游系统整合,获得结构化数据都是关键步骤。在本文中,我们将探讨如何从模型返回结构化数据,并通过一些实用的方法和示例代码来展示其实现。

主要内容

1. 使用with_structured_output()方法

with_structured_output()是获取结构化输出的最简单、最可靠的方法。它通过输入一个指定输出属性名称、类型和描述的模式来返回匹配的对象。支持该方法的模型列表可以在此处找到。模式可以定义为TypedDict类、JSON SchemaPydantic类。

2. 使用Pydantic获取结构化输出

Pydantic提供了验证模型生成输出的优势。如果任何必需字段缺失或字段类型不正确,Pydantic会抛出错误。例如,我们可以让模型生成一个关于猫的笑话:

from typing import Optional
from pydantic import BaseModel, Field

class Joke(BaseModel):
    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")

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

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

3. 其他模式选择

除了Pydantic外,我们还可以使用TypedDictJSON Schema。这些方法在某些情况下可能更简便,特别是当需要流式传输模型输出时。

4. 流式输出和多模式选择

当输出类型为字典时,可以流式传输结构化模型的输出。通过创建一个包含多个模式的父模式,模型可以选择最合适的模式输出。

代码示例

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

from typing import Optional
from pydantic import BaseModel, Field
from langchain_openai import ChatOpenAI

class Joke(BaseModel):
    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")

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

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

常见问题和解决方案

  1. 模型输出不准确怎么办?
    可通过使用Pydantic进行验证以捕获字段缺失或错误类型的输出。

  2. 如何选择合适的模式?
    根据应用场景,决定使用TypedDictJSON Schema还是Pydantic。需要验证时建议使用Pydantic。

  3. 模型不支持结构化输出怎么办?
    可以通过自定义解析器进行处理,或直接在模型提示中指定所需格式来提取结构化响应。

总结和进一步学习资源

通过本文,我们了解了如何利用with_structured_output()方法从模型中获取结构化数据,并讨论了使用Pydantic和其他模式的优缺点。有关更多使用输出解析器和提示技术的深入材料,可以参考以下资源:

参考资料

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

---END---