Resolver el problema de excepción/ruptura del texto de salida del formato JSON de contexto largo de LLM

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

  1. 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.
  2. 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:

  1. Falta puntuación clave; por ejemplo:{"question":你好吗!} Es imposible analizar esta salida en su totalidad sin comillas dobles.
  2. 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.
  3. 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:

  1. 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.
  2. Fix json: principalmente para la respuesta json en la puntuación falta o puntuación no es correcta situación
  3. 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

Artículos relacionados

Sin comentarios

Debe iniciar sesión para participar en los comentarios.
Acceder ahora
ninguno
Sin comentarios...