摘要: CAP集成到项目 添加Package 数据库使用Sqlserver,消息队列使用RabbitMQ <PackageReference Include="DotNetCore.CAP" Version="3.1.2" /> <PackageReference Include="DotNetCore.C 阅读全文
posted @ 2021-01-28 20:38 .Neterr 阅读(683) 评论(0) 推荐(0) 编辑
摘要: 简介 CAP 是一个EventBus,同时也是一个在微服务或者SOA系统中解决分布式事务问题的一个框架。它有助于创建可扩展,可靠并且易于更改的微服务系统。 分布式事务是在分布式系统中不可避免的一个硬性需求,CAP 没有采用两阶段提交(2PC)这种事务机制,而是采用的 本地消息表+MQ 这种经典的实现 阅读全文
posted @ 2021-01-04 23:43 .Neterr 阅读(1294) 评论(0) 推荐(1) 编辑
摘要: 概述 传统的单体应用一般采用的是数据库提供的事务一致性,通过数据库提供的提交以及回滚机制来保证相关操作的ACID,这些操作要么同时成功,要么同时失败。各个服务看到数据库中的数据是一致的,同时数据库的操作也是相互隔离的,最后数据也是在数据库中持久存储的。 在分布式环境下由于各个服务访问的数据是相互分离 阅读全文
posted @ 2020-08-08 19:03 .Neterr 阅读(442) 评论(0) 推荐(1) 编辑
摘要: SK也对应了文生图的功能,本文中分别使用的是GPT的DALL·E 2和DALL·E 3来生成图版,虽然不如专业的文生图那么专业,但提示词到位,在一些场景中还是可用的。 下面是最简单的文生图的代码实现,通过TextToImage服务来完成生成,GPT中生成图的尺寸要求是:256x256, 512x51 阅读全文
posted @ 2024-11-07 17:45 .Neterr 阅读(5) 评论(0) 推荐(0) 编辑
摘要: 多模态是每个LLM具有的能力,图片又是最常见的信息载体,GPT对图片的识别也很早就有了,随着GPT版本的迭代,效果越来越好。SK也是在很多就适配了图识文,只不过最近版本才支持本地图片的上传。 代码: var builder = Kernel.CreateBuilder() .AddOpenAICha 阅读全文
posted @ 2024-11-07 16:46 .Neterr 阅读(9) 评论(0) 推荐(0) 编辑
摘要: RAG(Retrieval-Augmented Generation)是一种结合信息检索和生成模型的自然语言处理方法。它通过检索相关文档片段作为生成模型的上下文,提高生成文本的准确性和相关性。RAG广泛应用于问答系统、对话系统和文本摘要等领域,兼具高效性和灵活性。公司的客户机器人都特别适合。下面的案 阅读全文
posted @ 2024-11-07 16:13 .Neterr 阅读(20) 评论(0) 推荐(0) 编辑
摘要: 参考:https://mp.weixin.qq.com/s/swPPTyIJa-2OJcyycBVJNQ 代码: //接入星火AI var httpClient = new HttpClient(new XinghuoOpenAIHttpClientHandler()); var builder = 阅读全文
posted @ 2024-11-05 15:39 .Neterr 阅读(8) 评论(0) 推荐(0) 编辑
摘要: 参考:https://www.cnblogs.com/ruipeng/p/18241147 代码 /// <summary> /// 依赖注入案例 /// </summary> public static class DependencyInjectionSample { public static 阅读全文
posted @ 2024-11-03 18:09 .Neterr 阅读(17) 评论(0) 推荐(0) 编辑
摘要: 2023年4月13日,Microsoft发布了一个 Semantic Kernel 的 VS Code 插件,Semantic Kernel Tools,用于进行Semantic Function的开发和调试工作。 Semantic Kernel Tools的安装只需要VS Code即可,不需要额外 阅读全文
posted @ 2024-11-02 16:30 .Neterr 阅读(18) 评论(0) 推荐(0) 编辑
摘要: 在 chatGPT 的推动下。LLM 简直火出天际,各行各业都在蹭。听说最近 meta 开源的 llama3 模型可以轻松在普通 PC 上运行,这让我也忍不住来蹭一层。以下是使用 ollama 试玩 llama3 的一些记录。 什么是 llama LLaMA(Large Language Model 阅读全文
posted @ 2024-10-30 17:34 .Neterr 阅读(88) 评论(0) 推荐(0) 编辑
摘要: Semantic Kernel默认主要支持两款模型:OpenAI和AzureOpenAI。对于开发者来说,这显然是不够的,尤其是当我们希望对接国内的一些强大模型,比如百度的文心一言、阿里的通义千问、搜狗的百川、智谱ChatGLM、科大讯飞的星火等。那么,我们应该怎么做呢? Semantie Kern 阅读全文
posted @ 2024-10-29 10:03 .Neterr 阅读(73) 评论(0) 推荐(0) 编辑
摘要: 参考: https://www.cnblogs.com/ruipeng/p/18221666 代码: var builder = Kernel.CreateBuilder() .AddOpenAIChatCompletion(modelId: Config.OpenAiChatModel, Conf 阅读全文
posted @ 2024-10-28 16:41 .Neterr 阅读(6) 评论(0) 推荐(0) 编辑
摘要: 插件 插件是Semantic Kernel的核心组件。通过插件,你可以将现有的API封装成一个集合,供AI调用,从而赋予AI原本无法执行的操作能力。在背后,Semantic Kernel利用了最新大型语言模型(LLM)中的原生功能——Function Calling,来帮助LLM进行规划并调用API 阅读全文
posted @ 2024-10-28 16:25 .Neterr 阅读(40) 评论(0) 推荐(0) 编辑
摘要: IAsyncEnumerable<T> 是 C# 8.0 引入的一个接口,用于表示可以异步遍历的集合。它允许你在不阻塞主线程的情况下,逐步获取集合中的元素。这在处理大量数据或长时间运行的操作时特别有用,因为它可以提高应用程序的响应性和资源利用率。 基本概念 异步迭代: IAsyncEnumerabl 阅读全文
posted @ 2024-10-28 10:22 .Neterr 阅读(30) 评论(0) 推荐(0) 编辑
摘要: 抽象工厂模式是一种创建型设计模式,它提供了一种方式来封装一组具有共同主题的单独工厂。抽象工厂模式通过提供一个超级工厂创建其他工厂的接口,使得客户端使用抽象的接口操作具体对象,从而实现客户端与具体工厂类解耦。 using System; // 抽象产品A public abstract class A 阅读全文
posted @ 2024-10-28 10:15 .Neterr 阅读(4) 评论(0) 推荐(0) 编辑
摘要: 什么是窗口函数 窗口函数(Window Function),又被叫做分析函数(Analytics Function)。 窗口函数允许用户在不显式分组查询的情况下对结果集进行分组和聚合计算。 窗口函数能够为结果集中的每一行计算类似排名、行号、百分比和移动聚合函数等值。 窗口函数原则上只能写在selec 阅读全文
posted @ 2024-10-23 19:23 .Neterr 阅读(48) 评论(0) 推荐(0) 编辑
摘要: 安装插件: yarn add webpack-merge-and-include-globally -D webpack.config.js const path = require("path"); const MergeIntoSingleFilePlugin = require('webpac 阅读全文
posted @ 2024-10-23 14:03 .Neterr 阅读(7) 评论(0) 推荐(0) 编辑
摘要: 处理 js 资源 有人可能会问,js 资源 Webpack 不能已经处理了吗,为什么我们还要处理呢? 原因是 Webpack 对 js 处理是有限的,只能编译 js 中 ES 模块化语法,不能编译其他语法,导致 js 不能在 IE 等浏览器运行,所以我们希望做一些兼容性处理。 其次开发中,团队对代码 阅读全文
posted @ 2024-10-23 13:21 .Neterr 阅读(26) 评论(0) 推荐(0) 编辑
摘要: 生产模式介绍 生产模式是开发完成代码后,我们需要得到代码将来部署上线。 这个模式下我们主要对代码进行优化,让其运行性能更好。 优化主要从两个角度出发: 优化代码运行性能 优化代码打包速度 生产模式准备 我们分别准备两个配置文件来放不同的配置 1. 文件目录 ├── webpack-test (项目根 阅读全文
posted @ 2024-10-23 09:46 .Neterr 阅读(23) 评论(0) 推荐(0) 编辑
摘要: 处理 Html 资源 1. 下载包 npm i html-webpack-plugin -D 2. 配置 webpack.config.js const path = require("path"); const HtmlWebpackPlugin = require("html-webpack-p 阅读全文
posted @ 2024-10-22 15:16 .Neterr 阅读(5) 评论(0) 推荐(0) 编辑
摘要: 处理字体图标资源 1. 下载字体图标文件 打开阿里巴巴矢量图标库 选择想要的图标添加到购物车,统一下载到本地 2. 添加字体图标资源 src/fonts/iconfont.ttf src/fonts/iconfont.woff src/fonts/iconfont.woff2 src/css/ico 阅读全文
posted @ 2024-10-22 14:36 .Neterr 阅读(9) 评论(0) 推荐(0) 编辑
摘要: 修改输出资源的名称和路径 1. 配置 const path = require("path"); module.exports = { entry: "./src/main.js", output: { path: path.resolve(__dirname, "dist"), filename: 阅读全文
posted @ 2024-10-22 14:11 .Neterr 阅读(20) 评论(0) 推荐(0) 编辑
摘要: 处理图片资源 过去在 Webpack4 时,我们处理图片资源通过 file-loader 和 url-loader 进行处理 现在 Webpack5 已经将两个 Loader 功能内置到 Webpack 里了,我们只需要简单配置即可处理图片资源 1. 配置 const path = require( 阅读全文
posted @ 2024-10-22 14:08 .Neterr 阅读(12) 评论(0) 推荐(0) 编辑
摘要: 处理样式资源 本章节我们学习使用 Webpack 如何处理 Css、Less、Sass、Scss、Styl 样式资源 介绍 Webpack 本身是不能识别样式资源的,所以我们需要借助 Loader 来帮助 Webpack 解析样式资源 我们找 Loader 都应该去官方文档中找到对应的 Loader 阅读全文
posted @ 2024-10-22 14:07 .Neterr 阅读(15) 评论(0) 推荐(0) 编辑
摘要: 介绍 模块化是指将一个大的程序文件,拆分成许多小的文件,然后将小文件组合起来。 模块化的好处 防止命名冲突 代码复用 高维护性 ES6 之前的模块化规范有 CommonJS => NodeJS、Browserify AMD => requireJS CMD => seaJS ES6 模块化语法 模块 阅读全文
posted @ 2024-10-21 18:37 .Neterr 阅读(15) 评论(0) 推荐(0) 编辑
摘要: class 类 ES6 提供了更接近传统语言的写法,引入了 Class(类)这个概念,作为对象的模板。通过 class 关键字,可以定义类。基本上,ES6 的 class 可以看作只是一个语法糖,它的绝大部分功能,ES5 都可以做到,新的 class 写法只是让对象原型的写法更加清晰、更像面向对象编 阅读全文
posted @ 2024-10-21 16:25 .Neterr 阅读(4) 评论(0) 推荐(0) 编辑
摘要: 简化对象写法 ES6 允许在大括号里面,直接写入变量和函数,作为对象的属性和方法。这样的书写更加简洁 //这样的书写更加简洁 let name = '尚硅谷'; let change = function(){ console.log('我们可以改变你!!'); } const school = { 阅读全文
posted @ 2024-10-20 22:03 .Neterr 阅读(5) 评论(0) 推荐(0) 编辑
摘要: 变量声明 let 关键字用来声明变量,使用 let 声明的变量有几个特点: 不允许重复声明 块儿级作用域 不存在变量提升 不影响作用域链 //声明变量 let a; let b,c,d; let e = 100; let f = 521, g = 'iloveyou', h = []; //1. 变 阅读全文
posted @ 2024-10-20 22:01 .Neterr 阅读(6) 评论(0) 推荐(0) 编辑
摘要: Webpack介绍 Webpack 是一个静态资源打包工具。 为什么需要打包工具 开发时,我们会使用框架(React、Vue)、ES6模块化语法,Less/Sass等css预处理器等语法进行开发。 这样的代码要想在浏览器运行必须经过编译成浏览器能识别的JS、CSS语法才能运行。 所以我们需要打包工具 阅读全文
posted @ 2024-10-19 10:57 .Neterr 阅读(5) 评论(0) 推荐(0) 编辑
摘要: 本文简介 本文将为你介绍一款在 .NET 环境下功能全面的 Cron 表达式解析库——TimeCrontab。这个库不仅支持 Cron 的所有特性,还提供了易于使用的 API,帮助开发者轻松构建和管理定时任务。无论你是开发 Web 应用、后台服务还是桌面程序,TimeCrontab 都能满足你的需求 阅读全文
posted @ 2024-02-27 15:47 .Neterr 阅读(154) 评论(0) 推荐(0) 编辑
摘要: Intro ASP.NET 8 中引入了 IExceptionHandler,我们可以针对某一类的 exception 做单独的处理, 可以将不同类型的异常有不一样的逻辑做不同的处理,异常处理可以变得更加灵活 Sample 来看一个简单的示例: 我们可以实现 IExceptionHandler 来处 阅读全文
posted @ 2024-01-18 14:00 .Neterr 阅读(91) 评论(0) 推荐(0) 编辑
摘要: 有时候我们会将一段 JSON 字符串存入数据库,以期在某个接口被调用时将其返回给客户端。这种返回一般不是原样返回:我们可能需要对结果包装一下,比如将数据包在 data 字段里同时提供 code 和 message 字段。 { "code": 200, "message": "OK", "data": 阅读全文
posted @ 2024-01-16 15:22 .Neterr 阅读(86) 评论(0) 推荐(0) 编辑
摘要: 同一类型存在于多个项目中,并且它们的命名空间也相同问题,解决方法就是给程序集起别名,引用类型时使用别名 项目文件中给程序集加别名: <PackageReference Include="IPNetwork2" Version="xxxx" > <Aliases>IPNetworkAlias</Ali 阅读全文
posted @ 2024-01-12 10:12 .Neterr 阅读(206) 评论(0) 推荐(0) 编辑
摘要: 在面对 生产者-消费者 的场景下, netcore 提供了一个新的命名空间 System.Threading.Channels 来帮助我们更高效的处理此类问题,有了这个 Channels 存在, 生产者 和 消费者 可以各自处理自己的任务而不相互干扰,有利于两方的并发处理,这篇文章我们就来讨论下如何 阅读全文
posted @ 2023-12-19 15:01 .Neterr 阅读(312) 评论(0) 推荐(0) 编辑
摘要: using System.Collections.Concurrent; using System.Diagnostics; { int threadCount = 20; List<Task> tasks = new List<Task>(); ConcurrentQueue<int> queue 阅读全文
posted @ 2023-10-08 14:45 .Neterr 阅读(67) 评论(0) 推荐(0) 编辑
摘要: 你是否有这样的经历,在与ChatGPT对话时,写出的文章总是缺乏情感,内容生硬?如果你的答案是肯定的,那么这篇文章可能会帮到你。今天给大家分享几个实用技巧,让你和ChatGPT的对话更加顺畅和高效,写出有人味,有创意、自己想要的内容。 首先我们先来了解一下ChatGPT是什么?它是一个基于人工智能的 阅读全文
posted @ 2023-08-04 15:29 .Neterr 阅读(295) 评论(0) 推荐(0) 编辑
摘要: 生成式AI之所以火爆,是通过ChatGPT引起的,因为这种智能对话(chat)式交互,颠覆人们对人机对话的认识和理解,它可以真人一样把上下文串起来,进行整体的理解和回复。当然,SK会在早期的版中就进行了适配,SK让聊天上下文留存是通过ChatHistory实现的,并且这些内存会区分角色,当前1.15 阅读全文
posted @ 2023-07-10 18:46 .Neterr 阅读(70) 评论(0) 推荐(0) 编辑
摘要: # ChatGPT ``` //chatGPT { var chatGPT = kernel.GetService(); var chatHistory = chatGPT.CreateNewChat("你是图书管理员"); Console.WriteLine("请提问:"); while (tru 阅读全文
posted @ 2023-07-10 17:27 .Neterr 阅读(132) 评论(0) 推荐(0) 编辑
摘要: # 为什么需要Memory LLM对自然语言的理解和掌握在知识内容的解读和总结方面提供了强大的能力。 但是由于训练数据本身来自于公共领域,也就注定了无法在一些小众或者私有的领域能够足够的好的应答。 因此如何给`LLM `提供足够多的信息上下文,就是如今的`LLM AI应用`可以充分发挥能力的地方了。 阅读全文
posted @ 2023-07-08 18:10 .Neterr 阅读(474) 评论(2) 推荐(1) 编辑
摘要: Semantic Kernel 是一种轻量级应用开发框架,用于快速开发融合 LLM AI的现代应用。以下简称SK 名词解释 LLM:大语言模型 Prompt:简单的理解它是给 AI 模型的指令。 Prompt Engineering:中文意思为提示工程,是一种人工智能(AI)技术,它通过设计和改进 阅读全文
posted @ 2023-07-06 15:12 .Neterr 阅读(869) 评论(0) 推荐(0) 编辑
摘要: 在C#中,可以使用CancellationToken来优雅地关闭线程。CancellationToken是一个结构体,用于向线程发送信号以请求线程停止运行。以下是一个使用CancellationToken的示例代码: ``` using System; using System.Threading; 阅读全文
posted @ 2023-06-27 16:16 .Neterr 阅读(194) 评论(0) 推荐(0) 编辑
摘要: .NET 是一个非常强大的框架,它允许开发人员管理来自各种源(如 JSON 文件、环境变量等)的应用程序设置。但是,有时开发人员需要一种方法来引用和替换其他设置中的配置值,以避免在多个地方维护相同的值,从而使配置文件变得混乱和难以维护。 为了解决这个问题,我们可以使用 GSoft.Extension 阅读全文
posted @ 2023-06-20 17:34 .Neterr 阅读(38) 评论(0) 推荐(0) 编辑
摘要: 在 ASP.NET Core 中,内置了非常强大的依赖注入容器功能。但是,如果不正确使用,也可能会引起一些问题。 问题 下面我们通过一段示例代码来说明这个问题。 public interface IServiceA{ string Get();}public interface IServiceB{ 阅读全文
posted @ 2023-06-20 17:25 .Neterr 阅读(24) 评论(0) 推荐(0) 编辑