Техновости
Новости

Needle 2: LLM на 14 МБ выполняет команды на Raspberry Pi 5 без облака и нейроускорителя

Cactus Compute выпустила Needle 2 — модель на 14 МБ для вызова функций, которая превращает обычные фразы в действия на Raspberry Pi 5, работая только на CPU. Команда «Turn the LED on» выполняется за 78 мс, а выбор функции и аргументов занимает около 107 мс. Установка через pip, локальная работа без сети и API, инструменты описываются Python-функциями с декоратором @needle.tool.

Editor 5 мин 0 просм.
Needle 2: LLM на 14 МБ выполняет команды на Raspberry Pi 5 без облака и нейроускорителя

Первоисточник: www.raspberrypi.com

Что такое Needle 2 и чем он не является

Cactus Compute представила Needle 2 — компактную модель на 14 МБ для вызова функций. Она превращает обычные фразы в действия на Raspberry Pi 5, работая только на CPU и без выделенного AI HAT. В примере команда «Turn the LED on» включает светодиод за 78 мс.

Needle 2 — не чат-бот. Модель обучена одной задаче: выбирать подходящую функцию из заданного набора и заполнять её аргументы. Она не ведёт диалог и не отвечает на общие вопросы.

Как работает вызов функций через @needle.tool

Инструменты описываются обычными Python-функциями с декоратором @needle.tool. Декоратор использует имя функции, docstring и аннотации типов, чтобы построить схему инструмента. Например, аннотация text: str сообщает Needle, что аргумент text должен быть строкой.

import needle
from pathlib import Path
import subprocess

notes_path = Path("needle-notes.txt")

@needle.tool
def save_note(text: str):
    """Append a note to a local text file."""
    with notes_path.open("a", encoding="utf-8") as notes:
        notes.write(text + "\n")
    return {"text": text, "path": str(notes_path)}

@needle.tool
def get_temperature():
    """Return the current CPU temperature of this Raspberry Pi in Celsius."""
    out = subprocess.check_output(["vcgencmd", "measure_temp"], text=True)
    return {"temperature_c": float(out.split("=")[1].split("'")[0])}

agent = needle.Needle(tools=[save_note, get_temperature])
response = agent.run("Save a note that says the cooler is working.")

Внутри run() модель сначала формирует выбор инструмента и аргументов, затем run() выполняет функцию и включает её возвращаемое значение в response["results"]. В примере с save_note модель вернула вызов с аргументом text: "the cooler is working", а результат содержал путь к файлу needle-notes.txt.

Установка и запуск на Raspberry Pi 5

Установка выполняется через pip в виртуальном окружении. После первой загрузки Needle работает локально, без облачного API и сетевого подключения.

python3 -m venv needle-env
source needle-env/bin/activate
python -m pip install cactus-needle

Примеры инструментов: save_note, get_temperature, set_led, blink_led, take_photo

В демонстрации использовались функции save_note (запись заметки), get_temperature (запрос vcgencmd), set_led(on), blink_led(times) и take_photo() через rpicam-still. Needle выбирает инструмент, а логика выполнения остаётся в обычном Python-коде. Если у вас уже есть функции GPIO Zero, их можно декорировать и передать в Needle.

  • save_note — добавляет заметку в локальный текстовый файл.
  • get_temperature — возвращает текущую температуру CPU Raspberry Pi в градусах Цельсия через vcgencmd.
  • set_led(on) — управляет светодиодом.
  • blink_led(times) — мигает светодиодом заданное число раз.
  • take_photo() — делает снимок через rpicam-still.

Производительность и задержки

Замеры проводились на Raspberry Pi 5 8 ГБ под Raspberry Pi OS, только на CPU, с cactus-needle 2.0.7. Prefill и decode — счётчики сессии Needle. Время в таблице — это wall-clock время одного полного вызова complete() до запуска выбранной Python-функции.

Замеры на Raspberry Pi 5, только CPU, cactus-needle 2.0.7
ЗапросВызовPrefill (ток/с)Decode (ток/с)Время (мс)
Turn the LED on.set_led48829678
How hot is this Raspberry Pi?get_temperature487303149
Blink the LED 2 times.blink_led47531483
Take a photo.take_photo46124876
Save a note that says the cooler is working.save_note475305107
What is the capital of France?(нет)47029792

Память и потребление

Нативная сессия Needle занимает около 28 МБ. В этом Python-демо пиковое потребление всего процесса составило от 43 МБ до 46,4 МБ, включая интерпретатор. Это позволяет запускать модель на Raspberry Pi 5 без нейроускорителя.

Отказ от нерелевантных запросов

Needle намеренно узкоспециализирован. На вопрос «What is the capital of France?» модель возвращает пустой список function_calls за 92 мс, потому что ни один из переданных инструментов не может ответить на этот вопрос. Для модели действий отказ от нерелевантного запроса — корректное поведение.

Дообучение и ресурсы

Needle можно дообучить локально на ноутбуке под конкретный набор инструментов. Веса и код доступны на Hugging Face (huggingface.co/Cactus-Compute/needle2) и GitHub (github.com/cactus-compute/needle). Оба проекта выпущены под лицензией Apache 2.0.

Частые ошибки

FAQ

Нужен ли нейроускоритель для Needle 2 на Raspberry Pi 5?

Нет. Needle 2 работает только на CPU, без выделенного AI HAT. В примерах команда «Turn the LED on» выполняется за 78 мс.

Работает ли Needle 2 без интернета?

Да. После первой загрузки модель работает локально, без облачного API и сетевого подключения.

Как описать инструмент для Needle 2?

Обычной Python-функцией с декоратором @needle.tool. Декоратор использует имя функции, docstring и аннотации типов для построения схемы инструмента.

Что делает Needle 2 с нерелевантным запросом?

Возвращает пустой список function_calls. Например, на вопрос «What is the capital of France?» ответ приходит за 92 мс без вызова инструментов.


Источник: Raspberry Pi — Turn text input into actions with Needle

Читайте также