用输出解析器解析模型返回,偶发报 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)

报错是间歇性的,我蹲守了半小时才抓到一次完整现场。

恢复的判定其实很直接。解析失败率降到千分之一以下,失败样本都能从日志里找到原文并定位原因。

容易忽略的是,自动修复解析会再调一次模型,成本和延迟都会上升,优先把提示词写清楚比事后修复更划算。线上能稳定复现的问题都不算难,难的是只在大流量下才出现的那种。

作者 9823189