Langchain RouterChain触发OutputParserException错误求助
问题排查与解决方案
核心问题
意图识别模块输出纯字符串OfferInquiry,但RouterChain绑定的输出解析器要求输入为JSON格式,导致解析失败,触发OutputParserException(错误提示本质是解析器无法处理非JSON文本)。
问题验证
- 意图识别结果正确:用户荷兰语查询
Ik ben op zoek naar een laptop(意为"我在找一台笔记本电脑")对应意图OfferInquiry无误 - 输出格式不匹配:解析器期望JSON结构,但实际输入是无JSON标识的纯字符串
解决方案
方案1:调整意图识别输出为JSON格式
确保意图识别模块返回标准JSON结构,而非纯字符串。示例:
# 错误输出(纯字符串) detected_intent = "OfferInquiry" # 正确输出(JSON字符串) detected_intent = '{"detected_intent": "OfferInquiry"}'
如果意图识别由LLM完成,需修改提示模板强制返回JSON:
from langchain.prompts import PromptTemplate intent_prompt = PromptTemplate( input_variables=["user_query", "destinations"], template="""根据用户查询:{user_query},从可选意图列表{destinations}中识别意图,必须返回严格JSON格式,示例:{"detected_intent": "OfferInquiry"}""" )
方案2:适配解析器类型
如果不需要JSON格式,将RouterChain使用的JsonOutputParser替换为StrOutputParser,直接处理纯字符串意图:
from langchain.output_parsers import StrOutputParser # 替换解析器 router_parser = StrOutputParser() # 将解析器绑定到RouterChain的输出处理环节
方案3:中间格式转换
在解析前将纯字符串意图封装为JSON,兼容现有解析器:
import json from langchain.output_parsers import JsonOutputParser detected_intent_str = "OfferInquiry" # 封装为JSON字符串 intent_json = json.dumps({"detected_intent": detected_intent_str}) # 解析JSON parser = JsonOutputParser() parsed_intent = parser.parse(intent_json)
错误日志引用
OutputParserException: Invalid JSON object when parsing text 'OfferInquiry'. Error message: Expecting value: line 1 column 1 (char 0)
内容的提问来源于stack exchange,提问作者Wendy De Wit
相关产品推荐
相关产品推荐

