将树莓派5当做Ollama服务器,C#调用generate的API的示例

其实完全没这个必要,性能用脚后跟想都会很差。但基于上一篇文章的成果,来都来了就先简单试试吧。

先来看看这个拼夕夕上五百多块钱能达到的效果:

只要对速度没要求,那感觉就还行。

Ollama默认只在本地回环(127.0.0.1)上提供服务,树莓派下可以修改/etc/systemd/system/ollama.service,在[Service]节中加一句:

bash 复制代码
Environment="OLLAMA_HOST=0.0.0.0:11434"

注意,这可能会导致一些潜在的网络安全风险,比如未经授权的访问等,请谨慎评估。

然后重启服务:

bash 复制代码
sudo systemctl daemon-reload
sudo systemctl restart ollama

这样别的设备也能访问Ollama的API了。

C#代码很简单,本质上就是一个异步的POST调用。

cs 复制代码
using System;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;


namespace OllamaClient
{
    public partial class frmMain : Form
    {
        public frmMain()
        {
            InitializeComponent();
        }

        private async void btnPost_Click(object sender, EventArgs e)
        {
            string ollamaUrl = txtURL.Text.Trim();
            string modelName = txtModel.Text.Trim();
            string question = txtQuestion.Text.Trim();

            string response = await GenerateAnswer(ollamaUrl, question, modelName,false);
            txtResponse.Text = response;
        }

        private async Task<string> GenerateAnswer(string ollamaUrl, string question, string modelName,bool useStreamMode)
        {
            // 创建 HttpClient 实例
            using (HttpClient client = new HttpClient())
            {
                client.Timeout = TimeSpan.FromMilliseconds(Timeout.Infinite);

                // 构建请求的 URL
                string requestUrl = $"{ollamaUrl}/api/generate";

                // 构建请求的 JSON 数据
                var requestBody = new
                {
                    model = modelName,
                    prompt = question,
                    stream = useStreamMode
                };

                // 将请求数据序列化为 JSON 字符串
                string json = JsonConvert.SerializeObject(requestBody);

                // 创建 HttpContent 对象
                StringContent content = new StringContent(json, Encoding.UTF8, "application/json");

                // 发送 POST 请求
                HttpResponseMessage response = await client.PostAsync(requestUrl, content);

                // 确保请求成功
                response.EnsureSuccessStatusCode();

                // 读取返回的 JSON 数据
                string jsonResponse = await response.Content.ReadAsStringAsync();
                //return jsonResponse;

                // 解析 JSON 数据,提取回答内容
                dynamic jsonResponseObj = JsonConvert.DeserializeObject(jsonResponse);
                string answer = jsonResponseObj.response;

                // 返回回答内容
                // 换行符默认\n,Windows下不太友好
                return answer.Replace("\n","\r\n");
            }
        }
    }

}

需事先用NuGet工具装好Newtonsoft.Json。

RPI5表示情绪稳定。

相关推荐
liqingdi43733 分钟前
WSL+Ubuntu+miniconda环境配置
linux·windows·ubuntu
luoqice35 分钟前
通过 Samba 服务实现 Ubuntu 和 Windows 之间互传文件
linux
哈哈幸运5 小时前
MySQL运维三部曲初级篇:从零开始打造稳定高效的数据库环境
linux·运维·数据库·mysql·性能优化
soulermax5 小时前
数字ic后端设计从入门到精通2(含fusion compiler, tcl教学)
java·linux·服务器
黑心老人5 小时前
Mac OS系统下kernel_task占用大量CPU资源导致系统卡顿
linux·运维·服务器·macos
Zenexus5 小时前
Linux学习笔记协议篇(六):SPI FLASH设备驱动
linux·笔记·arm
口嗨农民工5 小时前
ubuntu18.04启动不了修复
linux·运维·ubuntu
辣个蓝人QEX6 小时前
【ZYNQ MP开发】Linux下使用bootgen命令生成BOOT.bin报错架构不对问题探究
linux·arm开发·xilinx·zynq·mpsoc·bootgen·u-boot移植
Vesan,6 小时前
无人机飞控运行在stm32上的RTOS实时操作系统上,而不是linux这种非实时操作系统的必要性
linux·stm32·无人机
GalaxyPokemon7 小时前
Muduo网络库实现 [十六] - HttpServer模块
linux·运维·服务器·网络