用输出解析器解析模型返回,偶发报 OutputParserException: Could not parse LLM output,整条链直接失败。
一开始怀疑是「解析器对多余空白和代码围栏不宽容」,查了一圈,方向不对。
原因不止一个,得分开看。提示词没有硬性要求只输出目标格式。也可能是模型在答案前后加了说明性文字。
少数情况下是温度偏高,格式遵循度下降。
先换成容错解析器并保留原文
parser = OutputFixingParser.from_llm(parser=parser, llm=llm)
提示词里明确禁止额外说明
prompt = '只输出 JSON,不要任何解释文字'
再往下把解析失败的内容落盘便于复盘
python -c "print(repr(text[:200]))"
降低温度提高格式稳定性
llm = ChatOpenAI(model='gpt-4o-mini', temperature=0)
报错是间歇性的,我蹲守了半小时才抓到一次完整现场。
恢复的判定其实很直接。解析失败率降到千分之一以下,失败样本都能从日志里找到原文并定位原因。
容易忽略的是,自动修复解析会再调一次模型,成本和延迟都会上升,优先把提示词写清楚比事后修复更划算。线上能稳定复现的问题都不算难,难的是只在大流量下才出现的那种。