提问人:user4113125 提问时间:10/31/2023 最后编辑:user4113125 更新时间:11/7/2023 访问量:128
langchain.schema.output_parser。OutputParserException:获取无效的 JSON 对象。错误:额外数据:第 7 行第 1 列 (char 1406)
langchain.schema.output_parser.OutputParserException: Got invalid JSON object. Error: Extra data: line 7 column 1 (char 1406)
问:
对于以下代码片段,chain.run() 字符串的输出出现间歇性 json 解析错误
查询 LLM 的 python 函数概述:-
output_parser = StructuredOutputParser.from_response_schemas(response_schemas)
format_instructions = output_parser.get_format_instructions()
template = """
Create a NIFI pipeline using standard NIFI processors. You can use a custom NIFI processor only if it fits to the examples given below.
format the output as JSON with the following keys: pipelineDesription implementationSteps processorList connectorList """
prompt_template = PromptTemplate(input_variables=["question"], template=template, partial_variables={"format_instructions": format_instructions})
prompt_template.format(question=input_qa)
chain= LLMChain(llm=llm,prompt=prompt_template)
answer=chain.run( input_qa)
output_dict = output_parser.parse(answer) => ERROR here
错误详细信息:-
Traceback (most recent call last):
File "D:\GenAI\adaptercopilot\venv\Lib\site-packages\langchain\output_parsers\json.py", line 86, in parse_and_check_json_markdown
json_obj = parse_json_markdown(text)
^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\GenAI\adaptercopilot\venv\Lib\site-packages\langchain\output_parsers\json.py", line 68, in parse_json_markdown
parsed = json.loads(json_str)
^^^^^^^^^^^^^^^^^^^^
File "D:\python\Lib\json\__init__.py", line 346, in loads
return _default_decoder.decode(s)
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\python\Lib\json\decoder.py", line 340, in decode
raise JSONDecodeError("Extra data", s, end)
json.decoder.JSONDecodeError: Extra data: line 7 column 1 (char 1406)
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "D:\GenAI\adaptercopilot\Test.py", line 90, in <module>
answer=(qaDataFlow(question))
^^^^^^^^^^^^^^^^^^^^
File "D:\GenAI\adaptercopilot\adapterLLMModule\LLMModule.py", line 215, in qaDataFlow
output_dict = output_parser.parse(answer)
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\GenAI\adaptercopilot\venv\Lib\site-packages\langchain\output_parsers\structured.py", line 95, in parse
return parse_and_check_json_markdown(text, expected_keys)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\GenAI\adaptercopilot\venv\Lib\site-packages\langchain\output_parsers\json.py", line 88, in parse_and_check_json_markdolangchain.schema.output_parser.OutputParserException: Got invalid JSON object. Error: Extra data: line 7 column 1 (char 1406)
当我检查 answer= chain.run(input_qa) 时,对于成功案例 print(answer) 给出
'''json { ...... } ``` 而对于不成功的情况,它打印(答案)给出 '''json { ...... } ``` \n''' 这在解析时标记为有额外数据。
答:
0赞
user4113125
11/1/2023
#1
我找到了这个问题的临时解决方案。接收 d 作为答案的 markdown 结构具有正确的格式 '''json { .....} '''
我发现这种格式会随着额外的字符而变化 '''json {......}'''\n''' 间歇性地。不确定这个问题是来自 LLM 还是 langchain。但是我看到很多人在 github 上提出了解决方案。
通过引入以下代码,json 解析有效。
print(answer)
if answer.find("\`\`\`\n\`\`\`") != -1:
answer = answer.replace("\`\`\`\n\`\`\`", "\`\`\`")
print("Found and replaced")
评论