首页 > 其他分享 >.NET AI 开发人员库 --AI Dev Gallery简单示例--问答机器人

.NET AI 开发人员库 --AI Dev Gallery简单示例--问答机器人

时间:2025-01-10 17:31:07浏览次数:3  
标签:Console cts AI 示例 private -- static new bool

资源及介绍接上篇

nuget引用以下组件

效果展示:

内存和cpu占有:

代码如下:路径换成自己的模型路径 模型请从上篇文尾下载

 internal class Program
 {
     private static CancellationTokenSource? cts;
     private static IChatClient? model;
     private static List<Message> Messages { get; } = [];
     static async Task Main(string[] args)
     {
         bool bRet = SetConsoleCtrlHandler(cancelHandler, true);
         GenAIModel.InitializeGenAI();

         model = await GenAIModel.CreateAsync(@"D:\microsoft--Phi-3.5-mini-instruct-onnx\main\cpu_and_mobile\cpu-int4-awq-block-128-acc-level-4", new LlmPromptTemplate
         {
             System = "<|system|>\n{
  
  {CONTENT}}<|end|>\n",
             User = "<|user|>\n{
  
  {CONTENT}}<|end|>\n",
             Assistant = "<|assistant|>\n{
  
  {CONTENT}}<|end|>\n",
             Stop = ["<|system|>", "<|user|>", "<|assistant|>", "<|end|>"]
         });
         Console.WriteLine("Enter your prompt (Press Shift + Enter to insert a newline)");
         while (true)
         {
             var txt = "";
             txt = Console.ReadLine();
             if (!string.IsNullOrEmpty(txt))
                 AddMessage(txt);
         }
     }

     private static void AddMessage(string text)
     {
         if (model == null)
         {
             return;
         }

         Messages.Add(new Message(text.Trim(), DateTime.Now, ChatRole.User));

         Task.Run(async () =>
         {
             var history = Messages.Select(m => new ChatMessage(m.Role, m.Content)).ToList();

             var responseMessage = new Message(string.Empty, DateTime.Now, ChatRole.Assistant);

             Messages.Add(responseMessage);

             cts = new CancellationTokenSource();

             history.Insert(0, new ChatMessage(ChatRole.System, "You are a helpful assistant"));
             Console.WriteLine(responseMessage);
             await foreach (var messagePart in model.CompleteStreamingAsync(history, null, cts.Token))
             {
                 var part = messagePart;
                 responseMessage.Content += part;
                 Console.Write(part);
             }
             Console.WriteLine("***************************END***************************");
             cts?.Dispose();
             cts = null;
         });
     }

     #region close
     public delegate bool ControlCtrlDelegate(int CtrlType);
     [DllImport("kernel32.dll")]
     private static extern bool SetConsoleCtrlHandler(ControlCtrlDelegate HandlerAppClose, bool Add);
     private static ControlCtrlDelegate cancelHandler = new ControlCtrlDelegate(HandlerAppClose);

     /// <summary>
     /// 关闭窗口时的事件
     /// </summary>
     /// <param name="CtrlType"></param>
     /// <returns></returns>
     static bool HandlerAppClose(int CtrlType)
     {
         cts?.Cancel();
         cts?.Dispose();
         cts = null;
         model?.Dispose();
         return false;
     }

     #endregion
 }

标签:Console,cts,AI,示例,private,--,static,new,bool
From: https://blog.csdn.net/u011234288/article/details/144989914

相关文章

  • 深圳大学-程序设计基础-OJ
    A.100到n以内的水仙花数题目描述若3位数ABC满足ABC=A3+B3+C3,则称其为水仙花数.例如:153=13+53+3^3,所以153是水仙花数.你的任务是输出100~n中所有的水仙花数.每行输出一个。输入输入n,表示100到n之间的范围输出请输出100~n中所有的水仙花数.每行输出一个.样例输出......
  • 人力资源薪酬管理系统:需求文档&原型
    01人力资源薪酬管理系统:需求文档&原型目录内容介绍文档部分内容介绍回复:221012......
  • OpenCV与AI深度学习 | 干货 | 深度学习模型训练和部署的基本步骤
    本文来源公众号“OpenCV与AI深度学习”,仅用于学术分享,侵权删,干货满满。原文链接:干货|深度学习模型训练和部署的基本步骤    训练深度学习模型的过程需要管理许多不同的步骤和组件。从数据准备到模型评估,每个步骤对于确保模型的成功都至关重要。 1.数据验证   ......
  • 模拟ic入门——设计一个压控振荡器(VCO)(一)环形振荡器
    概述:振荡器是微电子不可或缺的一环,应用场景从微处理器的时钟到蜂窝电路的载波合成,要求的结构和性能差别很大。OSC主要分两部分,环形振荡器(RingOSC)和LC振荡器。其中环形振荡器主要由反相器构成,应用于低速的数字时钟中;而LC振荡器一般用于高频场景,如PLL参考资料:拉扎维的《模拟C......
  • 年终总结怎么写能让老板认可?有哪些技巧?
    ​眼看还有半个月就准备过年了,小伙伴们有没有开始为年底的工作总结头疼了呢?以下是一些建议,帮助你写出一份出色的年终工作总结01明确目的和受众在开始写总结之前,明确总结的目的和受众(即你的老板)。了解老板的期望和喜好,以便更好地满足他们的需求。工作总结中无论怎么加工润色,......
  • Ubuntu安装MySQL-5.7.44
    一、下载MySQL::DownloadMySQLCommunityServer(ArchivedVersions) MySQL::MySQLDownloads 下滑 二、卸载ubuntu18.04彻底卸载mysql5.7,图文详解_ubuntu卸载mysql-CSDN博客1、查看MySQL的依赖项dpkg--list|grepmysql2、删除所有MySQL工作......
  • 算法进阶 | Transformer+Diffusion? Transfusion!
    本文来源公众号“算法进阶”,仅用于学术分享,侵权删,干货满满。原文链接:Transformer+Diffusion?Transfusion!近日,Meta和Waymo发布了最新论文《Transfusion:PredicttheNextTokenandDiffuseImageswithOneMulti-ModalModel》,该论文将流行的Transformer模型与Diff......
  • linux: 文本编辑器vim
    文本编辑器vi的工作模式(vim和vi一致)进入vim的方法方法一:输入vim 文件名此时左下角有"文件名" 文件行数,字符数量方法一:输入vim新文件名此时新建了一个文件并进入vim,左下角有"文件名"[NewFile]灰色的长方形就是光标,输入文字,左下角变成了INSERT表......
  • linux:文件的创建/删除/复制/移动/查看/查找/权限/类型/压缩/打包
    关于文件的关键词创建touch删除rm复制cp权限chmod移动mv查看内容cat(全部);head(前10行);tail(末尾10行);more,less查找  find压缩 gzip; bzip打包tar 编辑sed创建文件格式:touch文件名删除文件复制文件移动文件查看文件内......
  • 离线服务器迁移安装docker镜像
    场景服务器需要使用容器,但是服务器是离线状态,或者无法直接拉取docker镜像,这时候就需要本篇文章了步骤步骤1:将镜像导出为tar文件首先,在在线服务器上将镜像导出为一个.tar文件。你可以使用dockersave命令来将镜像导出:dockersave-o/path/to/your-image.taryour-im......