때때로 우리는 자연어 대신 구조 정보를 생성하기 위해 LLM (대형 언어 모델)이 필요합니다. 가장 쉬운 방법은 JSON을 사용하는 것입니다.
그러나 마지막 응답 토큰을 받기 전에 JSON이 고장납니다. 즉, JSON.parse 사용하여 해독 할 수 없습니다. 그러나 우리는 여전히 데이터를 사용자에게 스트리밍하고 싶습니다.
여기 partial-json-parser 제공됩니다. 여기 데모가 있습니다.
(JavaScript 구현도 있습니다)
pip install partial-json-parser # or poetry / pdm / uv partial-json-parser Python에서 순수하게 구현되며 우수한 유형 힌트가 있습니다. 의존성이 없으며 Python 3.6+에서 작동합니다.
rich 설치하여 Demo Playground를 실행할 수 있습니다.
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 문자열을 구문 분석 할 때 내장 json.loads 와 마찬가지로 작동합니다.
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 파서에게 DICT로 구문 분석자에게 알려줍니다. 그런 다음 파서는 가능한 한 많은 데이터를 반환하려고합니다.
부분 문자열을 허용하지 않으면 "v 가까이 있지 않기 때문에 객체에 "key" 추가되지 않습니다.
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 기능으로 구문 분석하십시오.
구문 분석 된 파이썬 값을 반환합니다.
별칭 : 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 : 부분 null을 허용하십시오.BOOL : 부분 부울을 허용하십시오.NAN : 부분 NAN을 허용하십시오.INFINITY : 부분적인 무한대를 허용하십시오._INFINITY : 부분 -인치를 허용합니다.INF : 부분 무한대와 -infinity를 모두 허용하십시오.SPECIAL : 모든 특별한 값을 허용합니다.ATOM : 모든 원자 값을 허용하십시오.COLLECTION : 모든 수집 값을 허용합니다.ALL : 모든 값을 허용합니다. 이 라이브러리 테스트를 실행하려면 저장소를 복제하고 종속성을 설치해야합니다.
git clone https://github.com/promplate/partial-json-parser.git
cd partial-json-parser
pdm install그런 다음 가설과 pytest를 사용하여 테스트를 실행할 수 있습니다.
pdm test가능한 한 많은 엣지 케이스를 덮으려고 노력하는 동안 항상 어떤 경우에는 다루지 않을 수 있습니다.
이 프로젝트는 MIT 라이센스에 따라 라이센스가 부여됩니다.