Решение проблемы исключения/поломки выходного текста формата JSON с длинным контекстом LLM

I. Предисловие

Хотя большинство LLM сейчас могут поддерживать вывод десятков тысяч Token. Тем не менее, мы все еще часто сталкиваемся с ситуациями, когда LLM не выводят данные в соответствии с форматом, который мы указываем, когда мы приземляемся в реальный бизнес.

В частности, нам нужно, чтобы выходные данные были структурированы, чтобы мы могли продолжить выполнение последующих задач.

Поскольку формат json по своей сути является простым текстом, когда вы хотите, чтобы LLM структурировал вывод, он обычно выводится в виде json, а затем json извлекается, преобразуется в словарь и используется для выполнения последующих задач.

Но существует множество причин, по которым мы можем не получить полный json-вывод.

 

Во-вторых, в выходной половине Json несколько случаев

2.1 Выход превышает поддержку LLM для Token on line

  1. Входной контекст слишком длинный, в результате чего на выходе остается слишком мало позиций, чтобы LLM мог дать полный ответ, поэтому json заканчивается только после половины вывода.
  2. Задача была слишком сложной для использования техники CoT, в результате чего на выходе LLM получал слишком много промежуточных мыслительных процессов, что приводило к тому, что LLM не оставалось места для вывода конечного результата. Либо вы не получаете конечного результата, либо результат останавливается только после половины вывода

2.2 Выход LLM по перехвату чувствительных слов

Чтобы предотвратить злоупотребление LLM и вывод неуместного контента. Разные регионы имеют разный чувствительный контент, поэтому при выводе результатов во внешний мир чувствительные слова обычно фильтруются или блокируются в зависимости от места. Как и несколько лет назад, в Мета появился ИИ с криминальными наклонностями, что запрещено во всем мире.

Вот что происходит, когда ваш llm обрезается, когда он неконтролируемым образом выводит чувствительное содержимое и выдает половинчатый результат.

2.3 Несоблюдение строгих инструкций

Это гораздо более распространенный вариант. Даже у лучших LLM есть время "дремать", и нет никакой гарантии, что результат будет в нужном вам формате.

Мы часто сталкиваемся с ситуацией, когда в выходных данных json:

  1. Отсутствие ключевых знаков препинания; например:{"question":你好吗!} Полностью разобрать этот вывод без двойных кавычек невозможно.
  2. Пунктуация, которая стоит не на своем месте; например:{"question":"你好吗!" ,"answer":"我很好"} Пунктуация в середине имеет полную ширину, а не половинную, что также приводит к сбою вывода json.
  3. Существует множество других сценариев, поэтому я не буду перечислять их все, но вот как решать подобные проблемы.

 

III. Решение с открытым исходным кодом

Обычно существует три способа решения трех вышеупомянутых проблем:

  1. Завершение json: в основном для вывода json-ответа на половину дела, то есть половина json не вся в полном json-формате, так что он имеет условия json парсинга.
  2. Исправьте json: в основном для ответа на json в ситуации, когда знаки препинания отсутствуют или знаки препинания неверны.
  3. Отбросьте часть содержимого json: в основном для json в некоторых случаях нельзя учесть особые обстоятельства, сохраните нормальное содержимое, отбросьте содержимое с нарушениями.

3.1 Решение на основе streaming-json-py

Это решение с открытым исходным кодом и обеспечивает

  • streaming-json-go`
  • streaming-json-py
  • streaming-json-js

Доступны три языка программирования для удовлетворения потребностей различных сред.

Вот как выглядят результаты в действии

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]}`

Это решение с открытым исходным кодом направлено на дополнение к json

Альтернативы:Исправление некорректных строк JSON и устранение возможных ошибок форматирования в данных JSON, генерируемых LLM.

 

IV. Программа совершенствования

Наша собственная улучшенная схема, в основном, обнаруживает отсутствие пунктуации в json и неправильность json, чтобы исправить формат json, а затем, чтобы помочь в заполнении json для достижения, и, наконец, через извлечение json часть содержимого, чтобы получить структурированные результаты

Два примера.

 

output = '''Нужный вам ответ: '''jsonn{"вопрос": "Где пройдут Олимпийские игры 2024 года?"''' n, n "ответ": "Париж n''''

Здесь есть три ошибки:

  • Это китайский язык, не могу разобрать его правильно
  • 巴黎 Есть неправильная цитата. Есть пропущенная цитата.
  • Отсутствуют тройные кавычки и}

В конце концов, вышеуказанная ошибка была исправлена, и правильный вывод

{'question': '2024年奥运会在哪里举办?', 'answer': '巴黎'}
© заявление об авторских правах

Похожие статьи

Нет комментариев

Вы должны войти в систему, чтобы участвовать в комментариях!
Войти сейчас
нет
Нет комментариев...