C# Ollama 实战聊天小案例实现 - 教程

我们上一期在各大AI模型中最终选中纯免费版加可离线的Ollama模型 这一期我们来基于这个模型来做个更加深入的了解和实战使用以及后期我们来对这个模型来实现一个稍微复杂的批量图片操作功能,来看看这款模型是否能满足我们要求

我们打开Ollama官网后会发现使用Ollama有三种请求方式分别是Ollama 的 JavaScript 库、Python 库和 cURL 调用都是与 Ollama 服务交互的方式,但它们在使用场景、功能和易用性上有明显区别:

1. cURL (命令行工具)

  • 定位:最底层的 HTTP 请求工具

  • 特点

    • 直接调用 REST API 端点

    • 无需安装额外库(系统自带)

    • 适合测试、调试和简单脚本

  • 示例

curl http://localhost:11434/api/generate -d '{
  "model": "llama3.2",
  "prompt": "Hello"
}'

2. Python 库 (ollama)

  • 定位:官方 Python SDK

  • 特点

    • 高级封装,使用更简单

    • 支持流式响应、对话管理

    • 自动处理 JSON 序列化/反序列化

    • 支持文件上传、多模态

  • 示例

import ollama
# 同步调用
response = ollama.chat(model='llama3.2', messages=[{'role': 'user', 'content': 'Hello'}])
# 流式响应
for chunk in ollama.chat(model='llama3.2', messages=[...], stream=True):
    print(chunk['message']['content'], end='')

3. JavaScript/Node.js 库 (ollama)

  • 定位:官方 JavaScript SDK

  • 特点

    • 支持浏览器和 Node.js 环境

    • Promise-based API,适合异步操作

    • 与前端框架集成方便

  • 示例

import { Ollama } from 'ollama'
const ollama = new Ollama({ host: 'http://localhost:11434' })
// 异步调用
const response = await ollama.chat({
  model: 'llama3.2',
  messages: [{ role: 'user', content: 'Hello' }]
})

主要区别对比

特性cURLPython 库JavaScript 库
安装复杂度无需安装pip install ollamanpm install ollama
易用性手动构造 JSON高级 API,简单直观高级 API,简单直观
流式响应需要手动处理内置支持内置支持
错误处理手动解析异常机制Promise catch
多模态支持但复杂简单 API简单 API
适用场景脚本测试、调试后端服务、AI应用前端应用、全栈
类型安全有类型提示TypeScript 支持

选择建议

使用 cURL 当:

  • 快速测试 API 是否工作

  • 调试和查看原始响应

  • 编写简单的 Shell 脚本

使用 Python 库 当:

  • 开发 AI 后端服务

  • 需要复杂的对话管理

  • 数据处理和科学计算

  • 与其他 Python AI 库集成

使用 JavaScript 库 当:

  • 开发 Web 前端应用

  • 构建浏览器扩展

  • Node.js 后端服务

  • 需要实时流式更新的应用

共同点

无论使用哪种方式,底层都是通过 HTTP 与 Ollama 的 REST API 通信,核心功能(模型推理、对话等)都是一致的。

简单总结:cURL 是工具,Python/JS 库是 SDK。SDK 提供了更友好、更强大的开发体验,而 cURL 更适合快速验证和底层操作。

结合我们的一个使用需求以及Ollama的介绍我们根据不同场景选择对应的使用方式 我这边着重使用cURL

这里我们要本地使用Ollama 第一步首先先拉取Ollama 的模型 因为Ollama经过不断版本更新已经有很多种不同版本的模型 不同模型的功能也大不一样

模型

在使用模型之前,先局部拉取:ollama pull

ollama pull llama3.2

默认型号名称

对于依赖默认OpenAI模型名称(如)的工具,可以将现有模型名称复制到临时名称:gpt-3.5-turboollama cp

ollama cp llama3.2 gpt-3.5-turbo

安装启用这个模型后我们就可以来测试一下这个模型 测试之前我们一定要确认自己Ollama服务是否已经启动否则会导致报错

第一步打开这个羊驼应用

启动一下 也可以使用控制台启动服务 

接下来浏览器输入检测服务地址 :localhost:11434/api/tags

如果返回如图证明服务启动正常

我们可以用测试工具 如PostMam 或其他请求工具来测试一下Ollama接口是否正常,如果不正常我们优先解决问题不然直接开始写程序一切都是徒劳

正常响应如下

如果能正常回复200响应 则表明接口正常

接下来我们创建C# 控制台程序

创建接收参数实体类GenerateResponse

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace OllamaTest.Model
{
    public class GenerateResponse
    {
        public string Model { get; set; }
        public DateTime Created_At { get; set; }
        public string Response { get; set; }
        public bool Done { get; set; }
    }
}

我们这个案例就只做一个用处熟悉加简单理解所以越简单越好 

编写 Program类

using Newtonsoft.Json;
using OllamaTest.Model;
using System.Net.Http.Json;
using System.Reflection;
using System.Text;
using System.Text.Json.Serialization;
namespace OllamaTest
{
    public class Program
    {
        public static async Task Main(string[] args)
        {
            Console.WriteLine("Ollama Gemma3 聊天助手");
            Console.WriteLine("输入 'exit' 退出\n");
            using var client = new HttpClient();
            string[] modelsToTry =
           {
                "gemma3:latest",
                "gemma3",
                "gemma3:4b",
                "gemma3:12b",
                "llama3.2:3b",
                "llama3.2:1b"
            };
            while (true)
            {
                Console.Write("你: ");
                var input = Console.ReadLine();
                if (input?.ToLower() == "exit") break;
                if (string.IsNullOrEmpty(input)) continue;
                try
                {
                    // 准备请求
                    var request = new
                    {
                        model = "llama3.2",
                        prompt = "hello",
                        stream = false
                    };
                    var json = System.Text.Json.JsonSerializer.Serialize(request);
                    var content = new StringContent(json, Encoding.UTF8, "application/json");
                    // 发送请求
                    var response = await client.PostAsync(
                        "http://localhost:11434/api/generate",
                        content
                    );
                    if (response.IsSuccessStatusCode)
                    {
                        var responseJson = await response.Content.ReadAsStringAsync();
                        var list = JsonConvert.DeserializeObject(responseJson);
                        //using var doc = System.Text.Json.JsonDocument.Parse(responseJson);
                        //if (doc.RootElement.TryGetProperty("response", out var responseText))
                        //{
                        //    Console.WriteLine($"\nGemma3: {responseText.GetString()}\n");
                        //}
                    }
                    else
                    {
                        Console.WriteLine($"错误: {response.StatusCode}");
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine($"异常: {ex.Message}");
                }
            }
         }
        }
}

打完收工我们来执行一下看下效果

目前已收到AI的回复 但是是英文后面我们再逐步的看看哪些模型支持中文来更换模型来测试 案例实例下载链接:https://download.csdn.net/download/weixin_41365995/92447803

  1. 干货,值得一赞

  2. 技术认同

  3. 实用?点赞收藏

  4. 解决问题,点亮赞同

posted @ 2026-01-20 11:45  gccbuaa  阅读(0)  评论(0)    收藏  举报