- 博客(418)
- 收藏
- 关注
原创 SpringAI学习笔记(三)会话记忆功能
本文介绍了SpringAI框架实现会话记忆功能的方法。由于大模型本身不具备记忆能力,需要通过存储历史对话内容来实现记忆功能。文章详细说明了实现会话记忆的三个关键步骤:1)定义会话存储方式(可使用内存或数据库);2)配置会话记忆Advisor;3)为每个会话添加唯一ID。通过示例代码展示了如何使用MessageWindowChatMemory和InMemoryChatMemoryRepository实现会话记忆,并演示了不同会话ID下的对话效果。当使用相同会话ID时,模型能记住之前对话内容;而更换会话ID后,
2026-03-17 22:41:34
250
原创 SpringAI学习笔记(二)会话日志
这里我们以最简单的SimpleLoggerAdvisor为例,展示一下怎么利用Advisor来为我们做简单的会话日志输出。SpringAI利用AOP原理,提供了AI会话时的拦截、增强等功能,也就是Advisor。SpirngAI本身为我们提供了三个Advisor,分别是。可以看到,请求跟相应的结果都顺利打印到Console下了。只需要在application.yaml文件配置。
2026-03-11 00:21:55
189
原创 SpringAI学习笔记(一)SpringAI入门案例
需要下载ollama,并且拉取一个大模型到本地,详见教程。步骤四、开放接口给用户使用。启动项目,游戏开始了!步骤三、配置配置文件。
2026-03-07 12:04:19
425
原创 本地部署大模型(使用ollama)
本文介绍了在Windows系统上使用Ollama工具本地部署大模型的详细步骤。首先从官网下载安装Ollama,通过命令行验证安装成功。文章详细说明了常用命令功能,包括拉取、运行、停止模型等操作。以qwen3.5模型为例,演示了如何拉取0.8b参数规模的小型模型,并通过命令运行和交互使用。最后介绍了如何退出交互界面(/bye)和完全停止模型运行的方法。整个过程展示了Ollama简洁的操作方式,使其成为在个人电脑上部署和运行大模型的便捷工具。
2026-03-07 11:01:16
298
原创 win10桌面属性没有位置选项卡怎么办
右键Desktop,并选择修改,输入我们的新地址,例如我的是D盘的NewDesktop目录(、打开任务管理器,重启 Windows Explorer。按名称排序,并往下拖拉找到 Windows 进程模块。在Windows进程里面,我们再找到一个名叫。,重启过程会有一点闪屏之类的效果,不用惊慌。刷新完毕后,可以看到,此时在桌面已经成功转移了。、启动 “ 运行对话框 ”,打开注册表。即可打开我们的运行对话框,输入。
2024-07-14 10:33:27
6643
1
原创 Elastic的下载
启动完ElasticSearch后,我们就可以通过访问上面的 192.168.1.200:9200 来访问我们的ElasticSearch了。输入第一次启动控制台输出的账号密码,即可。下载好ElasticSearch后,双击 bin 目录下的 elasticsearch.bat 文件即可启动我们本地的ElasticSearch。(自己的密码自己记得,应该每个人生成的初始化密码都是不一样的)对于这个问题,我的解决方法是,修改了config目录下的 elasticsearch.yml 文件。
2023-08-06 22:20:14
1262
原创 ElasticSearch简介
什么是ElasticSearch?ElasticSearch 是一款非常强大的开源搜索引擎,可以帮助我们从海量的数据中快速找到需要的内容。什么是ELK?ElasticSearch 结合 Kibana、Logstash、Beats,被成为 Elastic Stack(ELK,Elastic 技术栈)。ELK 被广泛应用在 日志数据分析、实时监控等领域。其中,ElasticSearch 是 Elastic Stack 的核心,主要负责存储、搜索和分析数据。
2023-02-14 22:00:01
730
原创 RabbitMQ消息转换器
发送成功后,我们获取我们的Message可以看到,此时的content_type是 application/json,而消息的可读性也变高了,细心的小伙伴应该也可以看到,这里需要的字节数也变少了。为了看我们发送到rabbitMq的消息的形式,这里,我们还是把消费者服务先停掉,然后重新运行我们刚才发送User对象的测试方法。编写完成后,我们运行该方法。因此,我们正常使用的情况下,我们不会使用默认的JDK的序列化,而是会用我们的。为了观察我们发送到RabbitMQ的对象,我们这里先把监听服务关掉。
2023-01-31 22:15:31
1980
2
原创 RabbitMQ第五个实操小案例——主题交换机(TopicExchange)
这种写法的好处就是,以后假如我们多了来自中国的其他东西,比如china.science,以及加拿大的新闻,我们的监听者都不需要修改任何代码。代码走一波,我们修改一下我们的发布者的代码。如此,如果我们现在要监听的是中国的所有消息,那么我们的routingKey就是。,如果我们想监听的是所有国家的新闻,那么我们的routingKey就是。可以看到,这里计算我们新加了其他的消息,我们的。的监听者成功监听了来自中国的新闻和天气预报。的监听者监听到了来自全世界的新闻。把消息路由到不同的队列。的所有消息,而我们的。
2023-01-02 15:17:22
841
原创 RabbitMQ第四个实操小案例——DirectExchange
编写完代码,我们重启一下我们的消费者服务,然后我们看一下我们的RabbitMQ。可以看到,此时我们的交换机中,绑定的有两个queue,其中queue1监听的RoutingKey有blue和red、queue2监听的RoutingKey有yellow和red。可以看到,direct.queue1 监听到的消息有 Hello, Red 和 Hello, Blue,而direct.queue2 监听到的消息有 Hello, Red 和 Hello, Yellow.
2022-11-17 22:07:21
1002
原创 重启虚拟机启动Docker常见问题
虚拟机重启,Docker启动问题:1、Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?2、Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdoc
2022-11-17 21:41:46
2108
原创 RabbitMQ第三个实操小案例——发布者/订阅者(Publish/Subscribe)、广播交换器(FanoutExchange)
*步骤二、在消费者服务中,编写两个消费者方法,分别监听 fanout.queue1 和 fanout.queue2。可以看到,只发布了一条消息,但是通过交换机发布给两个Queue后,我们消费者的两个方法都监听到了我们同一条消息。写完配置类,我们重启一下我们的消费者服务类,然后我们到RabbitMQ上看一下我们的交换机和队列。监听的方法,现在应该已经写得滚瓜烂熟了吧,这里就直接贴代码了。我们再看一下队列,可以看到,我们两个队列也都注册成功了。OK,这么解释肯定是不够的,下面我们就来说一下。
2022-11-12 21:02:19
1687
原创 RabbitMQ第二个实操小案例——WorkQueue
但是,如果现在我们的发布者他每秒发布100条数据,而我们的消费者每秒只能处理90条数据,那么每秒我们的队列将有10条数据被卡在队列中,而队列的容量是有限的,随着累计的时间长了,我们的消息也会因为来不及处理,导致后面发送的消息没来得及被接收就被销毁掉了。看到这里,有些人可能会好奇,怎么消费者1执行的都是奇数的消息,消费者2执行的都是偶数的消息,其实这个不是偶然哈,这个是必然的,现在我们把消费者1的睡眠时间改成5,消费者2的睡眠时间改为50,再看一眼结果。然后,我们编写我们的两个消费者。废话少说,代码走起!
2022-11-12 17:00:55
1138
原创 lombok插件各个注解介绍
打开IDEA,点击File 》 Settings…然后点击Plugins(插件),在Marketplace里面搜索 Lombok 下载即可。(这里我因为已经下载好了,所以他存放的位置是 Installed)下载完成后,我们只需要在我们的项目中引入依赖就可以使用啦!
2022-11-08 14:17:18
848
原创 RabbitMQ第一个实操小案例
然后,我们创建两个Module,一个叫publisher(发布者),一个叫consumer(消费者),为了尽可能地干净,我用IDEA,直接创建了两个空白的Maven工程。这里,我又跑去发送了两次,可以看到,我们都可以正常的接收到消息。下面,我们来写一个最简单的实例,首先,创建一个空白的Module作为父工程。里面一共有7个Demo,下面我们就根据他给的Demo进行实操,熟悉一下我们的RabbitMq。前面的两种,是最基本的,只有发布者和订阅者和一个队列,并没有我们的交换机。OK,发送我们会了,那么接收呢?
2022-11-07 21:22:42
794
原创 什么是RabbitMQ
同步通讯:就像打电话,需要实时响应。异步通信:就像发微信,不需要马上回复。两种方式各有优劣,打电话可以立即得到响应,但是你却不能跟多个人同时通话。发微信可以同时与多个人收发信息,但是往往响应会有延迟。学SpringCloud的时候,我们的Feign 其实就是同步通讯的,他其实有以下这几个缺点耦合度高:(每次有新的需求,都需要更改代码)性能下降:(消费者需要等待提供者响应,如果调用链过长,那么响应的时间等于每次调用的时间之和)资源浪费。
2022-09-28 23:04:27
1939
原创 Docker镜像仓库
命令中挂载了一个数据卷registry-data到容器内的/var/lib/registry 目录,这是私有镜像库存放数据的目录。此时,我们使用我们的服务器的ip地址加端口号8080,即可看到我们私有的镜像仓库。那么,怎么往我们私有的镜像仓库拉取镜像和推送镜像呢?然后使用docker-compose up -d启动即可。可以查看当前私有镜像服务中包含的镜像。基于Docker官方提供的。
2022-09-21 23:31:06
1844
转载 数据库中索引会失效的几种情况(oracle)
创建Oracle 索引的目的是为了避免全表扫描数据,提高查询效率,但是如果sql语句写的不好致使索引失效,反而会影响数据查询效率。众所周知,添加索引的字段必需要在where条件后适当使用才会生效,如果连查询条件都没有,那肯定不会用到索引的。如果没有使用基于函数的索引,那么 where 子句中对存在索引的列使用函数时,会使优化器忽略掉这些索引。但是把函数应用在条件上,索引是可以生效的,把上面的语句改成下面的语句,就可以通过索引进行查找。不等于操作包括:,!
2022-09-05 22:39:45
4241
原创 Docker的自定义镜像
回顾一下,什么是镜像?镜像是将应用程序及其所需要的系统函数库、环境、依赖、配置打包而成。镜像的结构是分层的,每一层称为一个Layer。其中最底层包含基本的系统函数库、环境变量、文件系统 的层我们称之为BaseImage层最顶层作为镜像的入口,是镜像中应用启动的命令,我们称之为Entrypoint。其他在BaseImage层基础上添加的依赖、安装程序以及完成整个应用的安装和配置,处于BaseImage层和Entrypoint层之间,每一层我们称为一个Layer。下面直接来一个实例(...
2022-08-29 22:30:04
1504
原创 Docker的数据卷
而我的Nginx容器的html目录也映射到他上面,此时,我们修改本地的html目录下的文件或者修改Nginx容器下的html目录中的文件,另一个地方的文件也会发生响应的改变。首先,创建我们的Nginx容器,并将其 /usr/share/nginx/html 目录挂载到html数据卷。之后,我们就可以直接进入刚才说的数据卷映射的宿主机的html目录去修改我们的index.html文件了。然后,我们看一下我们的数据卷 html 的详细信息:(框中部分就是他的宿主机的位置了)。...
2022-08-29 22:15:06
821
原创 Docker的基本操作
例如,如果你的宿主机的ip地址是 192.168.10.11,那么你就访问 192.168.10.11:8090,如果看到这个页面,那么就说明访问成功了。文档告诉我们,docker save 后面可以跟options,而该options的可选项就是最下面的 Options,这里只有一个。拷贝我们的nginx1.22镜像文件成一个压缩包。我们要启动Nginx容器,我们就找到Nginx镜像,然后再到它里面,往下拉,找到标题为。,里面的版本都是可以指定下载的,这里我们指定一下,下载那个1.22版本。...
2022-08-29 22:14:03
694
原创 Docker的安装(以CentOS 7为例)
首先,我们需要联网,并下载我们的工具——yum。等再次看到Complete就表示下载成功啦。下载完成后,我们来启动我们的docker。
2022-08-29 21:57:37
635
1
原创 什么是Docker
微服务虽然具备各种各样的优势,但服务的拆分通用给部署带来了很大的麻烦。特别是一些大型项目组件较多,运行环境也较为复杂,部署时会碰到一些问题:依赖关系复杂,容易出现兼容性问题(分布式系统中,依赖的组件非常多,不同组件之间部署时往往会产生一些冲突。)开发、测试、生产环境有差异(在数百上千台服务中重复部署,环境不一定一致,会遇到各种问题)例如一个项目中,部署时需要依赖于node.js、Redis、RabbitMQ、MySQL等,这些服务部署时所需要的函数库、依赖项各不相同,甚至会有冲突。...
2022-08-29 21:56:23
459
原创 SpringCloud——网关Gateway
Spring Cloud Gateway 是 Spring Cloud 的一个全新项目,该项目是基于 Spring 5.0,Spring Boot 2.0 和 ProjectReactor 等响应式编程和事件流技术开发的网关,它旨在为微服务架构提供一种简单有效的统一的 API 路由管理方式。那么,我们为什么需要网关呢?我们先说一下,在前面的项目中,我们的系统是怎么玩的(架构)。1、首先,我们的系统分成了很多个微服务,例如Order和User。...
2022-08-07 22:35:08
2266
2
原创 SpringCloud——Http客户端Feign
类型作用说明修改日志级别包含四种不同的级别响应结果的解析器http远程调用的结果做解析,例如解析json字符串为java对象请求参数编码将请求参数编码,便于通过http请求发送支持的注解格式默认是SpringMVC的注解失败重试机制请求失败的重试机制,默认是没有,不过会使用Ribbon的重试注意一般情况下,默认值就能满足我们使用,如果要自定义时,只需要创建自定义的@Bean覆盖默认Bean即可。NONE不记录任何日志信息,这是默认值。BASIC方法一、在配置文件中进行配置。...
2022-07-31 18:29:21
1023
原创 SpringCloud——注册中心nacos
Nacos是阿里巴巴的产品,也是目前SpringCloud的一个组件,相比Eureka而言,功能更加丰富,在国内受欢迎的程度也更高。Nacos是需要下载的,Windows下载教程如下这是我在码云看到的一个热心网友分享的一个镜像,下载起来比较快,比起直接用家里的网络登录github快多了。)进去后,我们拉到最下面,下载Windows版本的安装包,下载完成后解压到本地。我解压的位置是Dnacos默认占用的端口号是接下来,我们讲一下怎么简单的使用Nacos进行服务的注册。...
2022-07-31 18:21:48
1279
原创 SpringCloud——负载均衡Ribbon
关于上一节说到的负载均衡,SpringCloud底层其实是利用了一个名为Ribbon的组件来实现的。他的流程如下我们发送的请求叫,这个请求会被我们的Ribbon接收,然后Ribbon向Eureka-server服务端请求名为user的服务,Eureka-server就把该服务所对应的服务列表(ip+端口号)返回给Ribbon,然后Ribbon使用负载均衡算法,轮询某一台服务器进行访问,再把结果响应给order。...
2022-07-31 16:35:18
560
原创 SpringCloud——注册中心Eureka
学习Eureka之前,我们先来说一下微服务中常用的两个术语。中,被其他微服务调用的服务。(提供接口给其他服务)中,调用其他服务的服务。(调用其他服务的接口)切记,提供者和消费者是针对进行划分的。前面的案例中,order就是消费者,user就是提供者。注意一个服务,既可以是消费者,也可以是提供者,当然也可以同时是提供者,也是消费者。比如,A调用B,B调用C,那么B对A而言就是提供者,B对C而言,就是消费者。...
2022-07-31 16:28:52
337
原创 SpringCloud——什么是微服务
*单体架构**将业务的所有功能集中在一个项目进行开发,打成一个包进行部署。优点1、架构简单2、部署成本低3、适合小型项目缺点1、耦合度高2、不利于大型项目的开发**分布式架构**根据业务功能对系统进行拆分,每个业务模块作为独立项目开发,称为一个服务。优点1、降低服务藕合2、有利于服务升级拓展。特征1、单一职责拆分粒度更小,每一个服务对应唯一的业务功能,做到单一职责,避免重复业务开发。2、面向服务对外暴露业务接口3、自治团队独立、技术独立、数据独立、部署独立。...
2022-07-31 16:17:53
431
原创 Vue使用iview组件库
步骤一、使用npm下载ivew组件库步骤二、在main.js中配置iview步骤三、使用iview组件在官网随便找一个来看看效果。这里以官网的按钮为例:我们直接抄他代码就完事了,比如,在我们的App.vue里面我们打算加一个蓝色的按钮和红色的按钮,那么就是:效果如下:其他的组件也是这么扣,然后我们再给他写个样式啥的,这不就搞定了嘛。...
2022-07-11 13:24:04
3378
原创 Vue脚手架(快速搭建Vue工程)
脚手架,即 预先定义好的目录结构及基础代码。而Vue的脚手架是Vue-cli,脚手架能帮助我们快速生成一个Vue的项目模板。他的主要功能如下:环境准备:node.js(>=6.x,首选8.x) + git然后我们就可以下载我们的vue-cli了。在cmd中输入:(-g表示全局安装,也就是global的缩写),npm记得设置淘宝的镜像源,会比较快。查看自己是否已经设置了淘宝的镜像源,请在cmd输入:如果显示结果如上,那么就说明已经设置过了,如果不是,那么请使用以下语句进行配置:配置完成后,我们就可以使用以下
2022-07-11 13:08:18
975
原创 Mysql求取超过经理收入的员工信息
题目:现有Employee表如下:员工和经理都有自己的Id,而员工特有一个ManagerId对应的是经理的Id。先要编写一段mysql代码查询员工收入超过他们经理的员工的姓名。例如上表我们应该输出的结果如下:解题思路:这里有个比较需要注意的点就是,要用两张Employee表来进行查询。我们给第一张Employee表取名为A,第二张取名为B。通过查询每个员工的经理信息(A.ManagerId = B.Id),并进行对比操作(A.Salary > B.Salary)。源码如下:select
2022-02-11 02:52:32
959
原创 Mysql求第N高的薪水
Mysql求第N高的薪水先来个简单的:假如有表如下:我们来一个求最高的薪水,那么代码其实应该一下子就能写出来:select salaryfrom EmployeeORDER BY salary descLIMIT 0,1那如果是求第二高的呢?select distinct salaryfrom EmployeeORDER BY salary descLIMIT 1,1这里有个点需要注意一下就是,假如前两个最高的值都为100,那么,逻辑上我们并不能将第二个100看成第二高,而是
2022-02-10 00:50:52
1077
原创 系统的直接内存
文章目录直接内存定义直接内存的基本使用内存溢出直接内存的释放及其原理直接内存定义直接内存(Direct Memory):直接内存是系统的直接内存,常见于NIO操作时,用于数据缓冲区。分配回收成本较高,但读写性能高,不受JVM内存回收管理。下面,我们说一下啊为什么使用直接内存读写的性能会比较高。请看下图:这里我们知道,我们的Java是运行在我们的虚拟机中的,通过虚拟机命令再去间接调用系统的内核函数,即我们上面看到的用户态跟内核态。(可以简单想象成,Java代码运行后调用本地方法区的代码,然后本地方
2022-01-28 23:57:32
1332
原创 StringTable的性能调优
文章目录StringTable的性能调优1、通过-XX:StringTableSize=桶个数调整2、考虑是否将字符串对象入池StringTable的性能调优1、通过-XX:StringTableSize=桶个数调整我们前面说过StringTable是靠我们的HashTable来实现的。即,当我们的空间足够大的时候,我们的数据就会比较分散,查询的效率也会因此降低,反之,当我们的空间比较小的时候,我们的数据就会比较集中,查询的效率也会因此提高。当然了,StringTable 的空间大小并不是越小越好,太
2022-01-26 01:07:21
820
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅