当你不想只拿一段自然语言,而是想拿稳定可解析的数据结构时,应该如何在 LangChain 中设计响应格式。
结构化输出我放在 Agents 前面,是因为它本质上是"让模型结果进入程序逻辑"的桥。等这个概念清楚了,再去看 Agent 里的
response_format就不会突兀。
结构化输出使得智能体能够以特定、可预测的格式返回数据。你无需解析自然语言响应,而是可以直接获取以 JSON 对象、Pydantic 模型或数据类形式呈现的结构化数据,供应用程序直接使用。
LangChain 的create_agent可自动处理结构化输出。用户设置所需的结构化输出模式,当模型生成结构化数据时,该数据会被捕获、验证,并以structured_response为键名返回至智能体状态中。
Python3
点击展开代码
展开代码
1. 响应格式
使用response_format控制智能体返回结构化数据的方式:
- ToolStrategy[StructuredResponseT]:通过工具调用实现结构化输出
- ProviderStrategy[StructuredResponseT]:采用服务提供商原生结构化输出
- type[StructuredResponseT]:架构类型 —— 根据模型能力自动选择最优策略
- None:未明确请求结构化输出
当直接提供架构类型时,LangChain 会自动选择:
- ProviderStrategy(若所选模型及服务提供商支持原生结构化输出,例如 OpenAI、Anthropic (Claude)或xAI (Grok))。
- ToolStrategy(适用于其他所有模型)。
2. Provider strategy
部分模型提供商通过其 API 原生支持结构化输出(例如 OpenAI、xAI(Grok)、Gemini、Anthropic(Claude))。在可用的情况下,这是最可靠的方法。
要使用此策略,请配置一个ProviderStrategy:
Python3
点击展开代码
展开代码
定义结构化输出格式的模式。支持:
- Pydantic 模型:带有字段验证的BaseModel子类,返回经过验证的 Pydantic 实例。
- 数据类:带有类型注解的 Python 数据类,返回字典。
- 类型字典:类型化字典类,返回字典。
- JSON 模式:包含 JSON 模式规范的字典,返回字典。
下面提供这四种情况的代码
Python3
点击展开代码
展开代码
Python3
点击展开代码
展开代码
Python3
点击展开代码
展开代码
Python3
点击展开代码
展开代码
3. Tool calling strategy
对于不支持原生结构化输出的模型,LangChain 会通过工具调用来实现相同的效果。该方法适用于所有支持工具调用的模型(大多数现代模型)。
要使用此策略,请配置ToolStrategy:
Python3
点击展开代码
展开代码
同样,这里的schema模版支持以下:
- Pydantic 模型:BaseModel 子类,具备字段校验功能,返回校验后的 Pydantic 实例。
- 数据类:带有类型注解的 Python 数据类,返回字典。
- 类型字典:类型化字典类,返回字典。
- JSON 模式:符合 JSON 模式规范的字典,返回字典。
- 联合类型:多种模式选项,模型会根据上下文选择最合适的模式。
这里分别提供五种情况的示例代码:
Python3
点击展开代码
展开代码
Python3
点击展开代码
展开代码
Python3
点击展开代码
展开代码
Python3
点击展开代码
展开代码
Python3
点击展开代码
展开代码
4. Custom tool message content
tool_message_content 参数允许你自定义生成结构化输出时,显示在对话历史中的消息内容。效果如下:
Python3
点击展开代码
展开代码
================================ Human Message =================================
From our meeting: Sarah needs to update the project timeline as soon as possible================================== Ai Message ==================================Tool Calls: MeetingAction (call_1) Call ID: call_1 Args: task: Update the project timeline assignee: Sarah priority: high================================= Tool Message =================================Name: MeetingAction
Action item captured and added to meeting notes!如果没有tool_message_content,最终的ToolMessage会像这样:
================================= Tool Message =================================Name: MeetingAction
Returning structured response: {'task': 'update the project timeline', 'assignee': 'Sarah', 'priority': 'high'}5. 错误处理
先skip
专题阅读
LangChain
这篇文章属于同一条阅读链。你可以直接在这里切换,不用再回到列表页重新找。
部分信息可能已经过时
留言区
留言
欢迎纠错、补充、交流。昵称和评论内容必填;如果你愿意,也可以留下联系方式,仅站主可见。