Skip to main content
结构化输出允许代理以特定、可预测的格式返回数据。无需解析自然语言响应,即可获得类型化的结构化数据。
本页介绍使用 createAgent 的代理的结构化输出。若要直接在模型上使用结构化输出(不通过代理),请参阅 模型 - 结构化输出
LangChain 的预构建 ReAct 代理 createAgent 会自动处理结构化输出。用户设置其所需的结构化输出模式,当模型生成结构化数据时,该数据会被捕获、验证,并在代理状态的 structuredResponse 键中返回。

响应格式

控制代理返回结构化数据的方式。您可以提供 Zod 模式、任何 Standard Schema 兼容的模式或 JSON Schema 对象。默认情况下,代理使用工具调用策略,其中输出是通过额外的工具调用创建的。某些模型支持原生结构化输出,在这种情况下,代理将使用该策略。 您可以通过将 ResponseFormat 包装在 toolStrategyproviderStrategy 函数调用中来控制行为:
结构化响应在代理最终状态的 structuredResponse 键中返回。
如果使用 langchain>=1.1,对原生结构化输出功能的支持会从模型的配置文件数据动态读取。如果数据不可用,请使用其他条件或手动指定:
如果指定了工具,模型必须支持同时使用工具和结构化输出。

提供商策略

一些模型提供商通过其 API 原生支持结构化输出(例如 OpenAI、xAI (Grok)、Gemini、Anthropic (Claude))。当可用时,这是最可靠的方法。 要使用此策略,请配置 ProviderStrategy
required
定义结构化输出格式的模式。支持:
  • Zod Schema:一个 zod 模式
  • Standard Schema:任何实现 Standard Schema 规范的模式
  • JSON Schema:一个 JSON schema 对象
当您将模式类型直接传递给 createAgent.responseFormat 且模型支持原生结构化输出时,LangChain 会自动使用 ProviderStrategy
提供商原生的结构化输出提供高可靠性和严格验证,因为模型提供商强制执行模式。当可用时请使用它。
如果提供商原生支持您选择的模型的结构化输出,那么编写 responseFormat: contactInfoSchemaresponseFormat: providerStrategy(contactInfoSchema) 在功能上是等效的。在任何一种情况下,如果结构化输出不受支持,代理将回退到工具调用策略。

工具调用策略

对于不支持原生结构化输出的模型,LangChain 使用工具调用来实现相同的结果。这适用于所有支持工具调用的模型(大多数现代模型)。 要使用此策略,请配置 ToolStrategy
required
定义结构化输出格式的模式。支持:
  • Zod Schema:一个 zod 模式
  • Standard Schema:任何实现 Standard Schema 规范的模式
  • JSON Schema:一个 JSON schema 对象
生成结构化输出时返回的工具消息的自定义内容。 如果未提供,默认为显示结构化响应数据的消息。
包含可选 handleError 参数的选项参数,用于自定义错误处理策略。
  • true:使用默认错误模板捕获所有错误(默认)
  • False:不重试,让异常传播
  • (error: ToolStrategyError) => string | Promise<string>:使用提供的消息重试或抛出错误

自定义工具消息内容

toolMessageContent 参数允许您自定义生成结构化输出时出现在对话历史记录中的消息:
如果没有 toolMessageContent,我们将看到:

错误处理

模型在通过工具调用生成结构化输出时可能会出错。LangChain 提供智能重试机制来自动处理这些错误。

多个结构化输出错误

当模型错误地调用多个结构化输出工具时,代理会在 ToolMessage 中提供错误反馈,并提示模型重试:

模式验证错误

当结构化输出与预期模式不匹配时,代理会提供具体的错误反馈:

错误处理策略

您可以使用 handleErrors 参数自定义错误处理方式: 自定义错误消息:
仅处理特定异常:
处理多种异常类型:
无错误处理: