大家好,今天和大家分享 AntSK 知識庫/智慧體專案的最新進展。
AntSK 是一個基於 .Net 8、Blazor 及 SemanticKernel 開發的 AI 專案,旨在為開發者提供一個強大的 AI 知識庫與智慧體平臺。最新版本的專案可以在 GitHub 上找到:
https://github.com/AIDotNet/AntSK
在 AntSK 之前的版本中,我們已經成功地整合了使用 LLamaSharp 載入本地模型的 gguf 型別,但我們並沒有就此止步。為了進一步支援更多型別的本地模型,並便於測試不同模型的表現,我們更新了專案,加入了 llamafactory 的整合,並且著手準備接下來的模型微調功能。
下面是我們對 llamafactory 整合工作的一個概述:
我們知道,.Net 平臺在執行 AI 模型推理和訓練方面的元件庫並不如 Python 那樣豐富(雖然博主也是主技能.Net )。因此,我們這次選擇了一個工程上的簡化方案:直接將 llamafactory 的核心檔案整合到 AntSK 專案中,並透過使用 llamafactory 的 API 來完成整合,而非直接使用 python.net。這樣做的主要目的是降低使用門檻,即便是對 Python 不夠熟悉的開發者也能夠輕鬆上手。
首先,我們將 llamafactory 核心檔案整合到了專案中,見下圖:
我們原先考慮透過 python.net 來完成整合,但後來發現那樣會增加很多工作量。因此轉而採用了一個間接的方法:自動透過 AntSK 安裝依賴並啟動 llamafactory。
程式碼例項 1:安裝python環境以及安裝 llamafactory 所需的依賴包
public async Task PipInstall() { var cmdTask = Task.Factory.StartNew(() => { var isProcessComplete = false; process = new Process { StartInfo = new ProcessStartInfo { FileName = "pip", Arguments = "install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple", UseShellExecute = false, RedirectStandardOutput = true, RedirectStandardError = true, WorkingDirectory = AppDomain.CurrentDomain.BaseDirectory, } }; process.OutputDataReceived += (sender, eventArgs) => { Console.WriteLine($"{eventArgs.Data}"); OnLogMessageReceived(eventArgs.Data); }; process.ErrorDataReceived += (sender, eventArgs) => { Console.WriteLine($"{eventArgs.Data}"); OnLogMessageReceived(eventArgs.Data); }; process.Start(); process.BeginOutputReadLine(); process.BeginErrorReadLine(); process.WaitForExit(); }, TaskCreationOptions.LongRunning); }
程式碼例項 2:啟動 llamafactory 並指定模型及模板
public async Task StartLLamaFactory(string modelName, string templateName) { var cmdTask = Task.Factory.StartNew(() => { var isProcessComplete = false; process = new Process { StartInfo = new ProcessStartInfo { FileName = "python", Arguments = "api_demo.py --model_name_or_path " + modelName + " --template " + templateName + " ", UseShellExecute = false, RedirectStandardOutput = true, RedirectStandardError=true, WorkingDirectory = Path.Combine(Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location), "llamafactory"), } }; process.StartInfo.Environment["CUDA_VISIBLE_DEVICES"] = "0"; process.StartInfo.Environment["API_PORT"] = "8000"; process.StartInfo.EnvironmentVariables["USE_MODELSCOPE_HUB"] = "1"; process.OutputDataReceived += (sender, eventArgs) => { Console.WriteLine($"{eventArgs.Data}"); OnLogMessageReceived(eventArgs.Data); }; process.ErrorDataReceived += (sender, eventArgs) => { Console.WriteLine($"{eventArgs.Data}"); OnLogMessageReceived(eventArgs.Data); }; process.Start(); process.BeginOutputReadLine(); process.BeginErrorReadLine(); process.WaitForExit(); }, TaskCreationOptions.LongRunning); }
隨後,我們將模型的 API 地址設定為了 llamafactory 的代理地址。這個簡化的流程使得我們能夠迅速使用 llamafactory。
效果展示:
在建立模型時,選擇LLamaFactory,然後我們就可以選擇很多魔塔的本地模型
選擇好後我們點選啟動。
為了更容易看到安裝依賴和執行llamafactory的日誌,我們加入了類似控制檯的顯示元件:
等待模型下載結束後,我們在請求地址中設定llamafactory的服務地址(這裡預設配置的是8000埠)
然後我們就可以開始聊天了!!
透過AntSK可以非常容易整合各種本地模型進行使用。
我們下一步將會整合bge的embedding模型,以及如何在AntSK中實現rerank。
更進一步,我們的下一步計劃是整合模型微調功能,為此,我們已經在佈局相關工作。希望大家繼續關注我的公眾號,持續跟進我們的最新動態!未來,讓我們共同見證 AntSK 如何使 AI 整合更加簡單化、智慧化。