【C#】调用本机AI大模型流式返回

【python】AI Navigator的使用及搭建本机大模型_anaconda ai navigator-CSDN博客

【Python】AI Navigator对话流式输出_python ai流式返回-CSDN博客

前两章节我们讲解了使用AI Navigator软件搭建本机大模型,并使用python对大模型api进行调用,使其流式返回数据。这一章节我们使用C#实现python同样的流式返回数据并流式输出。

结果

代码

using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Runtime.Remoting.Contexts;
using System.Text;
using System.Threading.Tasks;
using Flurl;
using Flurl.Http;
using System.Diagnostics;
using Newtonsoft.Json.Linq;
using System.Security.Cryptography;
namespace ConsoleApp49
{internal class Program{public static string base_url = "http://localhost:8070";static void Main(string[] args){Run();Console.ReadLine();}static async void Run(){string context = "你是一个友好的人工智能助手,旨在提供有用、简洁和准确的信息。";//获取服务器状态string getHealth = get_server_health();JObject jsonHealth = JObject.Parse(getHealth);string HealthStatus = jsonHealth["status"].ToString();if (HealthStatus == "ok"){while (true){Console.WriteLine("用户(输入对话或键入“exit”退出):");string user_input = Console.ReadLine();if (user_input.ToLower() == "exit"){return;}Console.WriteLine("AI助理:");//人工智能回复信息string assistant_response = await post_completion(context, user_input);//组合我们之前的聊天内容context = update_context(context, user_input, assistant_response);}}else{Console.WriteLine("服务器尚未准备好接受请求。");}}public static string update_context(string context, string user_input, string assistant_response){return $"{context}\nUser: {user_input}\nAssistant: {assistant_response}";}public static string Get(string url){HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);req.Method = "GET";req.Timeout = 3000;if (req == null || req.GetResponse() == null)return string.Empty;HttpWebResponse resp = (HttpWebResponse)req.GetResponse();if (resp == null)return string.Empty;using (Stream stream = resp.GetResponseStream()){using (StreamReader reader = new StreamReader(stream)){return reader.ReadToEnd();}}}public static string get_server_health() {string getResult = Get($"{base_url}/health");return getResult;}static async Task<string> post_completion(string context, string user_input){string allStr = "";HttpClient httpClient = new HttpClient();string url = "http://localhost:8070/completion";string prompt = $"{context}\nUser: {user_input}\nAssistant:";StringContent jsonContent = new StringContent(JsonConvert.SerializeObject(new{prompt = prompt,temperature = 0.8,top_k = 35,top_p = 0.95,n_predict = 400,stop = new string[] { "</s>", "Assistant:", "User:" },stream = true}), Encoding.UTF8,"application/json");var httpreq = new HttpRequestMessage(HttpMethod.Post, url) { Content = jsonContent };var response = await httpClient.SendAsync(httpreq, HttpCompletionOption.ResponseHeadersRead);// 确保请求成功response.EnsureSuccessStatusCode();// 读取响应内容的异步流using (var responseStream = await response.Content.ReadAsStreamAsync()){// 逐块读取并处理响应内容var buffer = new byte[5000];int bytesRead;while ((bytesRead = await responseStream.ReadAsync(buffer, 0, buffer.Length)) > 0){// 处理响应内容string content = System.Text.Encoding.UTF8.GetString(buffer, 0, bytesRead).Trim();if (content != null){JObject jsonObject = JObject.Parse(content.Replace("data:", ""));if (jsonObject["content"].ToString().Trim() != ""){allStr = allStr + jsonObject["content"].ToString().Trim();Console.Write(jsonObject["content"].ToString().Trim(), "");}}}}Console.Write("\n");return allStr;}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/57288.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python Flask 框架下的 API 接口开发与封装示例

API&#xff08;Application Programming Interface&#xff09;接口的开发和封装是构建软件系统的重要环节。以下是关于 API 接口开发和封装的详细步骤&#xff1a; 一、需求分析 在开发 API 接口之前&#xff0c;首先需要明确接口的功能需求。这包括确定接口要提供哪些数据…

“智能科研写作:结合AI与ChatGPT提升SCI论文和基金申请质量“

基于AI辅助下的高效高质量SCI论文撰写及投稿实践 科学研究的核心在于将复杂的思想和实验成果通过严谨的写作有效地传递给学术界和工业界。对于研究生、青年学者及科研人员&#xff0c;如何高效撰写和发表SCI论文&#xff0c;成为提升学术水平和科研成果的重要环节。系统掌握从…

ProteinMPNN中DecLayer类介绍

PositionWiseFeedForward 类的代码 class PositionWiseFeedForward(nn.Module):def __init__(self, num_hidden, num_ff):super(PositionWiseFeedForward, self).__init__()self.W_in = nn.Linear(num_hidden, num_ff, bias=True)self.W_out = nn.Linear(num_ff, num_hidden, …

SAP_FICO模块-资产减值功能对折旧和残值的影响

一、业务背景 由于财务同事没注意&#xff0c;用总账给资产多做了一笔凭证&#xff0c;导致该资产金额虚增&#xff0c;每个月的折旧金额也虚增&#xff1b;现在财务的需求是怎么操作可以进行资产减值&#xff0c;并且减少每个月计提的折旧&#xff1b; 二、实现方式 通过事务码…

linux CentOs7 安装 FastDFS

CentOs7 安装 FastDFS 1. 安装依赖 yum install gcc libevent libevent-devel -y#进入src目录 cd /usr/local/src2. 安装 libfastcommon 库 libfastcommon 库是 FastDFS 文件系统运行需要的公共 C 语言函数库 # 下载 wget https://github.com/happyfish100/libfastcommon/a…

使用梧桐数据库进行销售趋势分析和预测

在当今竞争激烈的商业环境中&#xff0c;企业需要深入了解销售数据&#xff0c;以便做出明智的决策。销售趋势分析和预测是帮助企业把握市场动态、优化库存管理、制定营销策略的重要工具。本文将介绍如何使用SQL来创建销售数据库的表结构&#xff0c;插入示例数据&#xff0c;并…

6.2024.10.22

2024.10.22 2024.10.22 2024.10.22 今天没怎么学习嵌入式的&#xff0c;找时间补上今天学习的空缺。

qt EventFilter用途详解

一、概述 EventFilter是QObject类的一个事件过滤器&#xff0c;当使用installEventFilter方法为某个对象安装事件过滤器时&#xff0c;该对象的eventFilter函数就会被调用。通过重写eventFilter方法&#xff0c;开发者可以在事件处理过程中进行拦截和处理&#xff0c;实现对事…

go 语言 Gin Web 框架的实现原理探究

Gin 是一个用 Go (Golang) 编写的 Web 框架&#xff0c;性能极优&#xff0c;具有快速、支持中间件、crash处理、json验证、路由组、错误管理、内存渲染、可扩展性等特点。 官网地址&#xff1a;https://gin-gonic.com/ 源码地址&#xff1a;https://github.com/gin-gonic/gi…

Shell重定向输入输出

我的后端学习大纲 我的Linux学习大纲 重定向介绍 标准输入介绍 从键盘读取用户输入的数据&#xff0c;然后再把数据拿到Shell程序中使用&#xff1b; 标准输出介绍 Shell程序产生的数据&#xff0c;这些数据一般都是呈现到显示器上供用户浏览查看; 默认输入输出文件 每个…

重新认识Linux下的硬链接和软链接

文章目录 前言1、软链接&#xff1f;1.1 工作原理1.2 特点 2、硬链接2.1 工作原理2.2 特点 3、 总结 前言 让自己永远保持一颗好奇心 今天无意间听别人提到了硬链接和软链接&#xff0c;起初我想这么基础的知识我肯定是知道的&#xff0c;毕竟大学接触Linux到现在工作了那么多…

ubuntu20.04 opencv4.0 /usr/local/lib/libgflags.a(gflags.cc.o): relocation报错解决

在一个只有ubuntu20.04的docker环境中配置opencv4.0.0, 什么库都没有&#xff0c;都要重新安装&#xff0c; 其他的问题在网上都找到了解决方案&#xff0c;唯独这个问题比较棘手&#xff1a; [ 86%] Linking CXX executable …/…/bin/opencv_annotation /usr/bin/ld: /usr/lo…

前OpenAI首席技术官为新AI初创公司筹资;我国发布首个应用临床眼科大模型 “伏羲慧眼”|AI日报

文章推荐 2024人工智能报告.zip &#xff5c;一文迅速了解今年的AI界都发生了什么&#xff1f; 今日热点 据报道&#xff0c;前OpenAI首席技术官Mira Murati正在为一家新的AI初创公司筹集资金 据路透社报道&#xff0c;上个月宣布离职的OpenAI首席技术官Mira Murati正在为一…

栈和队列(一)

栈和队列的定义和特点 栈和队列是一种特殊的线性表&#xff0c;只能在表的端点进行操作 栈的定义和特点 这就是栈的结构&#xff0c;是一个特殊的线性表&#xff0c;只能在栈顶&#xff08;或者说是表尾&#xff09;进行操作。其中top为栈顶&#xff0c;base为栈底 栈s的存储…

C语言结构体数组 java静动数组及问题

1. &#xff08;1&#xff09;先声明&#xff0c;后定义&#xff1a;如上一天 //&#xff08;2&#xff09;.声明时直接定义 #define N 5 typedef struct student { int num; int score; }STU; int main(void) { STU class3[N] { {10,90},{14,70},{8,95} }; …

全面解析:集成AWS、云原生和监控的开源运维管理平台

在当今复杂的IT环境中&#xff0c;寻找一个能够同时支持AWS、云原生技术&#xff08;如Kubernetes&#xff09;和全面监控功能的开源运维管理平台&#xff0c;已成为许多组织的迫切需求。本文将深入探讨几个有潜力满足这些需求的开源解决方案&#xff0c;分析它们的优势、局限性…

华为:高级ACL 特定ip访问特定ip命令

网络拓扑图&#xff1a; 网络环境&#xff1a; 全网互通即可 1.创建一个名为test的高级ACL acl name test advance 2.添加规则 ##拒绝所有ip访问 rule 10 deny ip source any destination 192.168.1.10 0.0.0.0 只允许特定ip访问特定ip rule 5 permit ip source 192.168.2.10…

【Vulnhub靶场】Kioptrix Level 5

目标 本地IP&#xff1a;192.168.118.128 目标IP&#xff1a;192.168.118.0/24 信息收集 nmap探测存活主机&#xff0c;扫全端口&#xff0c;扫服务 首先探测到目标ip为&#xff1a;192.168.118.136 nmap -sP 192.168.118.0/24nmap -p- 192.168.118.136nmap -sV -A 192.168.…

BurpSuite渗透工具的简单使用

BurpSuite渗透工具 用Burp Suite修改请求 step1&#xff1a; 安装Burp Suite。官网链接&#xff1a;Burp Suite官网 step2&#xff1a; 设置代理 step3&#xff1a; 如果要拦截https请求&#xff0c;还需要在客户端安装证书 step4&#xff1a; 拦截到请求可以在Proxy ->…

句柄是什么?有什么用?举例说明

在C#编程中&#xff0c;“句柄”&#xff08;Handle&#xff09;是一个与操作系统资源相关联的标识符。句柄是一个指针或者索引&#xff0c;用于在程序代码中引用系统资源&#xff0c;如窗口、文件、线程等。由于直接操作这些资源非常危险且复杂&#xff0c;操作系统提供句柄作…