首先,来看一下大模型流式返回的SSE数据格式:
可以看到SSE格式会返回event:
和data:
字段,这就是典型的SSE的数据格式。
下面是最开始解析大模型流式返回时的代码:
这一版代码使用json库直接解析上面的SSE数据格式,此时发生了报错:
为什么会报错呢?因为json库只能解析json格式,而不是解析SSE数据格式
那么什么是json格式呢?简单来说,就是只由两个大括号括起来,内部是一些键值对(单个json数据,多个json数据则是由中括号括起来,中括号内部是多个单个json数据,每个json数据由逗号分隔),如下:
{
"bot_id": "74812695288********",
"user_id": "123456789",
"stream": True,
"auto_save_history": True,
"additional_messages": [
{
"role": "user",
"content": prompt,
"content_type": "text"
}
]
}
通过将JSON数据格式和本文最上面的SSE数据格式对比,我们可以知道:SSE格式比JSON格式的数据多了两个字符串event:
和data:
,因此直接使用JSON库来解析是无法正确解析的。
此时,我们需要先将data:
去掉,才可以去正确解析SSE数据流中的data:
部分(这里的解析指的是json.dumps
,即将字典等Python对象转化为JSON字符串),代码如下:
此时再次运行,便没有了上面的报错信息
总之遇到报错【json.decoder.JSONDecodeError: Expecting value: line 1 column 1 】,就要检查三点:
- json数据是否为空
- json格式是否正确(例如本例)
- json格式是否完整(是否少大括号,中括号,逗号等)
ps:随手记录一下,没有太多注意排版,还请见谅,希望能对各位有所帮助~