Хоча визначення схеми складне, у мене є доступна функція Node.js, яка перевіряє, чи правильний документ чи ні.
Якщо ви можете визначити функцію, яка визначає, який текст буде дійсним наступним, ви можете використовувати її, щоб обмежити модель лише передбачити дійсний продовження.
З моделями, які можна запускати локально через HuggingFace Transformers, наприклад LLaMA 2 від Meta, prefix_allowed_tokens_fn
визначить (враховуючи номер партії та маркери на даний момент), які маркери слід дозволити наступним чином. Щось схоже на такий наступний зразок має бути достатнім:
def allowed_fn(b, ts):
якщо ts[-1] у whitespace_ids:
return begin_with_s_ids
інакше:
return all_allowed_ids
...
model.generate(input_ids=input_ids, prefix_allowed_tokens_fn=allowed_fn, num_beams=3, ...)
Tokenizer матиме функції, необхідні для отримання ідентифікаторів маркерів і їх текстове представлення (наприклад)
Через API OpenAI еквівалент буде logits_bias
, але я б не рекомендував використовувати таку віддалену модель, оскільки це вимагало б повторного перемикання між вашим кодом і OpenAI API із завершенням одного маркера.
Як альтернатива, це може допомогти спростити форматувати в те, що йому легше зрозуміти, а потім вручну розібрати його у формат JSON.
Наприклад, markdown підтримує багато функцій, які ви хочете, є досить поширеним, щоб модель бачила його багато, і розширення, ймовірно, будуть можливими за допомогою кількох наочних прикладів.