Résoudre le problème d'exception/rupture du texte de sortie du format JSON du LLM en contexte long
I. Préface
Bien que la plupart des LLM puissent désormais prendre en charge la sortie de dizaines de milliers de tokens. Cependant, nous rencontrons encore souvent des situations où les LLM ne produisent pas les données selon le format que nous spécifions lorsque nous débarquons dans l'entreprise.
En particulier, nous avons besoin que les résultats soient structurés de manière à pouvoir poursuivre les tâches en aval.
Puisque le format json est intrinsèquement pro-plain text, lorsque vous voulez que LLM structure la sortie, elle est généralement produite en json, puis le json est extrait, converti en dictionnaire, et continue à effectuer des tâches en aval.
Mais il y a de nombreuses raisons qui peuvent faire que nous n'obtenions pas la sortie json complète.
Deuxièmement, la moitié de la sortie de plusieurs cas Json
2.1 La sortie dépasse le support LLM pour Token on line
- Le contexte d'entrée est trop long, ce qui fait qu'il reste trop peu de positions dans la sortie pour que LLM puisse donner une réponse complète. Le json se termine donc après seulement la moitié de la sortie.
- La tâche était trop complexe pour utiliser la technique CoT, laissant la sortie LLM avec trop de processus de pensée intermédiaires, ce qui fait que le LLM n'a pas beaucoup de place pour sortir le résultat final. Soit vous n'obtenez pas le résultat final, soit le résultat s'arrête après seulement la moitié de la sortie.
2.2 Résultats de l'interception des mots sensibles LLM
Afin d'éviter que le LLM ne soit utilisé de manière abusive et ne produise un contenu inapproprié. Les contenus sensibles varient d'une région à l'autre. Lors de la transmission des résultats au monde extérieur, les mots sensibles sont généralement filtrés ou bloqués en fonction de l'endroit où ils se trouvent. Il y a quelques années, Meta a créé une IA aux tendances criminelles, ce qui n'est pas autorisé dans le monde entier.
C'est également ce qui se passe lorsque votre MLI est tronqué, lorsqu'il produit un contenu sensible de manière incontrôlée et qu'il produit un résultat médiocre.
2.3 Non-respect strict des instructions
C'est beaucoup plus courant. Même les meilleurs LLM ont des temps d'arrêt, et il n'y a aucune garantie que le résultat sera dans le format que vous souhaitez.
Nous rencontrons souvent, dans le json de sortie, une situation :
- Absence d'une ponctuation clé ; par exemple :
{"question":你好吗!}
Il est impossible d'analyser ce résultat dans son intégralité sans les doubles guillemets. - La ponctuation, qui n'apparaît pas au bon endroit ; par exemple :
{"question":"你好吗!" ,"answer":"我很好"}
La ponctuation au milieu est en pleine largeur, et non en demi-largeur, ce qui fait également échouer la sortie json. - Il existe de nombreux autres scénarios, je ne les énumérerai donc pas tous, mais voici comment résoudre ce type de problèmes.
Une solution open source
Il existe généralement trois façons de résoudre les trois problèmes mentionnés ci-dessus :
- Complétion du json : principalement pour la sortie de la réponse json de la moitié du cas, c'est-à-dire la moitié du json pas tous dans un format json complet, de sorte qu'il a les conditions de l'analyse syntaxique json.
- Corriger json : principalement pour la réponse json dans les cas où la ponctuation est manquante ou incorrecte.
- Rejeter une partie du contenu json : principalement pour le json dans certaines circonstances particulières, conserver le contenu normal, rejeter le contenu des irrégularités.
3.1 solution streaming-json-py
Il s'agit d'une solution open source qui fournit
- streaming-json-go`
- streaming-json-py
- streaming-json-js
Trois langages de programmation sont disponibles pour répondre aux besoins des différents environnements.
Voici un aperçu des résultats en action
pip install streamingjson
lexer = streamingjson.Lexer() # append your JSON segment lexer.append_string('{"a":') # complete the JSON print(lexer.complete_json()) # will print `{"a":null}` # append more JSON segment lexer.append_string('[tr') # complete the JSON again print(lexer.complete_json()) # will print `{"a":[true]}`
Cette solution open source se concentre sur la complémentarité de la solution json
Alternatives :Corrige les chaînes JSON invalides et résout les erreurs de formatage possibles dans les données JSON générées par les LLM.
IV. un programme d'amélioration
Notre propre schéma amélioré, principalement en détectant le manque de ponctuation dans le json et l'incorrection du json, pour corriger le format json, et ensuite, pour aider à compléter le json à réaliser, et enfin par l'extraction de la partie json du contenu, pour obtenir les résultats structurés.
Deux exemples.
output = '''La réponse dont vous avez besoin est ``jsonn{"question" : "Where will the 2024 Olympics be held ?"'' n, n "answer" : "Paris n''''
Il y a trois erreurs :
,
C'est du chinois, je ne peux pas l'analyser correctement.巴黎
Il y a une erreur de citation, une citation manquante.- Les guillemets triples manquants et
}
Finalement, l'erreur ci-dessus a été parfaitement corrigée et la sortie correcte
{'question': '2024年奥运会在哪里举办?', 'answer': '巴黎'}
© déclaration de droits d'auteur
Article copyright Cercle de partage de l'IA Tous, prière de ne pas reproduire sans autorisation.
Articles connexes
Pas de commentaires...