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)

提问人:user4113125 提问时间:10/31/2023 最后编辑:user4113125 更新时间:11/7/2023 访问量:128

问:

对于以下代码片段,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''' 这在解析时标记为有额外数据。

解析 langchain 大语言模型

评论


答:

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")