Cách sử dụng plugin
Hướng dẫn này bao gồm toàn bộ API runtime: tạo một phiên bản LLM, tải mô hình, gửi tin nhắn, tải mô hình trong runtime, quản lý trạng thái và các hàm tiện ích.
Tạo một phiên bản LLM
Bắt đầu bằng cách tạo một đối tượng Runtime Local LLM. Duy trì một tham chiếu đến nó (ví dụ: như một biến trong Blueprints hoặc UPROPERTY trong C++) để ngăn chặn việc thu gom rác sớm.
- Blueprint
- C++

UPROPERTY()
URuntimeLocalLLM* LLM;
LLM = URuntimeLocalLLM::CreateRuntimeLocalLLM();
Tải một Mô hình
Bạn phải tải một mô hình trước khi gửi tin nhắn. Plugin cung cấp một số phương pháp tải tùy thuộc vào quy trình làm việc của bạn.
Tải theo Tên
Nếu bạn quản lý các mô hình thông qua bảng cài đặt trình chỉnh sửa, hãy sử dụng Load Model (By Name).
- Blueprint
- C++
- UE 5.3 trở về trước
- UE 5.4+
Trong UE 5.3 trở về trước, menu thả xuống không xuất hiện, vì vậy bạn cần lấy danh sách các mô hình có sẵn theo cách thủ công. Sử dụng Get All Downloaded Model Metadata, lấy phần tử ở chỉ mục 0 (hoặc bất kỳ mô hình nào bạn cần), truyền nó vào Get Model File Name để lấy chuỗi tên, sau đó truyền chuỗi đó vào Load Model (By Name).

Trong UE 5.4 trở lên, Load Model (By Name) hiển thị danh sách thả xuống tất cả các model có trên ổ đĩa - chỉ cần chọn model bạn muốn tải.

Trong C++, sử dụng GetAllDownloadedModelMetadata để lấy danh sách các mô hình có sẵn và GetModelFileName để lấy tên truyền vào LoadModelByName.
FLLMInferenceParams Params;
Params.MaxTokens = 512;
Params.Temperature = 0.7f;
Params.SystemPrompt = TEXT("You are a helpful assistant.");
TArray<FLLMModelMetadata> DownloadedModels = URuntimeLLMLibrary::GetAllDownloadedModelMetadata();
if (DownloadedModels.Num() > 0)
{
const FLLMModelMetadata& Model = DownloadedModels[0]; // Select the first available model
FString ModelFileName = URuntimeLLMLibrary::GetModelFileName(Model);
LLM->LoadModelByName(FName(*ModelFileName), Params);
}
Tải từ Đường dẫn Tệp
Tải một mô hình trực tiếp từ đường dẫn tệp tuyệt đối đến tệp .gguf:
- Blueprint
- C++

FLLMInferenceParams Params;
LLM->LoadModelFromFile(TEXT("/path/to/model.gguf"), Params);
Tải từ URL (Tải xuống và Tải lên)
Tải mô hình từ một URL (nếu chưa có trên ổ đĩa) và tự động tải nó lên. Nếu tệp đã tồn tại cục bộ, quá trình tải xuống sẽ được bỏ qua.
- Blueprint
- C++
Biến thể đơn giản nhất chỉ yêu cầu một URL - siêu dữ liệu được suy ra từ tên tệp:

Bạn cũng có thể sử dụng Load Model From URL với đầy đủ siêu dữ liệu mô hình để có thông tin mô hình phong phú hơn:

FLLMInferenceParams Params;
// Simple: URL only - metadata is derived from the filename
LLM->LoadModelFromURLSimple(
TEXT("https://huggingface.co/bartowski/Llama-3.2-1B-Instruct-GGUF/resolve/main/Llama-3.2-1B-Instruct-Q4_K_M.gguf"), Params);
// With full metadata
FLLMModelMetadata Metadata;
Metadata.ModelFamilyName = TEXT("Llama3_2_1B_Instruct");
Metadata.ModelDisplayName = TEXT("Llama 3.2 1B Instruct");
Metadata.Description = TEXT("Meta's Llama 3.2 1B parameter instruction-tuned model. Lightweight and fast, suitable for simple tasks.");
Metadata.ParameterCount = TEXT("1B");
Metadata.Variant.VariantName = TEXT("Q4_K_M");
Metadata.Variant.ModelURL = TEXT("https://huggingface.co/bartowski/Llama-3.2-1B-Instruct-GGUF/resolve/main/Llama-3.2-1B-Instruct-Q4_K_M.gguf");
Metadata.Variant.ApproximateSizeBytes = 776LL * 1024 * 1024;
Metadata.Variant.QuantizationType = ELLMQuantizationType::Q4_K_M;
LLM->LoadModelFromURL(Metadata, Params);
Tải Bất Đồng Bộ (Blueprint)
Để xử lý việc hoàn tất tải và lỗi thông qua các chân đầu ra thay vì tự ràng buộc delegate, có sẵn hai node bất đồng bộ.
Load Model By Name (Async) phản chiếu Load Model (By Name) - trong UE 5.4+, nó hiển thị danh sách thả xuống tất cả các model trên đĩa:
- UE 5.4+
- UE 5.3 trở về trước

Trong UE 5.3 trở về trước, menu thả xuống không xuất hiện. Hãy sử dụng Get All Downloaded Model Metadata, lấy phần tử tại chỉ mục 0 (hoặc bất kỳ mô hình nào bạn cần), truyền nó vào Get Model File Name, sau đó truyền kết quả đó vào Load Model By Name (Async).

Load Model From File (Async) nhận một đường dẫn tệp tuyệt đối thay vào đó:

Ràng buộc Sự kiện
Gắn kết với các delegate của phiên bản LLM để nhận callback. Tất cả callback đều được kích hoạt trên luồng game.
- Blueprint
- C++

Các delegate có sẵn:
- Khi Token Được Tạo: Kích hoạt cho mỗi token đầu ra
- Khi Hoàn Tất Sinh: Kích hoạt khi phản hồi đầy đủ đã sẵn sàng, kèm thời lượng, số lượng token và token mỗi giây
- Khi Prompt Được Xử Lý: Kích hoạt sau khi prompt đầu vào được xử lý, trước khi bắt đầu sinh
- Khi Có Lỗi: Kích hoạt nếu xảy ra lỗi trong bất kỳ thao tác nào
- Khi Model Đã Tải: Kích hoạt khi một model hoàn tất tải
- Khi Model Đã Gỡ Tải: Kích hoạt khi model được gỡ tải
- Khi Tiến Trình Tải Xuống: Kích hoạt định kỳ trong quá trình tải model (phần trăm tiến trình, số byte đã nhận, tổng số byte)
- Khi Model Đã Tải Xuống: Kích hoạt khi một thao tác chỉ tải xuống hoàn tất
- Khi Hội Thoại Đã Lưu: Kích hoạt khi một hội thoại đã được ghi vào tệp JSON
- Khi Hội Thoại Đã Tải: Kích hoạt khi một hội thoại đã được tải từ tệp hoặc ảnh chụp bộ nhớ
- Khi Lịch Sử Đã Tóm Tắt: Kích hoạt khi tính năng tự động tóm tắt nén các tin nhắn cũ hơn (báo cáo số lượng tin nhắn, số token đã tiết kiệm và bản tóm tắt)
LLM->OnTokenGeneratedNative.AddLambda([](const FString& Token)
{
});
LLM->OnGenerationCompleteNative.AddLambda(
[](const FString& FullResponse, float DurationSeconds, int32 TokensGenerated, float TokensPerSecond)
{
});
LLM->OnPromptProcessedNative.AddLambda([](int32 TokensProcessed, float TokensPerSecond)
{
});
LLM->OnErrorNative.AddLambda([](ELLMErrorCode ErrorCode)
{
});
LLM->OnModelLoadedNative.AddLambda([](const FLLMModelMetadata& ModelMetadata)
{
});
LLM->OnModelUnloadedNative.AddLambda([]()
{
});
LLM->OnDownloadProgressNative.AddLambda([](float Progress, int64 BytesReceived, int64 TotalBytes)
{
});
LLM->OnModelDownloadedNative.AddLambda([](const FString& FilePath, const FLLMModelMetadata& ModelMetadata)
{
});
LLM->OnConversationSavedNative.AddLambda([](const FString& FilePath)
{
});
LLM->OnConversationLoadedNative.AddLambda([](const FLLMConversationSnapshot& Snapshot)
{
});
LLM->OnHistorySummarizedNative.AddLambda([](int32 MessagesRemoved, int32 TokensSaved, const FString& Summary)
{
});
Gửi Tin Nhắn
Khi một mô hình đã được tải, hãy gửi một tin nhắn người dùng để tạo phản hồi:
- Blueprint
- C++

Để ghi đè lời nhắc hệ thống cho một tin nhắn cụ thể, hãy sử dụng Send Message With System Prompt:

LLM->SendMessage(TEXT("Tell me a short story about a brave knight."));
// With a custom system prompt override
LLM->SendMessageWithSystemPrompt(
TEXT("Translate this to French: Hello world"),
TEXT("You are a professional translator.")
);
Các token được truyền qua OnTokenGenerated khi chúng được tạo ra. Khi quá trình tạo hoàn tất, OnGenerationComplete sẽ kích hoạt với phản hồi đầy đủ, thời lượng, số lượng token và số token mỗi giây.
Gửi Tin Nhắn Bất Đồng Bộ (Blueprint)
Nút Send LLM Message (Async) cung cấp các chân đầu ra chuyên dụng cho token, kết quả hoàn thành và lỗi.

Tải mô hình khi chạy
Ngoài luồng tải xuống và tải lên được mô tả ở trên, bạn có thể tải một mô hình xuống đĩa mà không cần tải nó. Điều này hữu ích cho việc lưu trước các mô hình trong màn hình tải hoặc menu cài đặt.
- Blueprint
- C++

Một biến thể chỉ có URL cũng có sẵn:

Nút Download LLM Model (Async) và Download LLM Model From URL (Async) cung cấp các chân đầu ra cho tiến trình, hoàn thành và lỗi:

// With full metadata
FLLMModelMetadata Metadata;
Metadata.ModelFamilyName = TEXT("Llama3_2_1B_Instruct");
Metadata.ModelDisplayName = TEXT("Llama 3.2 1B Instruct");
Metadata.Description = TEXT("Meta's Llama 3.2 1B parameter instruction-tuned model. Lightweight and fast, suitable for simple tasks.");
Metadata.ParameterCount = TEXT("1B");
Metadata.Variant.VariantName = TEXT("Q4_K_M");
Metadata.Variant.ModelURL = TEXT("https://huggingface.co/bartowski/Llama-3.2-1B-Instruct-GGUF/resolve/main/Llama-3.2-1B-Instruct-Q4_K_M.gguf");
Metadata.Variant.ApproximateSizeBytes = 776LL * 1024 * 1024;
Metadata.Variant.QuantizationType = ELLMQuantizationType::Q4_K_M;
LLM->DownloadModel(Metadata);
// URL only
LLM->DownloadModelFromURL(
TEXT("https://huggingface.co/bartowski/Llama-3.2-1B-Instruct-GGUF/resolve/main/Llama-3.2-1B-Instruct-Q4_K_M.gguf"));
Ủy quyền OnDownloadProgress báo cáo tiến trình trong quá trình tải xuống. OnModelDownloaded được kích hoạt khi tệp được lưu vào đĩa.
Để hủy một quá trình tải xuống đang diễn ra:
- Blueprint
- C++

LLM->CancelDownload();
Plugin tự động ngăn chặn việc tải xuống trùng lặp - nếu một quá trình tải xuống cho cùng một mô hình đang diễn ra, các yêu cầu tiếp theo sẽ bị bỏ qua.
Dừng tạo
Để ngắt một quá trình tạo đang diễn ra:
- Blueprint
- C++

LLM->StopGeneration();
Đặt lại Ngữ cảnh Hội thoại
Xóa lịch sử hội thoại để bắt đầu một cuộc trò chuyện mới:
- Blueprint
- C++

// Keep the system prompt
LLM->ResetContext(true);
// Clear everything including the system prompt
LLM->ResetContext(false);
Lưu và Tải Lại Cuộc Hội Thoại
Plugin có thể lưu trữ lịch sử hội thoại vào đĩa dưới dạng JSON hoặc giữ nó trong bộ nhớ như một ảnh chụp nhanh. Theo mặc định, prompt hệ thống được loại trừ khỏi các lần lưu, do đó cùng một lịch sử hội thoại có thể được tải vào các phiên bản LLM khác nhau với các quy tắc hệ thống khác nhau. Điều này hữu ích cho các kịch bản nhiều NPC, nơi mỗi nhân vật có bộ nhớ riêng nhưng có thể chia sẻ hoặc khác biệt trong các hướng dẫn hệ thống của chúng.
Lưu vào Tệp
Lưu cuộc trò chuyện hiện tại vào một tệp JSON trên đĩa:
- Blueprint
- C++

Tham số Include System Prompt kiểm soát việc có ghi thông báo hệ thống (nếu có) vào tệp hay không. Mặc định là false để đảm bảo tính tương thích giữa các NPC.
On Conversation Saved được kích hoạt khi tệp được ghi.
// Excludes system prompt by default
LLM->SaveConversationToFile(TEXT("/path/to/conversation.json"));
// Include the system prompt in the file
LLM->SaveConversationToFile(TEXT("/path/to/conversation.json"), /*bIncludeSystemPrompt=*/ true);
Tải từ Tệp
Tải lại một cuộc hội thoại từ tệp JSON:
- Blueprint
- C++

Tham số Preserve Current System Prompt (mặc định là true) giữ nguyên lời nhắc hệ thống hiện tại trong khi hoán đổi lịch sử hội thoại đã lưu. Đây là cài đặt được khuyến nghị cho việc hoán đổi bộ nhớ NPC.
On Conversation Loaded kích hoạt cùng với snapshot đã được tải.
// Keep current system prompt, swap in the saved history
LLM->LoadConversationFromFile(TEXT("/path/to/conversation.json"));
// Replace the system prompt with whatever's in the file
LLM->LoadConversationFromFile(TEXT("/path/to/conversation.json"), /*bPreserveCurrentSystemPrompt=*/ false);
Ảnh chụp trong bộ nhớ (Quy trình làm việc đa NPC)
Để chuyển đổi NPC nhanh trong khi chơi, hãy chụp nhanh cuộc hội thoại hiện tại vào bộ nhớ thay vì ghi ra đĩa. Mô hình này là cách được khuyến nghị để quản lý nhiều NPC dùng chung một mô hình đã tải:
- Blueprint
- C++
Mô hình nhiều NPC điển hình sử dụng Bản đồ Tên → Ảnh chụp Hội thoại LLM trên trình quản lý NPC hoặc trạng thái trò chơi của bạn:
- Khi chuyển khỏi một NPC: gọi
Save Conversation To Memory, sau đó trongOn Conversation Loaded(cũng được kích hoạt khi gửi snapshot), lưu snapshot vào map của bạn với khóa là tên NPC. - Khi chuyển sang một NPC khác: đọc snapshot từ map của bạn và gọi
Load Conversation From Memoryvới tùy chọnPreserve Current System Promptđược bật.

Vì system prompt vẫn được tải qua các lần hoán đổi, "tính cách" của mỗi NPC có thể được mã hóa trong system prompt riêng cho từng NPC (gọi Send Message With System Prompt một lần sau khi hoán đổi để cập nhật) hoặc được chia sẻ cho tất cả các NPC.
// Maintain per-NPC snapshots
UPROPERTY()
TMap<FName, FLLMConversationSnapshot> NPCMemories;
// Save the currently active NPC's memory before switching
LLM->OnConversationLoadedNative.AddLambda([this](const FLLMConversationSnapshot& Snapshot)
{
NPCMemories.Add(CurrentNPC, Snapshot);
});
LLM->SaveConversationToMemory();
// Activate another NPC's memory
if (const FLLMConversationSnapshot* Found = NPCMemories.Find(NextNPC))
{
LLM->LoadConversationFromMemory(*Found, /*bPreserveCurrentSystemPrompt=*/ true);
CurrentNPC = NextNPC;
}
Snapshot (ảnh chụp nhanh) không phụ thuộc vào mô hình - chúng lưu trữ tin nhắn, không phải trạng thái bộ nhớ đệm KV. Cùng một snapshot có thể được tải vào một mô hình khác (mặc dù phong cách hội thoại có thể thay đổi). Trường OriginModelFamilyName trên snapshot cho phép bạn kiểm tra mô hình nào đã tạo ra nó, nếu bạn muốn thực thi tính tương thích.
Tự động Tóm tắt Ngữ cảnh
Các cuộc trò chuyện dài cuối cùng sẽ vượt quá cửa sổ ngữ cảnh của mô hình, điều này thông thường sẽ cắt bớt lịch sử hoặc gây ra lỗi. Tính năng tự động tóm tắt của plugin giám sát việc sử dụng ngữ cảnh và khi vượt quá ngưỡng đã cấu hình, nó sẽ tóm tắt các tin nhắn cũ hơn thành một tin nhắn "bộ nhớ" duy nhất trước khi tạo phản hồi tiếp theo. Điều này giúp giữ chi phí token và độ trễ ổn định trong suốt các cuộc trò chuyện dài vô hạn.
Việc tóm tắt được thực hiện bởi cùng một mô hình đã tải, do đó không cần mô hình thứ hai hay lệnh gọi API nào khác.
Bật Tự động Tóm tắt
- Blueprint
- C++

Sử dụng Get Default Summarization Config để có các thiết lập mặc định hợp lý, sau đó điều chỉnh khi cần thiết:

FLLMSummarizationConfig Config = URuntimeLocalLLM::GetDefaultSummarizationConfig();
Config.TriggerTokenThreshold = 1500;
Config.KeepRecentMessageCount = 4;
Config.MinMessagesToSummarize = 6;
LLM->EnableAutoSummarization(Config);
Khi được bật, tính năng tóm tắt sẽ tự động chạy trước mỗi lần gọi SendMessage khi cần, không yêu cầu thao tác thêm nào.
Theo mặc định, tính năng tự động tóm tắt chạy trước khi một tin nhắn mới được xử lý, vì nó cần xây dựng lại ngữ cảnh, điều không thể thực hiện an toàn cùng lúc với việc tạo phản hồi. Nếu bạn muốn nó chạy sau khi có phản hồi, trong khi người chơi đang đọc và nhập, hãy tắt tự động tóm tắt và điều khiển thủ công: liên kết với On Generation Complete, kiểm tra Get Used Context Length so với ngưỡng của bạn, và gọi Summarize Now nếu vượt quá. Vì Summarize Now xếp hàng đợi trên cùng một hàng đợi tác vụ nền, nó sẽ chạy ngay sau khi phản hồi kết thúc và trước khi tin nhắn tiếp theo được xử lý.
Tài liệu tham khảo cấu hình
| Tham số | Type | Mặc định | Mô tả |
|---|---|---|---|
| Ngưỡng Token Kích Hoạt | int32 | 1500 | Tóm tắt sẽ chạy khi số token ngữ cảnh được sử dụng vượt quá giá trị này. Đặt giá trị này tương đối với Kích thước Ngữ cảnh của bạn, khoảng 60-75% là một nguyên tắc tốt. |
| Giữ Số Lượng Tin Nhắn Gần Đây | int32 | 4 | N tin nhắn gần đây nhất không bao giờ bị tóm tắt, giúp duy trì sự mạch lạc ngay lập tức trong hội thoại. |
| Số Tin Nhắn Tối Thiểu Để Tóm Tắt | int32 | 6 | Bỏ qua tóm tắt nếu số lượng tin nhắn cũ hơn đủ điều kiện ít hơn mức này (tránh tóm tắt nhỏ vô ích) |
| Token Tóm Tắt Tối Đa | int32 | 256 | Số token tối đa của bản tóm tắt được tạo ra |
| Bảo toàn Prompt Hệ Thống | bool | true | Luôn giữ nguyên thông điệp hệ thống (chỉ mục 0). |
| Hướng dẫn Tóm tắt | FString | (see default) | Hướng dẫn gửi đến mô hình để tạo bản tóm tắt |
| Tiền tố tin nhắn tóm tắt | FString | "[Tóm tắt bộ nhớ dài hạn của cuộc trò chuyện trước đó]: " | Được thêm vào đầu bản tóm tắt đã tạo khi nó được chèn vào cuộc trò chuyện dưới dạng tin nhắn bộ nhớ có vai trò trợ lý. |
Kích hoạt Thủ công và Lắng nghe Tóm tắt
Bạn có thể kích hoạt tính năng tóm tắt thủ công bất kỳ lúc nào, bất kể ngưỡng quy định.
- Blueprint
- C++

Liên kết với On History Summarized để được thông báo khi một lượt tóm tắt hoàn tất. Sự kiện này báo cáo số lượng tin nhắn đã bị xóa, số lượng token đã được tiết kiệm và văn bản tóm tắt được tạo ra, hữu ích để hiển thị một chỉ báo tinh tế trong giao diện trò chuyện:

LLM->SummarizeNow();
LLM->OnHistorySummarizedNative.AddLambda(
[](int32 MessagesRemoved, int32 TokensSaved, const FString& Summary)
{
UE_LOG(LogTemp, Log, TEXT("Summarized %d messages, saved %d tokens"), MessagesRemoved, TokensSaved);
});
Truy vấn độ dài ngữ cảnh đã sử dụng
Sử dụng Get Used Context Length để kiểm tra số lượng token hiện đang chiếm trong cửa sổ ngữ cảnh của mô hình. Đây là giá trị tương tự mà cơ chế tự động tóm tắt tích hợp sẵn kiểm tra với Trigger Token Threshold.
- Blueprint
- C++

LLM->GetUsedContextLengthNative([](int32 UsedTokens)
{
UE_LOG(LogTemp, Log, TEXT("Used context: %d tokens"), UsedTokens);
});
Tắt tính năng Tự động Tóm tắt
- Blueprint
- C++

LLM->DisableAutoSummarization();
Việc tắt tính năng này sẽ không hoàn tác các bản tóm tắt đã được áp dụng cho cuộc trò chuyện.
Việc tóm tắt mất một chút thời gian để chạy trên luồng nền (mô hình đang tạo bản tóm tắt). Các callback luồng token bị tạm ngưng trong quá trình tạo nội bộ này để chúng không xuất hiện trong giao diện trò chuyện của bạn. On History Summarized được kích hoạt một khi quá trình ghép nối hoàn tất.
Dỡ một Mô hình
Giải phóng tài nguyên khi một mô hình không còn cần thiết:
- Blueprint
- C++

LLM->UnloadModel();
Trạng thái truy vấn
Kiểm tra trạng thái hiện tại của phiên bản LLM:
- Blueprint
- C++

- Đã tải mô hình: True nếu mô hình đã sẵn sàng để suy luận
- Đang tạo sinh: True nếu quá trình tạo sinh đang diễn ra
- Đang bận: True nếu bất kỳ thao tác nào (tải, tạo sinh, tải xuống) đang hoạt động
- Đang tải xuống: True nếu quá trình tải xuống mô hình đang diễn ra
- Lấy siêu dữ liệu mô hình đã tải: Trả về siêu dữ liệu của mô hình hiện tại
- Lấy tham số suy luận đã áp dụng: Trả về các tham số được áp dụng khi tải
// Is Model Loaded - true if a model is ready for inference
if (LLM->IsModelLoaded())
{
FLLMModelMetadata Metadata = LLM->GetLoadedModelMetadata();
UE_LOG(LogTemp, Log, TEXT("Model: %s"), *Metadata.ModelDisplayName);
FLLMInferenceParams Params = LLM->GetAppliedInferenceParams();
UE_LOG(LogTemp, Log, TEXT("Context size: %d"), Params.ContextSize);
}
// Is Generating - true if token generation is currently active
if (LLM->IsGenerating())
{
UE_LOG(LogTemp, Log, TEXT("Generation in progress..."));
}
// Is Busy - true if any operation (loading, generating, downloading) is active
if (LLM->IsBusy())
{
UE_LOG(LogTemp, Log, TEXT("LLM is busy, deferring request"));
}
// Is Downloading - true if a model download is currently in progress
if (LLM->IsDownloading())
{
UE_LOG(LogTemp, Log, TEXT("Model download in progress..."));
}
// Safe to send a new message or load a different model
if (!LLM->IsGenerating() && !LLM->IsBusy())
{
UE_LOG(LogTemp, Log, TEXT("LLM is idle and ready"));
}
Chức năng Thư viện Mô hình
Một tập hợp các hàm tiện ích tĩnh được cung cấp để quản lý các tệp mô hình trên đĩa. Các hàm này hữu ích cho việc xây dựng giao diện người dùng chọn mô hình hoặc kiểm tra tính khả dụng của mô hình trong thời gian chạy.
Lấy Tên / Siêu Dữ Liệu của Mô Hình Đã Tải Xuống
- Blueprint
- C++


TArray<FName> ModelNames = URuntimeLLMLibrary::GetDownloadedModelNames();
TArray<FLLMModelMetadata> AllModels = URuntimeLLMLibrary::GetAllDownloadedModelMetadata();
for (const FLLMModelMetadata& Model : AllModels)
{
UE_LOG(LogTemp, Log, TEXT("Model: %s (%s)"), *Model.ModelDisplayName, *Model.Variant.VariantName);
}
Kiểm tra xem một Model có trên ổ đĩa hay không
- Blueprint
- C++

bool bExists = URuntimeLLMLibrary::IsModelOnDisk(Metadata);
Lấy Đường Dẫn Tệp Mô Hình
- Blueprint
- C++

FString FilePath = URuntimeLLMLibrary::GetModelFilePath(Metadata);
Xóa tệp mô hình
- Blueprint
- C++

bool bDeleted = URuntimeLLMLibrary::DeleteModelFiles(Metadata);
Lấy các Mô hình Đã được Xác định trước và Có sẵn
- Blueprint
- C++


// Built-in catalog only
TArray<FLLMModelFamily> Predefined = URuntimeLLMLibrary::GetPredefinedModels();
// Catalog + custom imports
TArray<FLLMModelFamily> All = URuntimeLLMLibrary::GetAllAvailableModels();
Xây dựng Metadata từ một URL
Xây dựng siêu dữ liệu mô hình từ URL thô (các trường được suy ra từ tên tệp):
- Blueprint
- C++

FLLMModelMetadata Metadata = URuntimeLocalLLM::MakeMetadataFromURL(
TEXT("https://huggingface.co/bartowski/Llama-3.2-1B-Instruct-GGUF/resolve/main/Llama-3.2-1B-Instruct-Q4_K_M.gguf")
);
Các Hàm Tiện Ích
Một bộ các hàm trợ giúp được cung cấp để định dạng và hiển thị lỗi.
Chuỗi Bytes thành Chuỗi Có Thể Đọc
Chuyển đổi số byte thành chuỗi có thể đọc được (ví dụ: "4.07 GB"). Hữu ích để hiển thị kích thước mô hình trong giao diện người dùng.

Định dạng Tiến trình Tải xuống
Định dạng chuỗi tiến trình tải xuống như "1.23 GB / 4.07 GB (30.2%)". Nếu tổng dung lượng không xác định, chỉ trả về dung lượng đã nhận được.

Lấy Mô tả Lỗi / Chuỗi Mã Lỗi
Get LLM Error Description trả về mô tả văn bản dễ đọc cho mã lỗi. Get LLM Error Code String trả về tên giá trị enum dưới dạng chuỗi (hữu ích cho việc ghi log).

Tài liệu Tham khảo Mã Lỗi
| Code | Giá trị | Mô tả |
|---|---|---|
| Không xác định | 0 | Một lỗi không xác định |
| ModelLoadFailed | 10 | Tệp GGUF không thể tải được (tệp bị hỏng, định dạng không tương thích, v.v.) |
| ContextCreateFailed | 11 | Không thể tạo ngữ cảnh suy luận. |
| ModelNotLoaded | 20 | Đã thử suy luận nhưng không có mô hình nào được tải. |
| ChatTemplateFailed | 21 | Mẫu chat của mô hình không thể áp dụng. |
| TokenizationFailed | 22 | Đầu vào văn bản không thể được mã hóa. |
| ContextOverflow | 23 | Lời nhắc + ngữ cảnh vượt quá kích thước ngữ cảnh đã cấu hình. |
| PromptDecodeFailed | 24 | Các token prompt không thể giải mã được. |
| ContextTooFullToGenerate | 25 | Không đủ không gian ngữ cảnh để tạo đầu ra. |
| GenerationDecodeFailed | 30 | Một token không thể giải mã trong quá trình sinh. |
| GenerationTruncated | 31 | Quá trình tạo bị dừng lại vì đã đạt đến giới hạn token tối đa. |
| LLMInstanceNull | 40 | Phiên bản LLM bị null hoặc không hợp lệ. |
| ModelNotFoundOnDisk | 41 | Tệp mô hình không tồn tại tại đường dẫn mong đợi. |
| ModelURLEmpty | 42 | Yêu cầu tải xuống với URL trống. |
| ModelDownloadCancelled | 43 | Tải xuống đã bị hủy. |
| ModelDownloadEmptyData | 44 | Tải xuống hoàn tất nhưng nội dung phản hồi trống rỗng. |
| ModelDownloadSaveFailed | 45 | Tải xuống hoàn tất nhưng không thể lưu tệp vào đĩa. |