LLM for Unity 支援在 Unity 引擎中無縫整合大型語言模型 (LLM)。
它允許創建智慧角色,玩家可以與之互動以獲得身臨其境的體驗。
該軟體包還具有檢索增強生成(RAG)系統,允許跨數據執行語義搜索,這可用於增強角色的知識。 LLM for Unity 建構於出色的 llama.cpp 庫之上。
概覽 • 如何協助 • 使用 LLM for Unity 的遊戲 • 設定 • 如何使用 • RAG • LLM 模型管理 • 範例 • 選項 • 許可證
跨平台! Windows、Linux、macOS 和 Android
?在本地運行,無需訪問互聯網。任何數據都不會離開遊戲!
⚡ CPU 和 GPU 上的極速推理(Nvidia、AMD、Apple Metal)
?支援所有主要的LLM模型
?易於設置,只需一行程式碼即可調用
?免費用於個人和商業目的
?在 Unity 上測試:2021 LTS、2022 LTS、2023
?即將發布的版本
為儲存庫加註星標,給我們留下評論並傳播有關該項目的資訊!
加入 Discord 並打個招呼。
透過提交功能請求、錯誤甚至您自己的 PR 來做出貢獻。
這項工作可以實現更酷的功能!
口頭判決
I,聊天機器人:AISYLUM
無名虛空之魂
過道謀殺案4
挑剔的食品配送人工智慧
AI情感女友
結案
聯絡我們新增您的項目!
方法一:使用資源商店安裝
開啟 LLM for Unity 資產頁面並點擊Add to My Assets
在 Unity 中開啟套件管理器: Window > Package Manager
從下拉清單中選擇Packages: My Assets
選項
選擇LLM for Unity
包,按一下Download
,然後按一下Import
方法 2:使用 GitHub 儲存庫安裝:
在 Unity 中開啟套件管理器: Window > Package Manager
點擊+
按鈕並選擇Add package from git URL
使用儲存庫 URL https://github.com/undreamai/LLMUnity.git
並點擊Add
首先,您將為您的遊戲設定 LLM ?
創建一個空的遊戲物件。
在 GameObject Inspector 中點選Add Component
並選擇 LLM 腳本。
使用Download Model
按鈕 (~GB) 下載預設模型之一。
或使用Load model
按鈕載入您自己的 .gguf 模型(請參閱 LLM 模型管理)。
然後你可以如下設定每個角色?
為角色創建一個空的遊戲物件。
在 GameObject Inspector 中點選Add Component
並選擇 LLMCharacter 腳本。
在Prompt
中定義 AI 的角色。您可以定義AI的名稱( AI Name
)和玩家( Player Name
)。
(可選)如果您有多個 LLM 遊戲對象,請在LLM
欄位中選擇上面建立的 LLM。
您也可以根據您的喜好調整法學碩士和角色設定(請參閱選項)。
在您的腳本中,您可以如下使用它?
使用LLMUnity;公共類別MyScript { 公共LLMCharacter llmCharacter; void HandleReply(stringreply){// 對 modelDebug.Log(reply) 的回覆執行一些操作; } void Game(){// 你的遊戲函數...string message = "Hello bot!";_ = llmCharacter.Chat(message, HandleReply);... }}
您也可以指定模型回覆完成時要呼叫的函數。
如果啟用了Stream
選項以實現模型的連續輸出(預設行為),這非常有用:
void ReplyCompleted(){// 當模型的回應完成時執行某些操作Debug.Log("The AI returned"); } void Game(){// 你的遊戲函數...string message = "Hello bot!";_ = llmCharacter.Chat(message, HandleReply, ReplyCompleted);... }
要停止聊天而不等待其完成,您可以使用:
llmCharacter.CancelRequests();
最後,在腳本的 GameObject 的檢查器中,選擇上面建立的 LLMCharacter GameObject 作為 llmCharacter 屬性。
這就是全部✨!
您也可以:
要建立 Android 應用程序,您需要在播放器設定中指定IL2CPP
腳本後端和ARM64
作為目標架構。
可以從Player > Other Settings
部分中的Edit > Project Settings
選單存取這些設定。
在 LLM 遊戲物件中啟用Download on Build
選項以在啟動時下載模型也是一個好主意,以保持應用程式較小的大小。
若要自動儲存/載入您的聊天歷史記錄,您可以將 LLMCharacter 的Save
參數指定為您選擇的檔案名稱(或相對路徑)。檔案保存在Unity的perpeterDataPath資料夾中。這也保存了 LLM 的狀態,這意味著先前快取的提示不需要重新計算。
若要手動儲存聊天記錄,您可以使用:
llmCharacter.Save("檔名");
並載入歷史記錄:
llmCharacter.Load("檔案名稱");
其中 filename 您選擇的檔案名稱或相對路徑。
void WarmupCompleted(){// 預熱完成時執行某些操作Debug.Log("The AI is Nice and Ready"); } void Game(){// 你的遊戲函式..._ = llmCharacter.Warmup(WarmupCompleted);... }
Chat
函數的最後一個參數是一個布林值,指定是否將訊息新增到歷史記錄中(預設值:true):
void Game(){// 你的遊戲函數...string message = "Hello bot!";_ = llmCharacter.Chat(message, HandleReply, ReplyCompleted, false);... }
void Game(){// 你的遊戲函數...string message = "The cat is away";_ = llmCharacter.Complete(message, HandleReply, ReplyCompleted);... }
為此,您可以使用async
/ await
功能:
async void Game(){// 你的遊戲函數...string message = "Hello bot!";stringreply = wait llmCharacter.Chat(message, HandleReply, ReplyCompleted);Debug.Log(reply);... }
using UnityEngine;using LLMUnity;public class MyScript : MonoBehaviour{LLM llm;LLMCharacter llmCharacter;async void Start(){// 停用gameObject,以便不會立即呼叫theAwakegameObject.SetActive(false); . AddComponent<LLM>();//使用模型的檔案名稱設定模型。 StreamingAssets 資料夾中。 .AddLora("my-lora.gguf");llm.SetLoraWeight(0.5f);//可選:如果沒有正確識別,可以設定該模特兒的聊天範本//可以找到聊天清單ChatTemplate.templates.Keysllm.SetTemplate ("phi-3") 中的模板;// 可選:設定線程數llm.numThreads = -1;// 可選:透過設定要卸載到itllm 的模型層數來啟用GPU。 / 新增LLMCharacter物件llmCharacter = gameObject.AddComponent<LLMCharacter>();//設定處理模型的LLM物件llmCharacter.llm = llm;//設定角色提示llmCharacter.SetPrompt("好奇者之間的聊天人類和人工智慧助理助理。 ;// 可選:設定儲存路徑// llmCharacter.save = "AICharacter1";// 可選:啟用儲存快取以避免載入儲存檔案時重新計算(需要~100 MB)// llmCharacter .saveCache = true;/ / 可選:設定語法//等待llmCharacter.SetGrammar("json.gbnf");// 重新啟用gameObjectgameObject.SetActive(true);}}
您可以使用遠端伺服器來執行處理並實現與其互動的角色。
創建伺服器
建立伺服器:
如上所述,使用LLM
腳本建立帶有 GameObject 的項目
啟用LLM
的Remote
選項並可選擇設定伺服器參數:連接埠、API 金鑰、SSL 憑證、SSL 金鑰
建置並運行以啟動伺服器
或者,您可以使用伺服器二進位來更輕鬆地部署:
從編輯器運行上述場景並從偵錯訊息複製命令(以“伺服器命令:”開頭)
下載伺服器二進位檔案和 DLL 並將它們解壓縮到同一資料夾中
從上面的資料夾中找到您感興趣的架構,例如對於 Windows 和 CUDA 使用windows-cuda-cu12.2.0
。
您也可以從偵錯訊息中檢查適用於您的系統的體系結構(從「使用體系結構」開始)。
從命令列將目錄變更為所選的體系結構資料夾,並透過執行從上面複製的命令來啟動伺服器。
創建角色
如上所述,使用LLMCharacter
腳本建立包含遊戲角色的第二個專案。啟用Remote
選項並使用伺服器的 IP 位址(以「http://」開頭)和連接埠配置主機。
Embeddings
函數可用於取得短語的嵌入:
List<float> embeddings = wait llmCharacter.Embeddings("嗨,你好嗎?");
有關功能等級的詳細文件可以在這裡找到:
Unity 法學碩士透過檢索增強生成 (RAG) 系統實現超快速相似性搜尋功能。
它基於 LLM 功能和 usearch 庫中的近似最近鄰 (ANN) 搜尋。
語意搜尋的工作原理如下。
建立資料您提供文字輸入(短語、段落、文件)以新增至資料中。
每個輸入都被分成區塊(可選)並使用 LLM 編碼為嵌入。
搜尋然後您可以搜尋查詢文字輸入。
輸入再次被編碼,並且檢索資料中最相似的文字輸入或區塊。
要使用語義搜尋:
如上所述,為 LLM 建立一個遊戲物件。下載提供的 RAG 模型之一或加載您自己的模型(可以在 MTEB 排行榜上找到不錯的選擇)。
創建一個空的遊戲物件。在 GameObject Inspector 中點選Add Component
並選擇RAG
腳本。
在 RAG 的「搜尋類型」下拉清單中,選擇您的首選搜尋方法。 SimpleSearch
是一種簡單的強力搜索,而DBSearch
是一種快速的 ANN 方法,在大多數情況下應該是首選。
在 RAG 的分塊類型下拉清單中,您可以選擇將輸入拆分為區塊的方法。這對於在每個數據部分中具有更一致的含義很有用。提供了根據標記、單字和句子進行分割的分塊方法。
或者,您可以從程式碼建立 RAG(其中 llm 是您的 LLM):
RAG rag = gameObject.AddComponent<RAG>(); rag.Init(SearchMethods.DBSearch, ChunkingMethods.SentenceSplitter, llm);
在您的腳本中,您可以如下使用它?
使用 LLMUnity;公共類別 MyScript : MonoBehaviour{ RAG 抹布; async void Game(){...string[] input = new string[]{ "嗨!我是搜尋系統。", "天氣很好。我喜歡它。", "我是 RAG 系統"};//將輸入加入RAGforeach(輸入中的字串輸入)等待rag.Add(input);// 取得2 個最相似的輸入及其與搜尋查詢的距離(相異性)(string[] results, float [] distances) = wait rag.Search("hello!", 2);// 要取得最相似的文字部分(chnuks),您可以啟用returnChunks 選項rag.ReturnChunks(true);(results, distances) = wait rag .搜尋("你好!", 2);... }}
您可以儲存 RAG 狀態(儲存在Assets/StreamingAssets
資料夾中):
rag.Save("rag.zip");
並從磁碟加載它:
等待 rag.Load("rag.zip");
您可以使用 RAG 根據使用者訊息將相關資料提供給 LLM:
string message = "天氣怎麼樣?"; (string[] 相似短語, float[] 距離) = wait rag.Search(message, 3); string Prompt = "根據提供的資料回答使用者查詢.nn"; 提示 += $"使用者查詢:{message}nn"; 提示 += $"數據:n"; foreach(相似短語中的字串相似短語)提示+ = $“n- {similarPhrase}”; _ = llmCharacter.Chat(提示、HandleReply、ReplyCompleted);
RAG
範例包括範例 RAG 實作以及範例 RAG-LLM 整合。
這就是全部✨!
Unity 的 LLM 使用模型管理器,允許載入或下載 LLM 並將其直接發送到您的遊戲中。
模型管理器可以作為 LLM GameObject 的一部分找到:
您可以使用Download model
按鈕下載模型。
LLM for Unity 包括針對不同模型大小內建的不同最先進模型,並使用 Q4_K_M 方法進行量化。
可以從 HuggingFace 下載 .gguf 格式的替代模型。
您可以將模型下載到本機並使用Load model
按鈕加載,也可以複製Download model > Custom URL
欄位中的 URL 直接下載。
如果HuggingFace模型不提供gguf文件,可以使用此線上轉換器將其轉換為gguf。
用於建構提示的聊天範本是根據模型(如果存在相關條目)或模型名稱自動決定的。
如果識別不正確,您可以從聊天模板下拉清單中選擇另一個模板。
在模型管理器中新增的模型會在建置過程中複製到遊戲中。
您可以取消選擇“建置”複選框來忽略建置模型。
要刪除模型(但不從磁碟中刪除它),您可以單擊 bin 按鈕。
每個新增的模型的路徑和 URL(如果已下載)顯示在模型管理器存取的擴充視圖中,使用>>
按鈕:
您可以透過選擇Download on Build
選項來建立更輕的建置。
使用此選項,模型將在遊戲第一次啟動時下載,而不是在構建中複製。
如果您已在本機載入模型,則需要透過展開的視圖設定其 URL,否則它將在建置中複製。
❕ 在使用任何型號之前,請確保檢查其許可證❕
Samples~ 資料夾包含幾個互動範例?
SimpleInteraction:示範與 AI 角色的簡單交互
MultipleCharacters:演示使用多個 AI 角色的簡單交互
RAG:RAG 樣本。包括使用 RAG 向 LLM 提供資訊的範例
ChatBot:透過類似於訊息傳遞應用程式的 UI 來展示玩家和 AI 之間的互動(見下圖)
KnowledgeBaseGame:使用知識庫為基於 google/mysteryof Threebots 的 LLM 提供資訊的簡單偵探遊戲
AndroidDemo:範例 Android 應用程序,帶有包含模型下載進度的初始螢幕
要安裝範例:
開啟套件管理器: Window > Package Manager
選擇LLM for Unity
。在Samples
標籤中,按一下要安裝的範例旁邊的Import
。
這些範例可以使用它們包含在資料夾內的Scene.unity
場景來運行。
在場景中,選擇LLM
GameObject並點擊Download Model
按鈕下載預設模型或Load model
以載入您自己的模型(請參閱LLM模型管理)。
儲存場景,奔跑並享受吧!
Show/Hide Advanced Options
Log Level
選擇日誌訊息的詳細程度
Use extras
選擇安裝並允許使用額外功能(閃光注意力和 IQ 量化)
Remote
選擇以提供對 LLM 的遠端存取
Port
運行LLM伺服器的連接埠(如果設定了Remote
)
Num Threads
要使用的執行緒數(預設值:-1 = 全部)
Num GPU Layers
要卸載到 GPU 的模型層數。如果設定為 0,則不使用 GPU。使用較大的數字(即 >30)以盡可能多地利用 GPU。請注意,上下文大小的值越高,將使用更多的 VRAM。如果不支援用戶的GPU,LLM將回退到CPU
Debug
選擇以在 Unity 編輯器中記錄模型的輸出
例如,將所有 LLMCharacter 物件的Parallel Prompts
設為 1 並將插槽設為 0 將使用完整上下文,但每當使用 LLMCharacter 物件進行聊天時,都需要計算整個提示(無快取)。
Dont Destroy On Load
選擇載入新場景時不銷毀 LLM 遊戲對象
Parallel Prompts
可以並行發生的提示/槽的數量(預設值:-1 = LLMCharacter 物件的數量)。請注意,上下文大小是在槽之間劃分的。API key
用於允許存取來自 LLMCharacter 物件的請求的 API 金鑰(如果設定了Remote
)
Load SSL certificate
允許載入 SSL 憑證以對請求進行端對端加密(如果設定了Remote
)。還需要 SSL 金鑰。
Load SSL key
允許載入 SSL 金鑰以對請求進行端對端加密(如果設定了Remote
)。還需要 SSL 憑證。
SSL certificate path
用於要求的端對端加密的 SSL 憑證(如果設定了Remote
)。
SSL key path
用於請求的端對端加密的 SSL 金鑰(如果設定了Remote
)。
Download model
點擊下載預設模型之一
Load model
點擊以 .gguf 格式載入您自己的模型
Download on Start
允許在遊戲第一次啟動時下載 LLM 模型。或者,LLM 模型將直接在建置中複製
Context Size
提示上下文的大小(0 = 模型的上下文大小) Download lora
點擊下載.gguf 格式的 LoRA 模型
Load lora
點擊載入.gguf 格式的LoRA 模型
Batch Size
用於提示處理的批次大小(預設值:512)
Model
正在使用的模型的路徑(相對於 Assets/StreamingAssets 資料夾)
Chat Template
用於 LLM 的聊天模板
Lora
正在使用的 LoRA 的路徑(相對於 Assets/StreamingAssets 資料夾)
Lora Weights
正在使用的 LoRA 的權重
Flash Attention
按一下可在模型中使用 Flash Attention(如果啟用了Use extras
)
Base Prompt
在使用 LLM 的所有 LLMCharacter 物件中使用通用基本提示
Show/Hide Advanced Options
Log Level
選擇日誌訊息的詳細程度
Use extras
選擇安裝並允許使用額外功能(閃光注意力和 IQ 量化)
Remote
無論使用的 LLM 是遠端還是本地
LLM
LLM 遊戲物件(如果未設定Remote
)
LLM 伺服器的Hort
ip(如果設定了Remote
)
Port
LLM伺服器的連接埠(如果設定了Remote
)
Num Retries
來自 LLM 伺服器的 HTTP 請求重試次數(如果設定了Remote
)
API key
LLM 伺服器的 API 金鑰(如果設定了Remote
)
Save
儲存檔案名稱或相對路徑 Save Cache
選擇保存 LLM 狀態以及聊天歷史記錄。 LLM 狀態通常約為 100MB+。
Debug Prompt
選擇在 Unity 編輯器中記錄建置的提示
Player Name
玩家的名字
AI Name
AI 的名稱
AI角色的Prompt
描述
Stream
選擇以在模型生成時接收來自模型的回應(推薦!)。
若不選則一次收到模特兒完整回复
Num Predict
要預測的最大標記數(預設值:256,-1 = 無窮大,-2 = 直到上下文填充) Load grammar
點選載入 .gbnf 格式的語法
Grammar
正在使用的語法的路徑(相對於 Assets/StreamingAssets 資料夾)
Cache Prompt
保存聊天中正在進行的提示(預設值:true)用於計算的伺服器Slot
。值可以設定為 0 到Parallel Prompts
-1(預設值:-1 = 每個字元的新槽)
Seed
種子以實現可重複性。對於每次的隨機結果,使用 -1
Temperature
LLM 溫度,較低的值給出更確定的答案(預設值:0.2)Top K
top-k 取樣(預設:40,0 = 停用)Top P
top-p 取樣(預設值:0.9、1.0 = 停用)Min P
使用令牌的最小機率(預設值:0.05)Repeat Penalty
控制產生文字中標記序列的重複(預設值:1.1)Presence Penalty
重複令牌存在懲罰(預設值:0.0,0.0 = 停用)Frequency Penalty
重複令牌頻率懲罰(預設值:0.0,0.0 = 停用) Tfs_z
:使用參數 z 啟用無尾取樣(預設值:1.0,1.0 = 停用)。
Typical P
:使用參數 p 啟用本地典型取樣(預設值:1.0,1.0 = 停用)。
Repeat Last N
:考慮懲罰重複的最後 N 個標記(預設值:64,0 = 停用,-1 = ctx-size)。
Penalize Nl
:套用重複懲罰時懲罰換行符號(預設值:true)。
Penalty Prompt
:提示處罰評估的目的。可以是null
、字串或表示標記的數字數組(預設值: null
= 使用原始prompt
)。
Mirostat
:啟用 Mirostat 取樣,控製文字產生過程中的困惑(預設值:0,0 = 停用,1 = Mirostat,2 = Mirostat 2.0)。
Mirostat Tau
:設定 Mirostat 目標熵,參數 tau(預設值:5.0)。
Mirostat Eta
:設定 Mirostat 學習率,參數 eta(預設值:0.1)。
N Probs
:如果大於 0,則回應也包含每個產生令牌的前 N 個令牌的機率(預設值:0)
Ignore Eos
:啟用忽略流結束標記並繼續產生(預設值: false)。
LLM for Unity 的授權是 MIT (LICENSE.md),並使用具有 MIT 和 Apache 授權的第三方軟體。資產中包含的某些模型定義了自己的授權條款,請在使用每個模型之前查看它們。第三方許可證可以在(第三方聲明.md)中找到。