Иногда нам нужен 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'} Вы можете проанализировать частичную строку JSON, передавая дополнительный параметр функции loads . Этот параметр чуть или констант из флага 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.OBJ этом примере Allow.STR . Затем анализатор попытается вернуть как можно больше данных.
Если вы не разрешаете частичные строки, то он не добавит "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 string to parse.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 низкого уровня, полезный только для отладки и демонстрации.
Класс Enum, который указывает, какая частичность разрешена во время анализа JSON. У него есть следующие участники:
STR : разрешить частичную строку.NUM : разрешить частичное число.ARR : разрешить частичный массив.OBJ : разрешить частичный объект.NULL : Разрешить частичное NULL.BOOL : Разрешить частичное логическое.NAN : разрешить частичную Нэн.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.