Прямі API для генеративного штучного інтелекту.
Використовуйте прямі API GenAI від Neat, коли модель LLM, VLM або ASR працює в тому ж процесі, що й ваша програма. Завантажте розгорнутий каталог моделі LLiMa, створіть GenerationRequest, а потім дочекайтеся повного результату або отримуйте токени по мірі їх генерації.
Якщо браузеру, сервісу або віддаленому клієнту потрібно викликати модель через HTTP, використовуйте Сервер GenAI. Перегляньте Огляд моделі генеративного штучного інтелекту., щоб отримати допомогу у виборі між двома варіантами реалізації.
Оберіть відповідну ручку.
Для більшості застосунків почніть з GenAIModel. Він автоматично визначає завдання моделі на основі каталогу моделі та надає можливість перевірки її функціональних можливостей:
accepts_text()accepts_image()accepts_audio()task()model_id()
Використовуйте спеціальні обробники для конкретних завдань, коли програма знає, що саме завантажує, і потребує більш обмеженого API:
| Ручка | Використовуйте для |
|---|---|
genai::GenAIModel | Автоматично виявлено каталоги моделей LLM, VLM або ASR. |
genai::VisionLanguageModel | Великі мовні моделі (ВММ), що працюють лише з текстом, і великі багатомодальні моделі (ВБМ), здатні обробляти зображення. |
genai::ASRModel | Моделі перетворення мовлення на текст. |
Надішліть текстовий запит.
#include "neat/genai.h"
#include <iostream>
int main() {
simaai::neat::genai::GenAIModel model(
"/media/nvme/llima/models/Qwen3-4B-Instruct-2507-GPTQ-a16w4");
simaai::neat::genai::GenerationRequest request;
request.prompt = "Explain what an API gateway is in one sentence.";
request.max_new_tokens = 64;
auto result = model.run(request);
std::cout << result.text << "\n";
}
run() є синхронним: він завершує роботу після завершення генерації. Це найпростіша форма для тестів, сценаріїв і коду застосунків, що обробляють запити та відповіді.
Потік згенерованих токенів
Використовуйте stream(), коли абоненту потрібно бачити вивід у міру його створення. Кожен елемент є TokenSample, що містить останній фрагмент тексту, поточні показники та остаточний статус після завершення генерації.
simaai::neat::genai::GenerationRequest request;
request.prompt = "Give me three practical tips for designing a small REST API.";
request.max_new_tokens = 96;
simaai::neat::genai::GenerationStream stream_handle = model.stream(request);
for (const auto& token : stream_handle) {
std::cout << token.text << std::flush;
}
std::cout << "\n";
Якщо користувач закриє запит, змінить підказки або якщо час генерації, встановлений вашою програмою, закінчиться, надішліть команду cancel() у потоці даних.
Додайте зображення для великих мовних моделей.
Візуальні мовні моделі (VLMs) приймають текст і одне або кілька зображень. Зображення передаються через GenerationRequest.images для простого запиту або через ChatMessage.images, коли ви використовуєте історію чату.
Зображення, що передаються як значення Tensor, повинні бути uint8 тензорами HWC RGB. Вхідні дані OpenCV cv::Mat відповідають конвенції Neat/OpenCV: триканальні матриці розглядаються як BGR і перетворюються на RGB перед збереженням у запиті.
simaai::neat::genai::VisionLanguageModel model(
"/media/nvme/llima/models/Qwen3-VL-4B-Instruct-GPTQ-a16w4");
cv::Mat image = cv::imread("scene.jpg");
simaai::neat::genai::GenerationRequest request;
request.prompt = "What is visible in this image?";
request.images = {image};
request.max_new_tokens = 128;
auto result = model.run(request);
std::cout << result.text << "\n";
У випадку повторюваних запитань щодо одного й того ж зображення, VisionLanguageModel.encode(...) може зберігати в моделі векторні представлення зображень у кеші. Потім встановіть request.use_cached_images = true або використовуйте повідомлення в чаті з параметром use_cached_images = true.