Иногда нам нужен LLM (крупные языковые модели) для производства структурной информации вместо естественного языка. Самый простой способ - использовать JSON.
Но перед тем, как получить последний токен ответа, JSON сломлен, что означает, что вы не можете использовать JSON.parse
для его декодирования. Но мы все еще хотим передавать данные пользователю.
Здесь идет partial-json
, легкая и настраиваемая библиотека для разделения частичных струн JSON. Вот демонстрация.
(Обратите внимание, что есть и реализация Python)
npm i partial-json # or pnpm / bun / yarn
partial-json
реализуется исключительно в JavaScript и имеет как commonjs
, так и esm
.
Вы можете импортировать функцию parse
и Allow
Object из библиотеки, как это:
import { parse , Allow } from "partial-json" ;
Объект Allow
- это просто перечисление для параметров. Он определяет, какие типы могут быть частичными. Типы, не включенные в allow
появляются только после того, как его завершение может быть обеспечено.
Функция parse
работает так же, как встроенный JSON.parse
при анализе полной строки JSON:
let result = parse ( '{"key":"value"}' ) ;
console . log ( result ) ; // Outputs: { key: 'value' }
Вы можете проанализировать частичную строку JSON, передавая дополнительный параметр функции parse
. Этот параметр является чучевым или констант из объекта Allow
:
(Обратите внимание, что вы можете напрямую импортировать необходимые вам константы от partial-json
)
import { parse , STR , OBJ } from "partial-json" ;
result = parse ( '{"key": "v' , STR | OBJ ) ;
console . log ( result ) ; // Outputs: { key: 'v' }
В этом примере Allow.STR
сообщает парсеру, что все в порядке, если строка неполна, и Allow.OBJ
рассказывает анализатору так же как объект. Затем анализатор попытается вернуть как можно больше данных.
Если вы не разрешаете частичные строки, то он не добавит "key"
к объекту, потому что "v
не близок:
result = parse ( '{"key": "v' , OBJ ) ;
console . log ( result ) ; // Outputs: {}
result = parse ( '{"key": "value"' , OBJ ) ;
console . log ( result ) ; // Outputs: { key: 'value' }
Сходство, вы можете проанализировать частичные массивы или даже частичные специальные значения, если вы разрешите:
(Обратите внимание, что allow
по умолчанию разрешать. Allow.ALL
)
result = parse ( '[ {"key1": "value1", "key2": [ "value2' ) ;
console . log ( result ) ; // Outputs: [ { key1: 'value1', key2: [ 'value2' ] } ]
result = parse ( "-Inf" ) ;
console . log ( result ) ; // Outputs: -Infinity
Если строка JSON уменен, функция parse
вынесет ошибку:
parse ( "wrong" ) ; // MalformedJSON [Error]: SyntaxError: Unexpected token 'w', "wrong" is not valid JSON at position 0
jsonString
<string>
: json String to Parse.allowPartial
<number>
: укажите, какая частичность разрешена во время анализа JSON (по умолчанию: Allow.ALL
).Возвращает проанализированное значение JavaScript.
Объект, который указывает, какая частичность разрешена во время анализа 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-js.git
cd partial-json-parser-js
npm i
Затем вы можете запустить тесты, используя vitest:
npm run test
Обратите внимание, что, хотя мы стремимся покрыть как можно больше краев, всегда возможно, что некоторые случаи не могут быть покрыты.
Этот проект лицензирован по лицензии MIT.