create_agent() 自动处理结构化输出。用户设置所需的结构化输出模式后,当模型生成结构化数据时,系统将捕获、验证并将其返回在智能体状态的 'structured_response' 键中。
控制智能体如何返回结构化数据:
ToolStrategy[StructuredResponseT]:使用工具调用实现结构化输出ProviderStrategy[StructuredResponseT]:使用提供商原生结构化输出功能type[StructuredResponseT]:模式类型——根据模型能力自动选择最佳策略None:无结构化输出
- 对支持原生结构化输出的模型(如 OpenAI、Grok)使用
ProviderStrategy - 对其他所有模型使用
ToolStrategy
structured_response 键中。提供商策略
某些模型提供商通过其 API 原生支持结构化输出(目前仅限 OpenAI 和 Grok)。当可用时,这是最可靠的方法。 要使用此策略,请配置ProviderStrategy:
required
定义结构化输出格式的模式。支持:
- Pydantic 模型:带有字段验证的
BaseModel子类 - 数据类:带有类型注解的 Python 数据类
- TypedDict:类型化字典类
- JSON 模式:包含 JSON 模式规范的字典
create_agent.response_format 传递模式类型且模型支持原生结构化输出时,LangChain 会自动使用 ProviderStrategy:
如果提供商对您选择的模型原生支持结构化输出,则写
response_format=ProductReview 与 response_format=ToolStrategy(ProductReview) 功能等效。无论哪种情况,如果结构化输出不被支持,智能体将回退到工具调用策略。工具调用策略
对于不支持原生结构化输出的模型,LangChain 使用工具调用实现相同效果。此方法适用于所有支持工具调用的模型(即大多数现代模型)。 要使用此策略,请配置ToolStrategy:
required
定义结构化输出格式的模式。支持:
- Pydantic 模型:带有字段验证的
BaseModel子类 - 数据类:带有类型注解的 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 时: