現如今大模型遍地都是,OpenAI的ChatGPT,Meta的Llama(羊駝),Anthropic的Claude,Microsoft的Phi3,Google的Gemini......
怎麼都是國外的???嗯,國內也有,比如騰訊有混元大模型,位元組跳動有豆包大模型等等。
不過這不是今天的重點,這寫國內外的大模型都有一個特點,就是隻有Web、安卓、Ios客戶端,感覺怎麼沒有我們C#桌面客戶端的一席之地?,這也太離離原上譜了。本著公平公正的原則,我調研了一下國內外的資料,瘋狂查詢一番發現,確實資料有點少。不過好在有一個國外的作者,開源了一個OllamaSharp,這個庫還在活躍更新,他可以讓C#開發者輕鬆呼叫各種大預言模型,目前可以查到支援的有100個大模型。這下.net開發者有福音了。
不過OllamaSharp也只是一個封裝庫,他背後的核心其實是Ollama,一個整合了各種大語言模型的開源庫。然後Ollama背後才是各種大預言模型。
下面我就演示一下如何在C#客戶端呼叫Ollama吧。
1. 安裝Ollama
開啟下載Ollama連結,你將下載一個200多MB的安裝包,下載完成直接安裝。
安裝完成後會彈出一個命令列,我們首先選擇一個大模型,並在命令列安裝一下。
比如第一個,我們就輸入ollama run llama3
,引數越多,對你的機器配置要求就越高,同時帶來的收益就是精度更高,回答更準確等。不過一個80億的大模型,覆蓋我們99%的場景了,而且配置需求還好。我一個3060顯示卡,輸出token的速度不亞於網頁版。
注意:70億的模型起步記憶體8GB,130億的需要16GB,330億需要32GB。
執行完安裝命令,你就可以直接在命令列中跟大模型對話了【這些終於可以離線對話了,是的,離線!!!終於不用掛各種梯子去外面忍受龜速了,還有封號的風險】
下面演示一下3060顯示卡的是速度,錄屏沒有加速呢。
那麼這不是我們的目的,我們需要在C#中整合他,這樣就可以寫一個大模型聊天客戶端了,或者用在特定的領域,比如看論文、寫程式碼等領域。
2. C#呼叫Ollama
Nuget搜尋OllamaSharp,安裝。
注意埠是11434
private async void Ask()
{
var uri = new Uri("http://localhost:11434");
var ollama = new OllamaApiClient(uri);
ollama.SelectedModel = "llama3";
var prompt = "WPF和Winform的區別是啥";
//1.
//ConversationContext context = null;
//context = await ollama.StreamCompletion(prompt, context, Callback);
//2.
ConversationContext context = null;
await foreach (var stream in ollama.StreamCompletion(prompt, context))
{
Debug.Write(stream.Response);
}
}
private void Callback(GenerateCompletionResponseStream? stream)
{
Debug.Write(stream.Response);
}
這樣我們可以在VS的輸出欄裡面看到實時回答了。如果你想做的酷一點,可以在介面上貼一個AI機器人的動畫,然後給輸出的文字框不斷Append文字,應該就可以實現和網頁端一樣的打字效果了/。
3. One more thing
這樣體驗一下,感覺似乎也並沒有特別之處。如果你這樣想,那就too young too simple啦。
現在鑑於這些大模型都是下載下來執行在本地的,那麼離線和資料保密就是他的一大優點了。有很多客戶的機器出於商業機密或者其他原因,不能將裝置接入網際網路,因此本地執行大模型尤為重要。或者區域網部署也可。
其次,還可以和多模態大模型llava等交流圖片,比如我上傳一張絕命毒師的圖片,他就立馬識別出來,並給一段文字描述。同樣的我們也可以在C#裡面實現上傳。