草稿

第 6 章:结构化输出与模型配置

结构化输出能将模型的自由文本能力转化为可控、可验证的数据接口,是工程化的基础。

结构化输出的必要性:保证可预测的格式

在许多应用场景中,仅仅获得大语言模型(LLM, Large Language Model)生成的自然语言文本是不够的。例如,当需要提取特定字段、将数据传递给下游系统(如数据库或 API)或执行复杂的验证时,需要模型提供特定、可预测的格式化数据。

结构化输出(Structured Output) 允许智能体返回特定格式(如 JSON 对象、Pydantic 模型或 dataclass)的数据。

  • 保证可预测性:结构化输出将非结构化文本转换为经过验证的结构化数据。
  • 应用集成:应用程序可以直接解析和使用结构化数据,无需处理自然语言解析的复杂性和不确定性。

LangChain 的 create_agent 函数自动处理结构化输出:用户设置所需模式,智能体捕捉、验证并返回结构化数据,这些数据存储在智能体状态的 structured_response 键中。

响应格式的定义与要求:使用 dataclass 或 Pydantic

为了指导模型生成结构化输出,开发者必须定义一个清晰的模式(Schema),包括字段名称、类型和描述。

推荐在 Python 中使用 dataclass 或 Pydantic 模型来定义响应模式。Pydantic 模型提供了丰富的功能集,包括字段验证、描述和嵌套结构。

在实际案例中,响应模式可定义为 ResponseFormat,使用 dataclass 保证输出包含固定的 punny_response 字段和可选的 weather_conditions 字段。

模式定义必须清晰,字段名称、类型和描述需指定输出应遵守的精确格式。

结构化输出策略

LangChain 提供多种结构化输出策略,通过 response_format 参数进行控制。当提供一个模式类型(type[StructuredResponseT])时,LangChain 会根据模型能力自动选择最佳策略。

下表对比了两种主流结构化输出策略及其适用场景:

策略类型机制与优势适用场景
ProviderStrategy利用模型提供商原生结构化输出能力,API 层强制模式验证,可靠性高支持原生结构化输出的模型
ToolStrategy通过工具调用模拟结构化输出,兼容所有支持工具调用的模型不支持原生结构化输出的模型
表 1: 结构化输出策略对比
  • ProviderStrategy:当模型支持原生结构化输出时,LangChain 会自动选择此策略,API 层强制执行模式,可靠性高。
  • ToolStrategy:适用于不支持原生结构化输出的模型,通过工具调用实现结构化输出,可用 tool_message_content 参数自定义工具消息内容。

结构化输出的错误处理与重试机制

模型在通过工具调用生成结构化输出时可能会犯错,如输出格式不匹配或调用了错误的工具。LangChain 提供智能重试机制自动处理这些错误。

常见错误类型包括:

  • Schema Validation Error:生成输出不匹配预期模式时,智能体会提供特定错误反馈。
  • Multiple Structured Outputs Error:模型错误地调用了多个结构化输出工具。

错误处理策略可通过 handle_errors 参数自定义:

  • 自定义错误消息:设置为字符串时,智能体始终提示模型使用固定工具消息重试。
  • 处理特定异常:指定异常类型或元组,智能体仅在抛出指定异常时重试,否则抛出异常。
  • 自定义错误处理函数:可提供自定义函数处理特定验证错误或其他异常。

系统提示(System Prompt)的设计与动态调整

系统提示是控制智能体行为和能力的关键模型上下文组成部分,设定模型角色、语气和响应指南。

静态配置:最常见方法是提供字符串作为 system_prompt 参数。未提供时,智能体会从消息中推断任务。

实际案例中,可定义详细系统提示,将智能体设定为“以双关语发言的专业天气预报员”,并指导其在用户询问天气时必须先使用工具获取位置。

动态系统提示:高级用例可根据运行时上下文或智能体状态修改系统提示。通过中间件实现动态系统提示,@dynamic_prompt 装饰器用于创建可根据模型请求动态生成系统提示的中间件。使用 @wrap_model_call@dynamic_prompt 进行的修改是瞬态的,仅影响单次模型调用,不改变状态中保存内容。

图 1: 结构化输出策略与错误处理流程
图 1: 结构化输出策略与错误处理流程

总结

结构化输出与严格的解析流程,是从原型到生产化的重要一环,能显著提升可用性与自动化程度。

文章导航

独立页面

这是书籍中的独立页面。

书籍首页