ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

Day3 结构化Prompt设计与实践

Day3 结构化Prompt设计与实践

C# 接入本地大模型 Ollama:手把手实现流式对话、健康检查与结构化 Prompt(.NET 8 WinForms 实战)

本文用 C# + .NET 8 WinForms 封装本地 Ollama 接口,实现流式打字机效果、健康检查、取消、进度、耗时统计,并落地结构化 Prompt工程。全程不依赖云端 API,数据不出本地,附完整代码与踩坑记录。


一、前言

现在大模型很火,但直接调云端 API 有几个问题:要花钱、要联网、数据还得上传。而Ollama可以把开源大模型(如 Qwen、Llama)一键跑在本地,还提供了简单的 REST API。

本文就用 C# 做一个 WinForms 小工具,实现:

  • 非流式对话(一次返回完整答案)
  • 流式对话(模型一个字一个字往外蹦,打字机效果)
  • 服务健康检查(在线状态、版本、延迟)
  • 取消、进度提示、耗时统计
  • 结构化 Prompt(角色 / 任务 / 格式约束)多场景对比

二、环境准备

  1. 安装Ollama:官网 https://ollama.com 下载安装。
  2. 拉取一个文本模型(命令行执行):
    ollama pull qwen2.5:7b
  3. 确认 Ollama 服务已启动(默认端口11434),浏览器访问 http://localhost:11434 有响应即可。
  4. 新建一个WinForms(.NET 8)项目。

Ollama 常用接口:

接口作用
GET /api/version获取版本(可用于健康检查)。
GET /api/tags获取已安装模型列表。
POST /api/chat对话(stream控制是否流式)

三、项目结构

结构化Prompt设计与实践/ ├── Program.cs # 程序入口 ├── Form1.cs # 界面逻辑(按钮事件、线程调度) ├── Form1.Designer.cs # 界面控件 ├── OllamaClient.cs # 封装 Ollama 接口(核心) └── PromptWorkshop.cs # 结构化 Prompt 与存档

界面很简单:上面一个大输出框,中间一个提问框,底部一排按钮(练习/健康检查/取消/模型选择/非流式/流式)。


四、核心代码:封装 OllamaClient

这是整个项目的核心,对上层屏蔽 HTTP 细节。

4.1 健康检查

调用/api/version,用Stopwatch测连接延迟,并用3 秒超时保证服务挂了也不会干等:

publicclassOllamaHealth{publicboolIsOnline{get;set;}publicstringVersion{get;set;}="";publiclongLatencyMs{get;set;}publicstringError{get;set;}="";}publicasyncTask<OllamaHealth>HealthCheckAsync(CancellationTokenct=default){// 3 秒超时usingvarlinked=CancellationTokenSource.CreateLinkedTokenSource(ct);linked.CancelAfter(TimeSpan.FromSeconds(3));varsw=Stopwatch.StartNew();try{varresp=await_http.GetAsync($"{_baseUrl}/api/version",linked.Token);resp.EnsureSuccessStatusCode();sw.Stop();vartext=awaitresp.Content.ReadAsStringAsync(linked.Token);usingvardoc=JsonDocument.Parse(text);varver=doc.RootElement.TryGetProperty("version",outvarv)?v.GetString():"";<
返回列表