Google Colab中LangChain代码出现JSONDecodeError问题求助
解决LangChain中create_extraction_chain的JSONDecodeError问题
你的问题根源是GPT-3.5-turbo输出的JSON格式不规范,出现了未闭合的字符串,导致LangChain的解析器报错。以下是几个直接可用的解决办法:
强制LLM输出严格JSON
用JsonOutputParser配合PromptTemplate,让模型明确知道必须输出合法JSON。先定义你要提取的结构,再自动生成格式约束指令,示例代码:from langchain.output_parsers import JsonOutputParser from langchain.prompts import PromptTemplate from pydantic import BaseModel, List # 定义主题提取的结构,根据你的需求调整 class TopicStructure(BaseModel): main_topics: List[str] sub_topics: List[str] parser = JsonOutputParser(pydantic_object=TopicStructure) # 构建带格式要求的prompt prompt = PromptTemplate( template="从以下文本提取主题,必须输出严格符合JSON格式的内容:\n{text}\n{format_instructions}", input_variables=["text"], partial_variables={"format_instructions": parser.get_format_instructions()} ) # 重新构建链 chain = prompt | llm | parser清洗map_reduce的输出文本
map_reduce生成的topics_found可能包含换行、特殊字符,干扰后续的JSON生成。先对文本做清洗:import re def clean_transcript(text): # 合并多余换行和空格 text = re.sub(r'\n+', ' ', text).strip() # 转义双引号,避免JSON解析冲突 text = text.replace('"', '\\"') return text # 先清洗再传入chain topics_found_cleaned = clean_transcript(topics_found) topics_structured = chain.run(topics_found_cleaned)降低模型输出随机性
调用GPT-3.5-turbo时设置temperature=0,减少模型输出的不确定性,提升JSON格式的稳定性:from langchain.chat_models import ChatOpenAI llm = ChatOpenAI(model_name="gpt-3.5-turbo", temperature=0)添加解析错误重试机制
用RetryOutputParser捕获解析失败的情况,自动让模型重新生成符合要求的输出:from langchain.output_parsers import RetryOutputParser retry_parser = RetryOutputParser.from_llm(llm=llm, parser=parser) chain = prompt | llm | retry_parser
内容的提问来源于stack exchange,提问作者Motzny
相关产品推荐
相关产品推荐

