I. Prefácio
Embora a maioria dos LLMs agora possa suportar a saída de dezenas de milhares de tokens. No entanto, ainda encontramos com frequência situações em que os LLMs não geram resultados de acordo com o formato que especificamos quando estamos no negócio real.
Em particular, precisamos que o resultado seja estruturado para que possamos continuar com as tarefas posteriores.
Como o formato json é inerentemente pró-texto simples, quando você deseja que o LLM estruture a saída, ela geralmente é produzida como json e, em seguida, o json é extraído, convertido em um dicionário e continua a realizar tarefas posteriores.
Mas há muitos motivos que podem fazer com que não obtenhamos a saída json completa.
Em segundo lugar, a metade da saída dos vários casos Json
2.1 A saída excede o suporte do LLM para Token on line
- O contexto de entrada é muito longo, resultando em poucas posições restantes para a saída para que o LLM dê uma resposta completa; portanto, o json termina após apenas metade da saída.
- A tarefa era muito complexa para usar a técnica de CoT, deixando a saída do LLM com muitos processos de pensamento intermediários, fazendo com que o LLM não tivesse muito espaço para produzir o resultado final. Ou você não obtém o resultado final ou o resultado é interrompido após apenas metade da saída
2.2 Saída do LLM de interceptação de palavras sensíveis
Para evitar que o LLM seja usado de forma abusiva e produza conteúdo inadequado. Diferentes regiões têm diferentes conteúdos sensíveis, portanto, ao gerar resultados para o mundo exterior, as palavras sensíveis são geralmente filtradas ou bloqueadas, dependendo do local. Assim como há alguns anos, a Meta criou uma IA com tendências criminosas, o que não é permitido em todo o mundo.
Portanto, isso também é o que acontece quando o seu LILM é truncado, quando ele emite conteúdo sensível de maneira descontrolada e produz um resultado incompleto.
2.3 Não cumprimento estrito das instruções
Isso é muito mais comum. Até mesmo os melhores LLMs têm tempos de soneca e não há garantia de que o resultado estará no formato que você deseja.
Muitas vezes encontramos, no json de saída, uma situação:
- Falta de pontuação importante; por exemplo:
{"question": How are you!}
É impossível analisar esse resultado em sua totalidade sem aspas duplas. - Pontuação, que não aparece no lugar correto; por exemplo:
{"question": "How are you!" {"answer": "I'm fine"}
A pontuação no meio é de largura total, não de metade, o que também faz com que a saída json falhe. - Há muitos outros cenários, por isso não vou listá-los todos, mas veja como resolver esses tipos de problemas.
III. uma solução de código aberto
Normalmente, há três maneiras de resolver os três problemas mencionados acima:
- Conclusão do json: principalmente para a saída da resposta do json, metade do caso, ou seja, metade do json, nem todos em um formato json completo, para que ele tenha as condições de análise do json.
- Corrigir json: principalmente para a resposta json na situação em que a pontuação está faltando ou está incorreta
- Descartar parte do conteúdo do json: principalmente para o json, em alguns casos não é possível levar em conta as circunstâncias especiais, manter o conteúdo normal, descartar o conteúdo das irregularidades.
3.1 Solução streaming-json-py
Essa é uma solução de código aberto e fornece
- streaming-json-go`
- streaming-json-py
- streaming-json-js
Três linguagens de programação estão disponíveis para atender às necessidades de diferentes ambientes.
Veja a seguir os resultados em ação
pip install streamingjson
lexer = streamingjson.Lexer() # anexa seu segmento JSON lexer.append_string('{"a":') # complete o JSON print(lexer.complete_json()) # imprimirá `{"a":null}` # anexa mais um segmento JSON lexer.append_string('[tr') # completa o JSON novamente print(lexer.complete_json()) # imprimirá `{"a":[true]}`
Essa solução de código aberto se concentra em complementar o json
Alternativas:Corrige cadeias de caracteres JSON inválidas e resolve possíveis erros de formatação em dados JSON gerados por LLMs.
IV. um programa de aprimoramento
Nosso próprio esquema aprimorado, principalmente por meio da detecção da falta de pontuação no json e da incorreção do json, para corrigir o formato do json e, em seguida, para ajudar a completar o json e, finalmente, por meio da extração da parte json do conteúdo, para obter os resultados estruturados
Dois exemplos.
output = '''A resposta que você precisa é ```jsonn{"question": "Where will the 2024 Olympics be held?"'' n, n "answer": "Paris n''''
Há três erros aqui:
(matemática) gênero
É chinês, não é possível analisá-lo corretamenteParis, capital da França
Há um erro de citação, há uma citação faltando.- Faltam aspas triplas e
}
Por fim, o erro acima foi perfeitamente corrigido e a saída correta
{'question': 'Where will the 2024 Olympics be held?' (Onde serão realizadas as Olimpíadas de 2024?) , 'answer': 'Paris'}