C#使用OllamaSharp呼叫Llama 3、Phi 3等大語言模型

猫叔Vincent發表於2024-07-21

現如今大模型遍地都是,OpenAI的ChatGPT,Meta的Llama(羊駝),Anthropic的Claude,Microsoft的Phi3,Google的Gemini......
image
怎麼都是國外的???嗯,國內也有,比如騰訊有混元大模型,位元組跳動有豆包大模型等等。
不過這不是今天的重點,這寫國內外的大模型都有一個特點,就是隻有Web、安卓、Ios客戶端,感覺怎麼沒有我們C#桌面客戶端的一席之地?,這也太離離原上譜了。本著公平公正的原則,我調研了一下國內外的資料,瘋狂查詢一番發現,確實資料有點少。不過好在有一個國外的作者,開源了一個OllamaSharp,這個庫還在活躍更新,他可以讓C#開發者輕鬆呼叫各種大預言模型,目前可以查到支援的有100個大模型。這下.net開發者有福音了。
image

不過OllamaSharp也只是一個封裝庫,他背後的核心其實是Ollama,一個整合了各種大語言模型的開源庫。然後Ollama背後才是各種大預言模型。
image
下面我就演示一下如何在C#客戶端呼叫Ollama吧。

1. 安裝Ollama

開啟下載Ollama連結,你將下載一個200多MB的安裝包,下載完成直接安裝。
安裝完成後會彈出一個命令列,我們首先選擇一個大模型,並在命令列安裝一下。
比如第一個,我們就輸入ollama run llama3,引數越多,對你的機器配置要求就越高,同時帶來的收益就是精度更高,回答更準確等。不過一個80億的大模型,覆蓋我們99%的場景了,而且配置需求還好。我一個3060顯示卡,輸出token的速度不亞於網頁版。
image

注意:70億的模型起步記憶體8GB,130億的需要16GB,330億需要32GB。
執行完安裝命令,你就可以直接在命令列中跟大模型對話了【這些終於可以離線對話了,是的,離線!!!終於不用掛各種梯子去外面忍受龜速了,還有封號的風險】
下面演示一下3060顯示卡的是速度,錄屏沒有加速呢。
image

那麼這不是我們的目的,我們需要在C#中整合他,這樣就可以寫一個大模型聊天客戶端了,或者用在特定的領域,比如看論文、寫程式碼等領域。

2. C#呼叫Ollama

Nuget搜尋OllamaSharp,安裝。
image

注意埠是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#裡面實現上傳。
image

相關文章