Hermes 记忆系统工作原理
Hermes 记忆系统工作原理 为什么需要记忆系统? AI 助手天生是“失忆”的——每次对话都是全新开始,不记得你是谁、喜欢什么、做过什么。Hermes 记忆系统就是为了解决这个问题而设计的。 核心目标:让 AI 助手能跨会话记住用户信息,减少重复解释,提升使用体验。 架构设计
Hermes 记忆系统工作原理 为什么需要记忆系统? AI 助手天生是“失忆”的——每次对话都是全新开始,不记得你是谁、喜欢什么、做过什么。Hermes 记忆系统就是为了解决这个问题而设计的。 核心目标:让 AI 助手能跨会话记住用户信息,减少重复解释,提升使用体验。 架构设计
缘起:为什么需要进化? AI 助手和软件一样,不能"写完即忘"。用户的需求会变,环境会变,初次设计的方案总有不完美的地方。 传统的方法是等人反馈 → 手动改代码。但这个过程太慢,而且很多问题用户根本不会反馈——他们只是默默忍受,或者干脆不用了。 钱学森的《工程控制论》给了我们一个思路:让系统自己进化
记录如何通过 Docker 部署 Hermes,并对接微信实现智能对话助手。 一、环境准备 1.1 服务器要求 操作系统:Ubuntu Docker:20.10+ 内存:至少 2GB 存储:至少 10GB 1.2 安装 Docke
很早之前写过一篇关于在家用旧笔记本搭建相册管理服务的内容,经过一年的优化,它如今已经是这个模样。 是的,目前它已经移到机柜里面,并且经过了三次迭代优化,最终的优化架构如下。 这套架构目前已经平稳运行了一年,我的大部分笔记、照片都已经放到了服务器上。 设备选择 主要的设备包括一台j4215软路由、一台
低成本家用NAS数据安全方案:基于Systemd Timer实现硬盘智能挂载/卸载 作为一名折腾党,之前提到我用家里闲置的旧工作站笔记本+硬盘盒,搭了一套低成本家用NAS系统,日常用来存照片、备份数据、跑轻量服务,性价比拉满。但前段时间修电路时,意外踩了个坑——硬盘盒是单独插电源供电的,电路断电时硬
背景 之前写过,我在家里用了一台旧的工作站笔记本做了服务器,连上一个绿联的5位硬盘盒实现简单的网盘功能,然而,还是觉的不太理想,比如使用filebrowser虽然可以备份文件和图片,当使用手机使用网页,由于网页无法获到实况图片的视频文件,上传到硬盘后就丢失了实况图片,所以就继续折腾一下 使用环境 m
最近购买了一块Esp32单片机,在Mac环境上进行开发,并且成功点亮LED灯和连上屏幕,为什么会上手选择Esp32开发板,主要考虑它自带Wi-Fi和蓝牙,单价也不高,就算后面不玩了,也能转成物联网的设备,连上家里的服务器作为一个联网传感器Esp32是一款由乐鑫(Espressif Systems)推
很早之前购买了kindle用来看电纸书,后面也逐渐吃灰了,尤其当去年kndle电子书店停止服务后,就一直没充过电了,中途有段时间想着,当时买的时候还挺贵,不能这么浪费了,给它充满电后,用数据线接上电脑,发现它竟然无法连接电脑了,哎,真的是鸡肋了,吐槽归吐,一直考虑怎么利用这块墨水屏,于是,想到了
折腾日记:如何在家搭建一个网盘-filebrowser使用最近,在家备份自己照片、文件时,由于家里没有nas,需要自己接上移动硬盘,先复制到第一个移动硬盘中,然后再备份到另一个硬盘,完成2份存储。觉得比较麻烦。一开始,为什么没有考虑nas或者百度网盘?一方面,是网上各种个人网盘,要是不开通会员,下载
基于ReflectASM+注解开发对象转换工具开发原因在项目对接数据中,会遇到了对外标准和内部标准对象转换问题,需要将上报的数据对象转换为我们项目中标准数据对象,当两边数据标准一致时,比较常见的方式,就是new一个标准的对象,set和get对接数据;或者orika复制对象。第一种方法,就会有长篇幅的
使用python实现一个SSH隧道界面开发原因MobaXterm作为一个全能型终端神器,功能十分强大,我经常使用其中隧道功能,使用内部无法直接服务器,查询数据,一般来说,一个本地端口对于一个隧道,但是MobaXterm,免费版本最多只能建立三个隧道,比如,我需要一次查询统计,就会用到四个隧道的操作,
开发原因ReflectASM 是一个非常小的 Java 类库,通过代码生成来提供高性能的反射处理,自动为 get/set 字段提供访问类,访问类使用字节码操作而不是 Java 的反射技术,因此非常快。在单元测试的时,需要模拟制造一些数据去测试我们代码会不会出现明显的异常(字段导致、空指针),除了自己
开发原因之前使用的开源框架里面,有个代码生成器,可以一键生成的重复业务代码(包括:controller、service、mapper、entity),虽然很好用,但是生成器属于框架定制化开发工具,要是其他项目要是想使用这个生成器,需要同时启动前后端的服务,在页面上配置表和导出的路径,这样操作就非常的
问题项目需要在内网(不联网)进行部署我们的后端服务,框架涉及使用redis做成缓存,由于内网的系统为centos7,我们在部署的时候,遇到了编译redis6缺少环境的文件问题,后来把环境包导入内网环境后,还是存在各种依赖的缺失问题。使用了之前其他服务器部署的解决方案,虽然能解决掉服务的部署问题,但是
这个方案只完成了一个简单的demo,估计完成了80%后,由于方案的修改,这个部分功能也就作废了,打算写篇文章记录一下,大致的思路用到的两个知识点:P6Spy是一个可以用来在应用程序中拦截和修改数据操作语句的开源框架。 通过P6Spy我们可以对SQL语句进行拦截,相当于一个SQL语句的记录器,这样我们
题目地址题目描述给你一棵二叉搜索树,请你 按中序遍历 将其重新排列为一棵递增顺序搜索树,使树中最左边的节点成为树的根节点,并且每个节点没有左子节点,只有一个右子节点。示例 1:输入:root = [5,3,6,2,4,null,8,1,null,null,null,7,9]输出:[1,null,2,
题目地址题目描述你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都 围成一圈 ,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警 。给定一个代表每个房屋存放金额的非负整数数组
题目地址题目描述Trie(发音类似"try")或者说前缀树是一种树形数据结构,用于高效地存储和检索字符串数据集中的键。这一数据结构有相当多的应用情景,例如自动补完和拼写检查。请你实现Trie类:Trie()初始化前缀树对象。voidinsert(Stringword)向前缀树中插
题目地址题目描述给你一个二叉搜索树的根节点root,返回树中任意两不同节点值之间的最小差值。注意:本题与530:https://leetcode-cn.com/problems/minimum-absolute-difference-in-bst/相同示例1:输入:root=[4,2,6,1,3]输
题目地址题目描述给定一组非负整数nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。注意:输出结果可能非常大,所以你需要返回一个字符串而不是整数。示例1:输入:nums=[10,2]输出:"210"示例2:输入:nums=[3,30,34,5,9]输出:&qu
题目地址题目描述给你一个整数n,请你找出并返回第n个丑数。丑数就是只包含质因数2、3和/或5的正整数。示例1:输入:n=10输出:12解释:[1,2,3,4,5,6,8,9,10,12]是由前10个丑数组成的序列。示例2:输入:n=1输出:1解释:1通常被视为丑数。解法classSolution{p
https://leetcode-cn.com/problems/search-in-rotated-sorted-array/题目描述已知一个长度为n的数组,预先按照升序排列,经由1到n次旋转后,得到输入数组。例如,原数组nums=[0,1,2,4,5,6,7]在变化后可能得到:若旋转4次,则可以
题目地址题目描述给你一个整数n,请你判断n是否为丑数。如果是,返回true;否则,返回false。丑数就是只包含质因数 2、3和/或 5 的正整数。 示例1:输入:n=6输出:true解释:6=2×3示例2:输入:n=8输出:true解释:8=2×2×2示例3:输入:n=14输出:false解释:1
授权码(authorizationcode)方式,指的是第三方应用先申请一个授权码,然后再用该码获取令牌。这种方式是最常用的流程,安全性也最高,它适用于那些有后端的Web应用。授权码通过前端传送,令牌则是储存在后端,而且所有与资源服务器的通信都在后端完成。这样的前后端分离,可以避免令牌泄漏。需求背景
题目地址题目描述给你一个m行n列的矩阵matrix,请按照顺时针螺旋顺序,返回矩阵中的所有元素。示例1:输入:matrix=[[1,2,3],[4,5,6],[7,8,9]]输出:[1,2,3,6,9,8,7,4,5]示例2:输入:matrix=[[1,2,3,4],[5,6,7,8],[9,10,
问题项目在正式上线后,偶发性出现项目的"假死"的问题,项目无法响应前端的请求,一开始,架构师查询到存在大量锁表的情况,去掉了一些长时间任务的更新的事务,同时提高了JVM的-Xmx和-Xms的大小,第一天虽然情况有所缓解,在第二天访问量上去后,还是出现了假死的问题。于是,在顶着客户
管道-过滤器模式的体系结构是面向数据流的软件体系结构。它最典型的应用是在编译系统。一个普通的编译系统包括词法分析器,语法分析器,语义分析与中间代码生成器,优化器,目标代码生成器等一系列对源程序进行处理的过程。人们可以将编译系统看作一系列过滤器的连接体,按照管道-过滤器的体系结构进行设计。此外,这种体
作为JAVA开发者,JDK一定天天都会用到,所以想这周编译一下JDK源码,项目一直在使用JDK8,所以可以编译JDK9,这里的JDK指的是openJDK,每个版本的JDK编译都需要一个BootJDK(可以参考building.html中编译指南),比如JDK9,就需要JDK8openJDK做为GPL
AOP(AspectOrientedProgramming),即面向切面编程,可以说是OOP(ObjectOrientedProgramming,面向对象编程)的补充和完善。需求背景有一个接口实现合并文件,当文件过多时,预计要三分钟或者更长时间,这个时候前端调用的时候,就会出现接口的超时的问题,于是
项目现状由于项目一开始时间比较紧,
在模板模式(TemplatePattern)中,一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式。最近,在项目中,需要调用用户提供的接口发送微信模板信息,然后提供了信息模板{"Personnel
策略模式(StrategyPattern)属于对象的行为模式。其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。其主要目的是通过定义相似的算法,替换ifelse语句写法,并且可以随时相互替换。由于项目中,
由于之前和外包团队进行合作。在通用功能的调用,发现不同团队的编写水平不一致,导致通用功能很多地方都需要重构;所以自己在重构代码的同时,也整理自己写代码的习惯1.一个方法只做一件事或者一个方向的事情赋值set;保存save;判断is;转换to1)获取单个对象的方法用get做前缀。2)获取多个对象的方法
题目地址题目描述给定一个二叉树,返回它的前序遍历。示例:输入:[1,null,2,3]12/3输出:[1,2,3]进阶:递归算法很简单,你可以通过迭代算法完成吗?解法cpp迭代classSolution{publicList<Integer>preorderTraversal(TreeN
题目地址题目描述给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。示例1:输入:[1,3,5,6],5输出:2示例2:输入:[1,3,5,6],2输出:1示例3:输入:[1,3,5,6],7输出:4示例
题目地址题目描述给定一个含有n个正整数的数组和一个正整数s,找出该数组中满足其和≥s的长度最小的连续子数组,并返回其长度。如果不存在符合条件的连续子数组,返回0。示例:输入:s=7,nums=[2,3,1,2,4,3]输出:2解释:子数组[4,3]是该条件下的长度最小的连续子数组。进阶:如果你已经完
题目地址题目描述给你两个二进制字符串,返回它们的和(用二进制表示)。输入为非空字符串且只包含数字1和0。示例1:输入:a="11",b="1"输出:"100"示例2:输入:a="1010",b="1011&qu
题目地址题目描述你有两个字符串,即pattern和value。pattern字符串由字母"a"和"b"组成,用于描述字符串中的模式。例如,字符串"catcatgocatgo"匹配模式"aabab"(其中"cat
题目地址题目描述给定一个非空二叉树,返回其最大路径和。本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点。示例1:输入:[1,2,3]1/\23输出:6示例2:输入:[-10,9,20,null,null,15,7]-10/\920/\157输
@TOCJava集合(Collection)类是我们在工作中运用最多的、最频繁的类。并且集合可以动态扩容。方便开发需求。集合类通常存在于java.util包中,主要由Collection和Map两个体系构成。Collection主要有三个子接口,分别为List(列表)、Set(集)、Queue(队列
题目地址个人博客地址题目描述给你一个整数数组arr和一个目标值target,请你返回一个整数value,使得将数组中所有大于value的值变成value后,数组的和最接近target(最接近表示两者之差的绝对值最小)。如果有多种使得和最接近target的方案,请你返回这些整数中的最小值。请注意,答案
题目地址个人博客地址题目描述判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。示例1:输入:121输出:true示例2:输入:-121输出:false解释:从左向右读,为-121。从右向左读,为121-。因此它不是一个回文数。示例3:输入:10输出:false解
题目地址个人博客地址题目描述给定一个未排序的整数数组,找出最长连续序列的长度。要求算法的时间复杂度为O(n)。示例:输入:[100,4,200,1,3,2]输出:4解释:最长连续序列是[1,2,3,4]。它的长度为4。解法JAVAclassSolution{publicintlongestConse
题目地址题目描述给你一个长度为n的整数数组nums,其中n>1,返回输出数组output,其中output[i]等于nums中除nums[i]之外其余各元素的乘积。示例:输入:[1,2,3,4]输出:[24,12,8,6]提示:题目数据保证数组之中任意元素的全部前缀元素和后缀(甚至是整个数组)
题目地址个人博客地址题目描述矩形蛋糕的高度为h且宽度为w,给你两个整数数组horizontalCuts和verticalCuts,其中horizontalCuts[i]是从矩形蛋糕顶部到第i个水平切口的距离,类似地,verticalCuts[j]是从矩形蛋糕的左侧到第j个竖直切口的距离。请你按数组h
题目地址题目描述给你一棵二叉树,每个节点的值为1到9。我们称二叉树中的一条路径是「伪回文」的,当它满足:路径经过的所有节点值的排列中,存在一个回文序列。请你返回从根到叶子节点的所有路径中伪回文路径的数目。示例1:输入:root=[2,3,1,3,1,null,1]输出:2解释:上图为给定的二叉树。总
如何构建一棵红黑树(分析TreeMap源码)@TOC之前一直就想关于红黑树的文章,JAVA在JDK1.8在hashMap引入了红黑树,解决特殊情况下当链表过程导致的查询过慢的问题。在JDK1.7中,我们都知道hashMap使用"数组"+链表的数据结构实现,使用hashcode取模
题目地址题目描述给定一个二叉树,检查它是否是镜像对称的。例如,二叉树[1,2,2,3,4,4,3]是对称的。1/\22/\/\3443但是下面这个[1,2,2,null,3,null,3]则不是镜像对称的:1/\22\\33进阶:你可以运用递归和迭代两种方法解决这个问题吗?解法JAVA递归class
题目地址个人博客地址题目描述给定n个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为1。求在该柱状图中,能够勾勒出来的矩形的最大面积。以上是柱状图的示例,其中每个柱子的宽度为1,给定的高度为[2,1,5,6,2,3]。图中阴影部分为所能勾勒出的最大矩形面积,其面积为10个单位。解
198.打家劫舍题目地址题目描述你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你不触动警报装置的情况下,一夜之内能
题目地址题目描述给定一个经过编码的字符串,返回它解码后的字符串。编码规则为:k[encoded_string],表示其中方括号内部的encoded_string正好重复k次。注意k保证为正整数。你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。此外,你可以
974.和可被K整除的子数组个人博客题目地址题目描述给定一个整数数组A,返回其中元素之和可被K整除的(连续、非空)子数组的数目。示例:输入:A=[4,5,0,-2,-3,1],K=5输出:7解释:有7个子数组满足其元素之和可被K=5整除:[4,5,0,-2,-3,1],[5],[5,0],[5,0,
题目地址个人博客地址题目描述给定一个包含n+1个整数的数组nums,其数字都在1到n之间(包括1和n),可知至少存在一个重复的整数。假设只有一个重复的整数,找出这个重复的数。示例1:输入:[1,3,4,2,2]输出:2示例2:输入:[3,1,3,4,2]输出:3说明:不能更改原数组(假设数组是只读的
146.LRU缓存机制题目地址题目描述运用你所掌握的数据结构,设计和实现一个LRU(最近最少使用)缓存机制。它应该支持以下操作:获取数据get和写入数据put。获取数据get(key)-如果密钥(key)存在于缓存中,则获取密钥的值(总是正数),否则返回-1。写入数据put(key,value)-如
LeetCode面试题64.求1+2+…+n题目地址题目描述面试题64.求1+2+…+n求1+2+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。示例1:输入:n=3输出:6示例2:输入:n=9输出:45限制:1<
最小覆盖子串题目链接题目描述给你一个字符串S、一个字符串T,请在字符串S里面找出:包含T所有字符的最小子串。示例:输入:S="ADOBECODEBANC",T="ABC"输出:"BANC"说明:如果S中不存这样的子串,则返回空字符串&quo
LeetCode105.从前序与中序遍历序列构造二叉树题目链接3/\920关于二叉树的遍历,其实有个比较好记的方法,假设有一个棵树,只有三个节点,左节点树,当前节点,右边节点。假设需要打印中间节点(根节点),有三种输出方式1.按照左、中、右,9-3-20由于中间节点在中间输出,称为前序遍历,同理2.
链表的快慢指针的使用1.环形链表LeetCode题目141.环形链表题目描述给定一个链表,判断链表中是否有环。为了表示给定链表中的环,我们使用整数pos来表示链表尾连接到链表中的位置(索引从0开始)。如果pos是-1,则在该链表中没有环。示例1:输入:head=[3,2,0,-4],pos=1输出:
面试题47.礼物的最大价值题目描述在一个m*n的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。给定一个棋盘及其上面的礼物的价值,请计算你最多能拿到多少价值的礼物?示例1:输入:[[1,3,1