create_agent 会自动处理结构化输出。用户设置其期望的结构化输出模式,当模型生成结构化数据时,该数据会被捕获、验证,并在代理状态的 'structured_response' 键中返回。
响应格式
使用response_format 来控制代理如何返回结构化数据:
ToolStrategy[StructuredResponseT]:使用工具调用实现结构化输出ProviderStrategy[StructuredResponseT]:使用提供商原生结构化输出type[StructuredResponseT]:模式类型 - 根据模型能力自动选择最佳策略None:未明确请求结构化输出
- 如果所选模型和提供商支持原生结构化输出(例如 OpenAI、Anthropic (Claude) 或 xAI (Grok)),则使用
ProviderStrategy。 - 对于所有其他模型,使用
ToolStrategy。
结构化响应在代理最终状态的
structured_response 键中返回。
提供商策略
一些模型提供商通过其API原生支持结构化输出(例如 OpenAI、xAI (Grok)、Gemini、Anthropic (Claude))。当可用时,这是最可靠的方法。 要使用此策略,请配置ProviderStrategy:
strict 参数需要 langchain>=1.2。required
定义结构化输出格式的模式。支持:
- Pydantic模型:带有字段验证的
BaseModel子类。返回已验证的Pydantic实例。 - 数据类:带有类型注解的Python数据类。返回字典。
- TypedDict:类型化字典类。返回字典。
- JSON模式:包含JSON模式规范的字典。返回字典。
create_agent.response_format 且模型支持原生结构化输出时,LangChain会自动使用 ProviderStrategy:
如果提供商原生支持您所选模型的结构化输出,那么编写
response_format=ProductReview 与 response_format=ProviderStrategy(ProductReview) 在功能上是等效的。在任何一种情况下,如果结构化输出不受支持,代理将回退到工具调用策略。工具调用策略
对于不支持原生结构化输出的模型,LangChain使用工具调用来实现相同的结果。这适用于所有支持工具调用的模型(大多数现代模型)。 要使用此策略,请配置ToolStrategy:
required
定义结构化输出格式的模式。支持:
- Pydantic模型:带有字段验证的
BaseModel子类。返回已验证的Pydantic实例。 - 数据类:带有类型注解的Python数据类。返回字典。
- TypedDict:类型化字典类。返回字典。
- JSON模式:包含JSON模式规范的字典。返回字典。
- 联合类型:多个模式选项。模型将根据上下文选择最合适的模式。
生成结构化输出时返回的工具消息的自定义内容。
如果未提供,则默认为显示结构化响应数据的消息。
结构化输出验证失败时的错误处理策略。默认为
True。True:使用默认错误模板捕获所有错误str:使用此自定义消息捕获所有错误type[Exception]:仅使用默认消息捕获此异常类型tuple[type[Exception], ...]:仅使用默认消息捕获这些异常类型Callable[[Exception], str]:返回错误消息的自定义函数False:不重试,让异常传播
自定义工具消息内容
tool_message_content 参数允许您自定义生成结构化输出时出现在对话历史中的消息:
tool_message_content,我们最终的 ToolMessage 将是:
错误处理
模型在通过工具调用生成结构化输出时可能会出错。LangChain提供智能重试机制来自动处理这些错误。多个结构化输出错误
当模型错误地调用多个结构化输出工具时,代理会在ToolMessage 中提供错误反馈,并提示模型重试:
模式验证错误
当结构化输出与预期模式不匹配时,代理会提供具体的错误反馈:错误处理策略
您可以使用handle_errors 参数自定义错误处理方式:
自定义错误消息:
handle_errors 是一个字符串,代理将始终使用固定的工具消息提示模型重试:
handle_errors 是一个异常类型,代理仅在引发的异常是指定类型时重试(使用默认错误消息)。在所有其他情况下,异常将被抛出。
处理多种异常类型:
handle_errors 是一个异常元组,代理仅在引发的异常是其中一种指定类型时重试(使用默认错误消息)。在所有其他情况下,异常将被抛出。
自定义错误处理函数:
StructuredOutputValidationError 时:
MultipleStructuredOutputsError 时:
将这些文档通过MCP连接到Claude、VSCode等,以获取实时答案。

