当前位置: 首页 > news >正文

C#与AI的交互(以DeepSeek为例)

C#与ai的交互

与AI的交互使用的Http请求的方式,通过发送请求,服务器响应ai生成的文本
下面是完整的代码,我这里使用的是Ollama本地部署的deepseek,在联网调用api时,则url会有不同

public class OllamaRequester
{[Serializable]public class RequestData{public string model;	//模型名称public string prompt;	//对话文本public int[] context;	//上下文public bool stream;	//是否使用流式传输}[Serializable]public class ResponseData{public string model;public string created_at;public string response;	//相应内容public bool done;	//生成是否结束public string done_reason;	//结束的状态public int[] context;	//上下文public long total_duration;public long load_duration;}private static OllamaRequester instance;public static OllamaRequester Instance{get{if(instance == null){instance = new OllamaRequester();instance.Init();}return instance;}}private int[] context;private HttpClient client;private void Init(){client = new HttpClient();}public async Task SendReq(string str, Action<ResponseData> onResOnce){//注意!这里是本地Ollama的地址,如果你是联网调用ai接口的的话,需要改成官网提供的urlstring url = "http://localhost:11434/api/generate"; //ollama端口默认11434//如果使用联网调用ai接口,则请求的参数会有不同,我这使用的是本地部署的请求参数RequestData data = new RequestData(){model = "deepseek-r1:7b",prompt = str,context = context,stream = true, //建议用流式传输,不然响应比较慢};string json = JsonUtility.ToJson(data);HttpContent content = new StringContent(json);content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json");Debug.Log("发送请求..");try{var request = new HttpRequestMessage(HttpMethod.Post, url);request.Content = content;//这个HttpCompletionOption.ResponseHeadersRead至关重要,流式传输必须使用这个HttpResponseMessage msg = await client.SendAsync(request, HttpCompletionOption.ResponseHeadersRead);try{//不是200则直接报错if (msg.StatusCode != System.Net.HttpStatusCode.OK){Debug.LogError($"错误!statusCode=={msg.StatusCode}, 错误消息=={msg.Content}");return;}Stream stream = await msg.Content.ReadAsStreamAsync();StreamReader reader = new StreamReader(stream);while (true){string resStr = await reader.ReadLineAsync();Debug.Log("str==" + resStr);ResponseData res = JsonUtility.FromJson<ResponseData>(resStr);onResOnce?.Invoke(res);if (res.done){break;}}reader.Dispose();stream.Dispose();}catch (Exception e){Debug.LogError(e);}}catch(Exception e){Debug.LogError(e);}}
}

注意代码中SendAynsc时,使用了HttpCompletionOption.ResponseHeadersRead,这个枚举表示的是读取响应头部信息,并且允许你从响应流中逐步读取信息。
默认情况下,Http会等待整个响应体全部下载完,才会返回响应,这样在文本很长时响应会非常慢!所以通常建议开启流式传输

下面是ai响应的数据格式示例

--api返回的数据格式是json(因为csdn没有json格式的代码段,所以我用了lua表示)
{"model": "deepseek-r1:7b",	--模型"created_at": "2025-02-24T02:03:41.8641806Z","response": "",	--响应内容,我这里因为已经结束生成了,所以resposne是空"done": true,	--done==true,表示结束生成"done_reason": "stop",	--done_reason==stop,表示正常结束,会有其他非正常结束的情况"context": [	--上下文,在下次发送请求的时候,需要发送context,可以让ai保持连续对话151644,108386,151645,151648,271,151649,271,108386,6313,112169,104639,56568,3837,104139,109944,106128,9370,101037,11319,102215,86119,5373,101898,99998,100836,100281,3837,35946,102070,108896,101036,6313,144236],"total_duration": 4234560000,"load_duration": 18329400,"prompt_eval_count": 4,"prompt_eval_duration": 274000000,"eval_count": 31,"eval_duration": 3941000000
}
http://www.lryc.cn/news/543620.html

相关文章:

  • 面试八股文--数据库基础知识总结(2) MySQL
  • Failed to start The PHP FastCGI Process Manager.
  • 软件供应链安全工具链研究系列——RASP自适应威胁免疫平台(上篇)
  • Spring Boot集成MyBatis访问MySQL:从项目搭建到基础数据库查询(基础入门)
  • 一周学会Flask3 Python Web开发-Jinja2模板继承和include标签使用
  • 【2025.2.25更新】wordpress免费AI插件,文章内容、图片自动生成、视频自动生成、网站AI客服、批量采集文章,内置deepseek联网满血版
  • 待解决 leetcode71 简化路径 栈的应用
  • 数据安全_笔记系列09_人工智能(AI)与机器学习(ML)在数据安全中的深度应用
  • RocketMQ 可观测性最佳实践
  • P9420 [蓝桥杯 2023 国 B] 子 2023
  • OpenAI开放Deep Research权限,AI智能体大战升级,DeepSeek与Claude迎来新对决
  • 学习笔记04——JMM内存模型
  • 将VsCode变得顺手好用(1
  • Fisher信息矩阵(Fisher Information Matrix,简称FIM)
  • Vue2+Three.js加载并展示一个三维模型(提供Gitee源码)
  • Linux红帽:RHCSA认证知识讲解(三)Linux基础指令与Vim编辑器的使用
  • python读取sqlite温度数据,并画出折线图
  • 《论企业集成平台的理解与应用》审题技巧 - 系统架构设计师
  • UE Python笔记
  • 使用django调用deepseek api,搭建ai网站
  • YOLOv12 ——基于卷积神经网络的快速推理速度与注意力机制带来的增强性能结合
  • 两台互通的服务器使用Docker部署一主两从MySQL8.0.35
  • Java23种设计模式案例
  • stm32hal库寻迹+蓝牙智能车(STM32F103C8T6)
  • JavaScript知识点4
  • 形式化数学编程在AI医疗中的探索路径分析
  • QT 引入Quazip和Zlib源码工程到项目中,无需编译成库,跨平台,加密压缩,带有压缩进度
  • Ubuntu 安装 Nginx并配置反向代理
  • GitHub SSH连接问题解决指南
  • C++ 跨平台的 GetCurrentThreadId() 获取当前线程ID实现