You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Langchain create_retrieval_chain时JsonOutputParser解析失败求助

解决JsonOutputParser解析JSON失败的问题

常见问题排查与修复步骤

1. 确保LLM输出严格为纯JSON

LLM经常会额外输出说明性文字(比如"这是生成的结果:")、换行符或注释,直接导致解析失败。解决办法:

  • 在prompt中强制要求仅输出JSON,无任何额外内容,示例代码:
    from langchain.prompts import PromptTemplate
    
    prompt = PromptTemplate(
        template="根据简历内容生成候选人信息,仅输出JSON格式,不要添加任何解释或额外文字:\n{resume_content}",
        input_variables=["resume_content"],
    )
    
  • 对LLM的原始输出做清洗,提取其中的JSON结构:
    import re
    from langchain.output_parsers import JsonOutputParser
    
    # llm_output为LLM返回的原始内容
    llm_output = llm.invoke(prompt.format(resume_content=your_resume_text))
    # 用正则匹配完整JSON块
    json_match = re.search(r'\{.*\}', llm_output, re.DOTALL)
    if json_match:
        clean_json = json_match.group()
        result = parser.parse(clean_json)
    else:
        raise ValueError("LLM输出未包含有效JSON结构")
    

2. 绑定Pydantic Schema约束输出结构

用Pydantic模型定义你期望的JSON结构,让LLM严格按照该结构生成,从根源降低解析出错概率:

from pydantic import BaseModel, Field
from langchain.output_parsers import JsonOutputParser

# 定义目标JSON的结构模型
class CandidateInfo(BaseModel):
    name: str = Field(description="候选人姓名")
    position: str = Field(description="应聘职位")
    skills: list[str] = Field(description="掌握技能列表")
    experience: int = Field(description="工作年限")

# 初始化解析器并绑定模型
parser = JsonOutputParser(pydantic_object=CandidateInfo)

# 将schema规则加入prompt,明确告知LLM生成要求
prompt = PromptTemplate(
    template="根据简历内容生成候选人信息,严格按照以下JSON Schema输出,仅返回JSON:\n{format_instructions}\n简历内容:{resume_content}",
    input_variables=["resume_content"],
    partial_variables={"format_instructions": parser.get_format_instructions()}
)

3. 添加解析异常的兜底逻辑

即使做了以上处理,仍可能出现解析失败,建议添加异常捕获与处理:

try:
    result = parser.parse(llm_output)
except Exception as e:
    # 记录错误日志,返回友好提示或触发重试
    print(f"JSON解析失败: {str(e)}")
    # 可选:调用LLM重新生成,或返回预设的默认结构

4. 调整LLM的温度参数

如果LLM的temperature设置过高,输出会更随机,容易偏离JSON格式。可以适当降低温度(比如设为0.1或0),提升输出稳定性:

from langchain.llms import OpenAI

llm = OpenAI(temperature=0.1)  # 降低温度减少输出随机性

内容的提问来源于stack exchange,提问作者Aliasgar Taksali

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 15:22:42