Fork me on GitHub

C#使用OllamaSharp调用Llama 3、Phi 3等大语言模型

现如今大模型遍地都是,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

posted @ 2024-07-21 00:52  猫叔Vincent  阅读(104)  评论(0编辑  收藏  举报