SFT 🥳😘
Очень люблю команду GigaChat. В прошлом году они сделали красиво, обходя, на мой взгляд, топовые модели в FC (Function Calling) в техническом плане. Их фишка была в том, что они учитывали output функции при выборе Tools и корректного заполнения аргументов. Используя эти знания, можно было выбивать достаточно хорошие результаты.
Что же сейчас? Значительно улучшили chat template, сделали его OpenAI-подобным: добавили
developer system, added files и user-memory. Это позволяет разработчикам пользоваться приоритетами ролей и, скажем так, брать Attention за РАГа.Но это понятно и даже скучно. Меня больше зацепило следующее - формат тулов теперь не JSON, а TypeScript! Это позволяет, по заявлениям, экономить до 30% на «мусорных» токенах (только недавно все хайповали по поводу TOON / CSV и вели горячие дискуссии под каждым постом, а люди, занимающиеся SFT в гиге, пошли таким изящным путем).
Как это работает?
Вы вводите тулзы как есть (OpenAI-совместимый формат, инференс не меняется!), а «под капотом» ваш JSON tools конвертируется в TypeScript и подкладывается в chat-template. Поддерживаются
object, string, number, integer, boolean, array (что ок) и enum (тоже есть). Различные подсказки в виде format, maxItems, minItems, maximum, minimum, pattern и description превращаются в комментарии при конвертации в TypeScript.Почему это круто?
1. Экономия токенов. - TypeScript зачастую занимает меньше токенов, чем JSON.
2. Элегантность - Это красивое решение проблемы, особенно в эпоху агентов. Если этим правильно научиться пользоваться, можно выжимать из моделей максимум.
Условно, если мы представим всем привычный
get_weather, то в модель он уйдет в таком читаемом виде:
namespace functions {
// Получает прогноз погоды в указанном городе.
type get_weather = (_: {
// Название города (например, Москва)
// pattern: "^[A-Za-zА-Яа-я\-\s]+$"
location: string,
// Количество дней прогноза
// minimum: 1
// maximum: 10
days?: number, // default: 1
// Единицы измерения
format?: "celsius" | "fahrenheit",
}) => any;
} // namespace functions
Остается только верить, что в претрейне было правда много typescript и что модель научилась следовать коммантариям в коде. Что, на самом деле, не особо получается у того же Qwen235B в Python коде. Здесь время покажет.