其實完全沒這個必要,性能用腳后跟想都會很差。但基于上一篇文章的成果,來都來了就先簡單試試吧。
先來看看這個拼夕夕上五百多塊錢能達到的效果:
只要對速度沒要求,那感覺就還行。
Ollama默認只在本地回環(127.0.0.1)上提供服務,樹莓派下可以修改/etc/systemd/system/ollama.service,在[Service]節中加一句:
Environment="OLLAMA_HOST=0.0.0.0:11434"
注意,這可能會導致一些潛在的網絡安全風險,比如未經授權的訪問等,請謹慎評估。
然后重啟服務:
sudo systemctl daemon-reload
sudo systemctl restart ollama
這樣別的設備也能訪問Ollama的API了。
C#代碼很簡單,本質上就是一個異步的POST調用。
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);// 構建請求的 URLstring 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表示情緒穩定。