Как уместить ИИ в умные очки и не сойти с ума от тормозов
Представьте, что вы делаете софт для умных очков или часов. Вам нужно, чтобы девайс понимал голосовые команды: «выключи свет», «какая завтра погода в Питере?» или «забронируй столик». Обычно для этого дергают API больших языковых моделей вроде Gemini или GPT-4. Но тут начинаются проблемы: задержка в пару секунд убивает весь пользовательский опыт, а счета за токены растут быстрее, чем количество пользователей.
Команда из Cactus Compute решила пойти другим путем. Они взяли знания из огромной Gemini 1.5 и «перелили» их в крошечную модель Needle размером всего в 26 миллионов параметров. Для сравнения: это в сотни раз меньше, чем популярные «малыши» вроде Llama-3-8B или даже Qwen-0.5B.
Что умеет эта кроха
Needle — это не чат-бот, который будет рассуждать с вами о смысле жизни. Это узкоспециализированный инструмент для Function Calling (вызова функций). Она берет запрос пользователя на естественном языке и превращает его в структурированный JSON, который понимает ваш код.
Главная фишка здесь в скорости. На их собственной инфраструктуре модель выдает безумные 6000 токенов в секунду на префилле и 1200 на генерации. Но даже если запустить её локально на обычном MacBook, она работает практически мгновенно.
Вот несколько вещей, которые делают Needle интересным проектом:
- Модель обучалась на 200 миллиардах токенов. Это серьезный объем для такого размера.
- Она заточена под работу на «границе» (edge computing) — телефонах, носимых устройствах и IoT.
- В комплекте идет удобный Playground, где можно дообучить модель под свои специфические инструменты буквально в пару кликов.
Как это устроено внутри
Архитектура называется Simple Attention Network. Если заглянуть в схему, которую авторы оставили в репозитории, можно увидеть довольно изящное решение.
Модель состоит из энкодера на 12 слоев и декодера на 8 слоев. Интересно, что в энкодере нет привычных Feed-Forward сетей (FFN), там только Self-Attention и Gated Residual соединения. Это сильно экономит память и вычислительные ресурсы. Веса эмбеддингов и выходного линейного слоя связаны (tied weights), что тоже стандартный трюк для уменьшения размера модели без потери качества.
Авторы честно говорят: Needle — это эксперимент. Она обходит FunctionGemma-270m и Qwen-0.6B в задачах вызова функций, но пасует в обычных диалогах. У маленьких моделей мало «памяти» о мире, поэтому их легко сбить с толку сложным вопросом, не касающимся дела.
Быстрый старт и дообучение
Развернуть проект проще простого. После клонирования репозитория и запуска скрипта настройки, команда needle playground открывает веб-интерфейс. Там можно сразу потестировать модель на своих примерах.
Если нужно встроить Needle в Python-проект, код выглядит привычно:
from needle import SimpleAttentionNetwork, load_checkpoint, generate, get_tokenizer
# Загружаем веса и конфиг
params, config = load_checkpoint("checkpoints/needle.pkl")
model = SimpleAttentionNetwork(config)
tokenizer = get_tokenizer()
# Просим модель вызвать функцию
result = generate(
model, params, tokenizer,
query="Сколько градусов сейчас в Сочи?",
tools='[{"name":"get_weather","description":"Узнать погоду в городе.","parameters":{"location":{"type":"string","description":"Название города."}}}]'
)
print(result)
# [{"name":"get_weather","arguments":{"location":"Сочи"}}]
Самое ценное — это простота дообучения (fine-tuning). Если у вас есть специфические API, Needle можно «натаскать» на них. Авторы рекомендуют подготовить хотя бы 120 примеров на каждый инструмент, чтобы избежать переобучения. В репозитории даже есть скрипт для генерации таких данных с помощью «старшей» Gemini.
Кому стоит попробовать
Я вижу Needle в проектах, где критична приватность и работа без интернета. Например, в системе умного дома, которая не должна отправлять ваши разговоры в облако, или в мобильном приложении для управления сложным интерфейсом голосом.
Конечно, 26 миллионов параметров накладывают ограничения. Вы не сможете попросить её написать эссе или перевести сложный технический текст. Но если ваша задача — понять, что пользователь хочет «сделать потише» или «записать встречу на четверг», Needle справится с этим быстрее и дешевле любой другой модели.
Проект открытый, веса лежат на Hugging Face, а лицензия MIT позволяет использовать его в коммерческих продуктах. Если вы давно искали способ добавить ИИ в микроконтроллер или старый смартфон — это отличный кандидат для тестов.
