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

server/2025/2/28 16:13:37/
aidu_pl">

ai_0">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_117">下面是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.ppmy.cn/server/171325.html

相关文章

PyTorch-基础(CUDA、Dataset、transforms、卷积神经网络、VGG16)

PyTorch-基础 环境准备 CUDA Toolkit安装&#xff08;核显跳过此步骤&#xff09; CUDA Toolkit是NVIDIA的开发工具&#xff0c;里面提供了各种工具、如编译器、调试器和库 首先通过NVIDIA控制面板查看本机显卡驱动对应的CUDA版本&#xff0c;如何去下载对应版本的Toolkit工…

Vue03

Vue03 注&#xff1a;为Vue实例添加属性&#xff0c;写法如下 methods:{ addSex(){ Vue.set(this.student,"sex",男) } }Vue监视数据原理&#xff1a; vue会监视data中所有层次的数据 如何监测对象中的数据 通过setter实现监视&#xff0c;且要在ne…

Jmeter聚合报告导出log文档,Jmeter聚合报告导出到CSV

Jmeter聚合报告导出log文档 在Filename中输入 EKS_perf_log\\${type}_log\\${__P(UNIQUEID,${__time(YMDHMS)})}\all-graph-results-log.csv 可以得到执行的log&#xff0c;文件夹包含时间戳 Jmeter聚合报告导出到CSV 点击Save Table Data&#xff0c;保存到CSV文件中

机器学习数学基础:37.偏相关分析

偏相关分析教程 一、偏相关分析是什么 在很多复杂的系统中&#xff0c;比如地理系统&#xff0c;会有多个要素相互影响。偏相关分析就是在这样多要素构成的系统里&#xff0c;不考虑其他要素的干扰&#xff0c;专门去研究两个要素之间关系紧密程度的一种方法。用来衡量这种紧…

React 项目创建与文件基础结构关系

点击查看react官方文档 //index.js //整个项目的入口&#xff0c;项目从此开始运行//导入react和react-dom两个必要的核心包 import React from react; import ReactDOM from react-dom/client;//导入App组件(根组件) import App from ./App;//把App根组件渲染到id为root的dom…

Deepseek开源周,第二天:Deep EP

DeepSeek 开源的 DeepEP 项目是一个专为 MoE&#xff08;混合专家&#xff09;模型设计的开源通信库&#xff0c;旨在优化训练和推理效率。其对开发者的核心价值体现在以下方面&#xff1a; 1. 显著提升训练与推理性能 全连接通信优化 通过高效优化的 All-to-All 通信机制&…

机器学习:强化学习的epsilon贪心算法

强化学习&#xff08;Reinforcement Learning, RL&#xff09;是一种机器学习方法&#xff0c;旨在通过与环境交互&#xff0c;使智能体&#xff08;Agent&#xff09;学习如何采取最优行动&#xff0c;以最大化某种累积奖励。它与监督学习和无监督学习不同&#xff0c;强调试错…

Unity报错:InvalidOperationException: Insecure connection not allowed

Unity报错:InvalidOperationException: Insecure connection not allowed 介绍问题原因解决方案方案一&#xff1a;Unity配置文件修改方案二&#xff1a;将网址做备案和证书认证 总结 介绍 最近在做抖音小程序的升级&#xff08;官方换新API&#xff09;&#xff0c;框架的加载…