有時,我們需要LLM(大型語言模型)來產生結構信息,而不是自然語言。最簡單的方法是使用JSON。
但是,在收到最後一個響應令牌之前,json被打破了,這意味著您不能使用JSON.parse對其進行解碼。但是我們仍然想將數據流式傳輸給用戶。
partial-json-parser是一個輕巧且可自定義的庫,用於解析部分JSON字符串。這是一個演示。
(請注意,也有JavaScript實現)
pip install partial-json-parser # or poetry / pdm / uv partial-json-parser純粹在Python中實現,具有良好的提示。它是零依賴性,與Python 3.6+一起使用。
您可以通過安裝rich安裝運行演示遊樂場或:
pip install partial-json-parser[playground]然後在終端中運行json-playground ,您可以進行交互嘗試。
from partial_json_parser import loads
> >> loads ( '{"key": "v' ) # {'key': 'v'}另外,您可以使用ensure_json獲取完成的JSON字符串:
from partial_json_parser import ensure_json
> >> ensure_json ( '{"key": "v' ) # '{"key": "v"}'您可以從庫中導入loads功能和Allow對象:
from partial_json_parser import loads , Allow Allow對像只是選項的枚舉。它決定哪種類型可以部分。僅在完成後才出現未allow的類型才能確保。
loads功能就像內置的json.loads一樣,在解析完整的JSON字符串時可以工作:
result = loads ( '{"key":"value"}' )
print ( result ) # Outputs: {'key': 'value'}您可以通過將附加參數傳遞到loads函數來解析部分JSON字符串。此參數是從Allow標誌的位或常數的。
(請注意,您可以直接從partial-json-parser中導入所需的常數)
from partial_json_parser import loads , Allow , STR , OBJ
result = loads ( '{"key": "v' , STR | OBJ )
print ( result ) # Outputs: {'key': 'v'}在此示例中, Allow.STR告訴解析器,如果字符串不完整, Allow.OBJ可以。然後,解析器嘗試返回盡可能多的數據。
如果您不允許部分字符串,那麼它不會在對像中添加"key"因為"v不近:
result = loads ( '{"key": "v' , OBJ )
print ( result ) # Outputs: {}
result = loads ( '{"key": "value"' , OBJ )
print ( result ) # Outputs: {'key': 'value'}相似性,如果允許,則可以分析部分列表,甚至可以分析部分特殊值:
(請注意, allow默認值Allow.ALL 。
result = loads ( '[ {"key1": "value1", "key2": [ "value2' )
print ( result ) # Outputs: [{'key1': 'value1', 'key2': ['value2']}]
result = loads ( "-Inf" )
print ( result ) # Outputs: -inf如果JSON字符串畸形, parse功能將丟棄錯誤:
loads ( "wrong" ) # MalformedJSON: Malformed node or string on line 1 json_string <string> :(不完整的)JSON字符串到解析。allow_partial <Allow | int> :指定在JSON解析過程中允許哪種偏差(默認: Allow.ALL )。parser (str) -> JSON :普通的JSON解析器。默認值為json.loads 。完成JSON字符串並使用parser功能解析。
返回解析的Python值。
別名: decode , parse_json 。
json_string <string> :要完成的(不完整)JSON字符串。allow_partial <Allow | int> :指定在JSON解析過程中允許哪種偏差(默認: Allow.ALL )。返回完成的JSON字符串。
json_string <string> :要完成的(不完整)JSON字符串。allow_partial <Allow | int> :指定在JSON解析過程中允許哪種偏差(默認: Allow.ALL )。返回輸入字符串切片的元組和完成。
請注意,這是一個低級API,僅對調試和演示有用。
枚舉課程指定在JSON解析過程中允許哪種偏見。它有以下成員:
STR :允許部分字符串。NUM :允許部分號碼。ARR :允許部分數組。OBJ :允許部分對象。NULL :允許部分空。BOOL :允許部分佈爾值。NAN :允許部分nan。INFINITY :允許部分無限。_INFINITY :允許部分 - infinity。INF :同時允許部分無限和 - 內度。SPECIAL :允許所有特殊值。ATOM :允許所有原子值。COLLECTION :允許所有收集值。ALL :允許所有值。 要運行此庫的測試,您應該克隆存儲庫並安裝依賴項:
git clone https://github.com/promplate/partial-json-parser.git
cd partial-json-parser
pdm install然後,您可以使用假設和pytest進行測試:
pdm test請注意,雖然我們努力涵蓋盡可能多的邊緣案例,但總是有可能不涵蓋某些情況。
該項目已根據MIT許可獲得許可。