Parfois, nous avons besoin de LLM (grands modèles de langue) pour produire des informations structurelles au lieu du langage naturel. Le moyen le plus simple est d'utiliser JSON.
Mais avant de recevoir le dernier jeton de réponse, le JSON est cassé, ce qui signifie que vous ne pouvez pas utiliser JSON.parse pour le décoder. Mais nous voulons toujours diffuser les données à l'utilisateur.
Voici partial-json-parser , une bibliothèque légère et personnalisable pour analyser les cordes JSON partielles. Voici une démo.
(Notez qu'il y a aussi une implémentation JavaScript)
pip install partial-json-parser # or poetry / pdm / uv partial-json-parser est implémenté uniquement dans Python, avec des indices de bon type. Il est zéro dépendance et fonctionne avec Python 3.6+.
Vous pouvez installer Exécuter son aire de jeux de démonstration en installant également rich ou:
pip install partial-json-parser[playground] Ensuite, exécutez le json-playground dans votre terminal, et vous pouvez essayer l'analyseur de manière interactive.
from partial_json_parser import loads
> >> loads ( '{"key": "v' ) # {'key': 'v'} Alternativement, vous pouvez utiliser ensure_json pour obtenir la chaîne JSON terminée:
from partial_json_parser import ensure_json
> >> ensure_json ( '{"key": "v' ) # '{"key": "v"}' Vous pouvez importer la fonction loads et l'objet Allow de la bibliothèque comme ceci:
from partial_json_parser import loads , Allow L'objet Allow n'est qu'une énumération pour les options. Il détermine quels types peuvent être partiels. Les types non inclus dans allow apparaissent uniquement une fois que son achèvement peut être assuré.
La fonction loads fonctionne comme le json.loads intégré. Télécharges lors de l'analyse d'une chaîne JSON complète:
result = loads ( '{"key":"value"}' )
print ( result ) # Outputs: {'key': 'value'} Vous pouvez analyser une chaîne JSON partielle en passant un paramètre supplémentaire à la fonction loads . Ce paramètre est un peu ou des constantes du drapeau Allow :
(Notez que vous pouvez importer directement les constantes dont vous avez besoin de partial-json-parser )
from partial_json_parser import loads , Allow , STR , OBJ
result = loads ( '{"key": "v' , STR | OBJ )
print ( result ) # Outputs: {'key': 'v'} Dans cet exemple, Allow.STR dit à l'analyseur que ça va si une chaîne est incomplète, et Allow.OBJ raconte à l'analyseur ainsi comme un dict. L'analyseur essaie ensuite de renvoyer autant de données que possible.
Si vous n'autorisez pas les chaînes partielles, cela n'ajoutera pas "key" à l'objet car "v n'est pas proche:
result = loads ( '{"key": "v' , OBJ )
print ( result ) # Outputs: {}
result = loads ( '{"key": "value"' , OBJ )
print ( result ) # Outputs: {'key': 'value'}Similitude, vous pouvez analyser des listes partielles ou même des valeurs spéciales partielles si vous le permettez:
(Remarque qui allow aux valeurs par défaut de Allow.ALL .
result = loads ( '[ {"key1": "value1", "key2": [ "value2' )
print ( result ) # Outputs: [{'key1': 'value1', 'key2': ['value2']}]
result = loads ( "-Inf" )
print ( result ) # Outputs: -inf Si la chaîne JSON est mal formée, la fonction parse lancera une erreur:
loads ( "wrong" ) # MalformedJSON: Malformed node or string on line 1 json_string <string> : la chaîne JSON (incomplète) pour analyser.allow_partial <Allow | int> : Spécifiez quel type de partiel est autorisé lors de l'analyse JSON (par défaut: Allow.ALL .parser (str) -> JSON : Un analyseur JSON ordinaire. La valeur par défaut est json.loads . Complétez la chaîne JSON et analysez-la avec la fonction parser .
Renvoie la valeur Python analysée.
Alias: decode , parse_json .
json_string <string> : la chaîne JSON (incomplète) à terminer.allow_partial <Allow | int> : Spécifiez quel type de partiel est autorisé lors de l'analyse JSON (par défaut: Allow.ALL .Renvoie la chaîne JSON terminée.
json_string <string> : la chaîne JSON (incomplète) à terminer.allow_partial <Allow | int> : Spécifiez quel type de partiel est autorisé lors de l'analyse JSON (par défaut: Allow.ALL .Renvoie un tuple d'une tranche de la chaîne d'entrée et de l'achèvement.
Notez qu'il s'agit d'une API de bas niveau, uniquement utile pour le débogage et la démonstration.
Classe d'énumération qui spécifie quel type de partiel est autorisé pendant l'analyse JSON. Il a les membres suivants:
STR : Autoriser la chaîne partielle.NUM : Autorisez le numéro partiel.ARR : Autoriser le tableau partiel.OBJ : Autoriser l'objet partiel.NULL : Autorisez Null partiel.BOOL : Autorisez le booléen partiel.NAN : Autoriser le NAN partiel.INFINITY : Autoriser l'infini partiel._INFINITY : Autorisez -Infinity partiel.INF : Permettez à la fois l'infini partiel et la finfinity.SPECIAL : permettez toutes les valeurs spéciales.ATOM : Autorisez toutes les valeurs atomiques.COLLECTION : permettez toutes les valeurs de collecte.ALL : permettez toutes les valeurs. Pour exécuter les tests pour cette bibliothèque, vous devez cloner le référentiel et installer les dépendances:
git clone https://github.com/promplate/partial-json-parser.git
cd partial-json-parser
pdm installEnsuite, vous pouvez exécuter les tests en utilisant l'hypothèse et le pytest:
pdm testVeuillez noter que même si nous nous efforçons de couvrir autant de cas de bord que possible, il est toujours possible que certains cas ne soient pas couverts.
Ce projet est autorisé sous la licence du MIT.