AI在线 AI在线

LangGraph结构化输出详解:让智能体返回格式化数据

引言在使用大语言模型进行开发时,我们经常需要模型返回特定格式的数据,而不是纯文本。 比如在构建AI应用时,我们可能需要模型返回JSON格式的数据用于后续处理,或者返回符合特定数据结构的对象。 这就是结构化输出的价值所在。

引言

在使用大语言模型进行开发时,我们经常需要模型返回特定格式的数据,而不是纯文本。比如在构建AI应用时,我们可能需要模型返回JSON格式的数据用于后续处理,或者返回符合特定数据结构的对象。这就是结构化输出的价值所在。

本文将深入探讨LangGraph中的结构化输出功能,重点介绍.with_structured_output()方法的使用,并通过实际代码示例展示如何在项目中应用这一技术。

什么是结构化输出?

结构化输出是指LLM(或LangGraph工作流中的其他节点)返回的输出被格式化为明确定义的、机器可读的对象,如字典、列表、自定义类或JSON对象,而不是纯文本。

对比示例:

  • 非结构化输出:"答案是北京。"
  • 结构化输出:{"城市": "北京", "国家": "中国", "人口": 2154}

为什么需要结构化输出?

在LangGraph中,一个节点的输出通常作为另一个节点的输入。如果输出是结构化的,下一步就能准确知道期望什么字段/数据以及如何访问它们。这大大提高了系统的可靠性和可维护性。

核心技术:.with_structured_output()方法

.with_structured_output()是获得结构化输出的最简单、最可靠的方法。它专为那些原生支持结构化输出API(如工具/函数调用或JSON模式)的模型实现,并在后台使用这些功能。

基本工作原理

该方法接受一个模式作为输入,指定所需输出属性的名称、类型和描述。它返回一个类似于模型的Runnable,但输出的不是字符串或消息,而是对应于给定模式的对象。

实现方式详解

方式一:使用Pydantic类

使用Pydantic的主要优点是模型生成的输出将被验证。如果任何必需的字段缺失或任何字段的类型错误,Pydantic将抛出错误。

复制

方式二:使用TypedDict

如果您不想使用Pydantic验证,或者希望能够流式输出模型结果,可以使用TypedDict类定义模式。

复制

方式三:使用JSON Schema

您也可以直接传入JSON Schema字典,这种方式不需要导入额外的类,但代码会更冗长一些。

复制

LangGraph中的完整应用示例

下面是一个完整的LangGraph应用示例,展示如何在工作流中使用结构化输出:

复制

多模式选择

有时我们需要让模型在多个输出格式之间进行选择。最简单的方法是创建一个具有Union类型属性的父模式:

复制

流式输出支持

当输出类型是字典时(使用TypedDict类或JSON Schema定义时),我们可以从结构化模型中进行流式输出:

复制

高级技巧

1. 原始输出处理

通过设置include_raw=True,可以获取原始输出,便于调试和错误处理:

复制

2. 指定输出方法

对于支持多种结构化输出方法的模型,可以通过method参数指定使用的方法:

复制

最佳实践

  1. 选择合适的模式类型:
  • 需要运行时验证 → 使用Pydantic的BaseModel
  • 仅需静态类型检查 → 使用TypedDict
  • 需要流式输出 → 使用TypedDict或JSON Schema
  1. 提供清晰的字段描述:字段的名称和描述对模型理解输出格式非常重要
  2. 使用中文字段名:在中文应用场景中,使用中文字段名可以提高模型的理解准确性
  3. 合理设置可选字段:使用Optional类型和默认值来处理不确定的信息

总结

结构化输出是现代AI应用开发中的重要技术。通过LangGraph的.with_structured_output()方法,我们可以轻松让大语言模型返回格式化的数据,提高应用的可靠性和可维护性。

无论是使用Pydantic进行严格的数据验证,还是使用TypedDict进行灵活的字典操作,或是直接使用JSON Schema,都能满足不同场景下的需求。关键是根据具体的应用场景选择最合适的实现方式。

在实际项目中,建议优先使用Pydantic方式,因为它提供了最好的类型安全和数据验证功能。对于需要流式输出的场景,则可以考虑使用TypedDict方式。

通过合理运用这些技术,我们可以构建更加健壮和高效的AI应用系统。

相关资讯

内存革命!LangGraph 0.3.19如何实现Python内存使用效率的飞跃?

在构建复杂 AI 应用或大规模分布式系统时,内存管理始终是开发者面临的痛点。 尤其在 Python 生态中,动态类型和垃圾回收机制虽然灵活,但对内存的高效利用提出了更高要求。 近日,LangGraph 团队宣布推出 0.3.19 版本,通过一系列内存优化技术,将 Python 应用的内存占用降低 40% 以上,并支持长期记忆存储,彻底解决了复杂场景下的性能瓶颈。
4/1/2025 12:33:03 AM
智Echo

LangGraph:如何用“图思维”轻松管理多Agent协作?

引言当AI任务变得复杂时,我们需要更好的“调度员”。 随着智能应用场景的深化,单一 Agent 在处理复杂任务(如电商智能客服、金融数据分析流水线)时显现出明显局限性。 传统链式调用框架(如 LangChain)依赖开发者手动编排流程,在面对任务分支、动态决策和资源复用等场景时,往往陷入维护成本高、扩展性差的困境。
4/1/2025 8:48:34 AM
张张

我们如何构建了一个LangGraph代理以确定GitOps漏洞的优先级?

译者 | 布加迪审校 | 重楼一款基于LangGraph的开源工具可帮助你确定在特定的Kubernetes环境中最需要优先解决的漏洞。 在当今复杂的Kubernetes环境中,管理漏洞并确定优先级很快会变得令人不堪重负。 由于数十甚至数百个容器跨多个服务运行,你如何决定先处理哪些漏洞?
4/3/2025 8:33:59 AM
布加迪
  • 1