直接使用 GenAI API
當 LLM、VLM 或 ASR 模型與您的應用程式在同一個程序中執行時,請使用 Neat 的直接 GenAI API。載入已部署的 LLiMa 模型目錄,建立一個 GenerationRequest,然後等待完整的結果,或在產生時串流傳輸 token。
如果瀏覽器、服務或遠端客戶端需要透過 HTTP 呼叫模型,請改用 GenAI 伺服器。請參閱 生成式 AI 模型概覽,以取得選擇這兩種應用程式邊界時的協助。
選擇正確的處理方式
對於大多數應用程式,請從 GenAIModel 開始。它會自動從模型目錄中偵測模型任 務,並公開功能檢查:
accepts_text()accepts_image()accepts_audio()task()model_id()
當應用程式知道它正在載入什麼,並且想要使用更精簡的 API 時,請使用特定任務的處理方式:
| 處理方式 | 用於 |
|---|---|
genai::GenAIModel | 自動偵測的 LLM、VLM 或 ASR 模型目錄。 |
genai::VisionLanguageModel | 僅限文字的 LLM 和具有圖像功能的 VLM。 |
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() 是同步的:它會在生成完成後傳回。這是用於測試、腳本以及請求/回應應用程式程式碼的最簡單形式。
串流生成的 Token
當呼叫者需要即時查看生成過程中的輸出時,請使用 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 增加圖片
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 的聊天訊息。