Resolver el problema de excepción/ruptura del texto de salida del formato JSON de contexto largo de LLM
Tutoriales prácticos sobre IAPublicado hace 8 meses Círculo de intercambio de inteligencia artificial 2K 00
I. Prefacio
Aunque la mayoría de los LLMs pueden ahora soportar la salida de decenas de miles de Token. Sin embargo, todavía nos encontramos a menudo con situaciones en las que los LLM no dan salida de acuerdo con el formato que especificamos cuando realmente estamos aterrizando en el negocio.
En concreto, necesitamos que la salida esté estructurada para poder continuar con las tareas posteriores.
Dado que el formato json es intrínsecamente pro-texto plano, cuando se desea que LLM estructure la salida, por lo general se emite como json, y luego el json se extrae, se convierte en un diccionario, y se continúa para realizar tareas posteriores.
Pero hay muchas razones que pueden hacer que no obtengamos la salida json completa.
En segundo lugar, la mitad de salida de los casos Json varios
2.1 La salida supera el soporte LLM para Token on line
- El contexto de entrada es demasiado largo, por lo que quedan muy pocas posiciones en la salida para que LLM pueda dar una respuesta completa, por lo que el json termina después de sólo la mitad de la salida.
- La tarea era demasiado compleja para utilizar la técnica CoT, dejando la salida del LLM con demasiados procesos de pensamiento intermedios, lo que provocaba que el LLM no tuviera mucho espacio para dar salida al resultado final. O no se obtiene el resultado final o el resultado se detiene después de sólo la mitad de la salida
2.2 Salida del LLM de interceptación de palabras sensibles
Para evitar que se abuse de LLM y se emitan contenidos inapropiados. Diferentes regiones tienen diferentes contenidos sensibles, por lo que cuando se emiten resultados al mundo exterior, las palabras sensibles suelen ser filtradas o bloqueadas dependiendo de la ubicación. Al igual que hace unos años, Meta creó una IA con tendencias criminales, lo que no está permitido en todo el mundo.
Así que esto es también lo que pasa cuando tu llm se trunca al emitir contenido sensible de forma descontrolada y emite un resultado a medias.
2.3 Incumplimiento estricto de las instrucciones
Esto es mucho más habitual. Incluso los mejores LLM tienen tiempos de siesta, y no hay garantía de que la salida estará en el formato que desea.
A menudo nos encontramos, en el json de salida, a menudo nos encontramos con una situación:
- Falta puntuación clave; por ejemplo:
{"question":你好吗!}
Es imposible analizar esta salida en su totalidad sin comillas dobles. - Puntuación que no aparece en el lugar correcto; por ejemplo:
{"question":"你好吗!" ,"answer":"我很好"}
La puntuación en el medio es de ancho completo, no de medio ancho, lo que también hace que la salida json falle. - Hay muchas otras situaciones, así que no las voy a enumerar todas, pero a continuación te explico cómo resolver este tipo de problemas.
III. Una solución de código abierto
Suele haber tres formas de resolver los tres problemas mencionados:
- Finalización de json: principalmente para la salida de la respuesta json la mitad del caso, es decir, la mitad de la json no todos en un formato json completa, por lo que tiene las condiciones de análisis sintáctico json.
- Fix json: principalmente para la respuesta json en la puntuación falta o puntuación no es correcta situación
- Descartar parte del contenido json: principalmente para el json en algunos no pueden tener en cuenta las circunstancias especiales, retener el contenido normal, descartar el contenido de las irregularidades.
3.1 solución streaming-json-py
Se trata de una solución de código abierto y ofrece
- streaming-json-go`
- streaming-json-py
- streaming-json-js
Hay tres lenguajes de programación disponibles para satisfacer las necesidades de distintos entornos.
He aquí los resultados en acción
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]}`
Esta solución de código abierto se centra en complementar el json
Alternativas:Corrige las cadenas JSON no válidas y resuelve posibles errores de formato en los datos JSON generados por los LLM.
IV. Un programa de mejora
Nuestro propio esquema mejorado, principalmente mediante la detección de la falta de puntuación en el json y la incorrección de la json, para corregir el formato json, y luego, para ayudar a completar el json para lograr, y, finalmente, a través de la extracción de la parte json del contenido, para obtener los resultados estructurados
Dos ejemplos.
output = '''La respuesta que necesitas es ```jsonn{"question": "¿Dónde se celebrarán los Juegos Olímpicos de 2024?"'' n, n "answer": "Paris n''''
Aquí hay tres errores:
,
Es chino, no puedo analizarlo correctamente.巴黎
Hay una cita errónea. Falta una cita.- Faltan las comillas triples y
}
Finalmente el error anterior se corrigió perfectamente y la salida correcta
{'question': '2024年奥运会在哪里举办?', 'answer': '巴黎'}
© declaración de copyright
Derechos de autor del artículo Círculo de intercambio de inteligencia artificial Todos, por favor no reproducir sin permiso.
Artículos relacionados
Sin comentarios...