96SEO 2026-09-22 05:05 1
前面调用模型时返回结果通常是一段自然语言。
但在 Agent 开发里很多结果不是给人直接看的,而是要继续交给程序处理。比如:

痛点时刻:你是否也遇到过模型返回的 JSON 包含了多余的 Markdown 代码块,导致 `json.loads` 直接报错?或者模型偶尔漏掉字段,让你的下游逻辑崩溃?
这时候就需要 Output Parser。
这一篇主要看这些内容:
JsonOutputParser -> PydanticOutputParser -> withstructuredoutput -> Parser / Tool / withstructuredoutput 的区别 -> 什么时候需要 Output Parser -> 流式输出 -> 非 JSON 格式
至于先记住一句话。Output Parser 的作用,是把模型返回的字符串解析成程序更好处理的数据。
最直接的想法是:在 Prompt 里要求模型返回 JSON,接下来自己 json.loads。
import json
question = (
"请说一下勒布朗詹姆斯的信息。请以 JSON 格式返回,"
从"包含字段来看。name、birthyear、nationality、majorachievements。")
)
至于try,# . 先直接调用模型,拿到模型返回的文本
response = model.invoke
print
result = json.loads
print
except Exception as error:
print
json{
说到"name"。"勒布朗·詹姆斯"}
这对人很友好,但对 json.loads 不友好。模型一旦多说一句解释性的话,程序就挂了。
Output Parser 解决的就是这类问题:
JsonOutputParser适合解析普通 JSON。按理说,
from langchaincore.outputparsers import JsonOutputParser
parser = JsonOutputParser
question = f"""请说一下勒布朗詹姆斯的信息。请以 JSON 格式返回,包含以下字段: - name:姓名 - birthyear:出生年份 - nationality:国籍 - majorachievements:主要成就。数组 {parser.getformatinstructions}"""
response = model.invoke
result = parser.parse print
这段代码里有三个关键点:
JsonOutputParser创建 JSON 解析器。get_format_instructions拿到一段格式说明,放进 Prompt。parse把模型返回的字符串解析成对象。
这里的主要不是 parse 本身,而是 get_format_instructions。它会告诉模型尽量按可解析的 JSON 输出,减少自由发挥。
JsonOutputParser只能说“我要 JSON”。
PydanticOutputParser可以明“这个 JSON 长什么样”,并把结果解析成 Pydantic 对象。
from langchaincore.outputparsers import PydanticOutputParser
from pydantic import BaseModel,Field
class PlayerInfo:
# Field 的 description 会进入格式说明。
帮助模型理解字段含义
从name来看,str = Field
birthyear: int = Field
nationality: str = Field
majorachievements: list = Field
question = f"""请说一下勒布朗詹姆斯的信息。{parser.getformatinstructions}"""
response = model.invoke result = parser.parse print
痛点解决:当你的字段非常复杂时普通的 Prompt容易让模型写错类型。PydanticOutputParser 通过 Field 强制约束模型的输出逻辑,极大降低了幻觉概率。
常规结构化输出,更推荐用模型的 with_structured_output。
from pydantic import BaseModel,Field
class PlayerInfo:
# Pydantic 模型就是结构化输出
再看name。str = Field
birthyear: int = Field
nationality: str = Field
majorachievements: list = Field
structuredmodel = model.withstructured_output
result = structured_model.invoke print
判断:优先 with_structured_output;需要手动控制 Prompt 或解析过程使用 Output Parser。话说回来,
with_structured_output 可以理解成 LangChain 给结构化输出做的一层。它不是简单地帮你调用 parser.parse。而是把 schema 交给模型,让模型按结构化方式返回。
不同模型底层策略常见路线是:
with_structured_output 省事,但不是所有结构化场景都适合。主要缺点有几个:
如果你只是拿结构化对象,with_structured_output 最省事;如果你需要控制生成或解析过程,回到 Output Parser。话说回来,
# includeraw=True 会同时原始消息和解析结果。适合调试
structuredmodel = model.withstructuredoutput
response = structured_model.invoke
print
print
print
学 Output Parser 不是为了替代 with_structured_output。说到更准确地说,Output Parser 主要用在 with_structured_output 实现不了或者实现起来不舒服的场景。
常见有三类这方面。
先看普通流式输出。
# 普通 stream 返回的是原始消息流
stream = model.stream
fullcontent = ""
for chunk in stream:
# chunk.content 是本次流式返回的文本片段
content = chunk.content or ""
fullcontent += content
# 边接收边输出,就能形成实时展示效果
print
但如果使用 with_structured_output:stream 不再适合作为逐字文本流。
Output Parser 不止处理 JSON。有些场景需要模型返回 XML 格式:
import xml.etree.ElementTree as ET
question = """提取以下文本中的信息。返回格式:
root = ET.fromstring result = { 再看"name",root.findtext,"birth_year": root.findtext,"occupation": root.findtext,} print
。作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback