- 博客(71)
- 资源 (3)
- 收藏
- 关注
原创 浅谈 Redis 的单线程模型:为何它能笑傲江湖?
摘要: Redis采用单线程模型处理核心网络I/O和键值读写,却能实现十万级QPS,其高性能源于:1)纯内存操作;2)I/O多路复用技术(如epoll)实现非阻塞监控与延迟写入;3)避免多线程锁竞争和上下文切换开销。Redis 6.0引入多线程仅优化网络I/O的字节流处理,核心命令执行仍由单线程完成,兼顾性能与线程安全。这种设计通过事件驱动和反应堆模式,最大化CPU利用率,成为高并发场景下的经典架构范例。(149字)
2026-06-08 16:39:49
185
原创 大模型 API 省钱秘籍:带你读懂什么是“缓存命中”
摘要: 大模型API中的"缓存命中"能大幅降低使用成本。当用户重复发送相同文本时,系统会复用之前计算的中间状态(KV Cache),而非重新处理,从而节省算力。DeepSeek等厂商通过磁盘缓存技术将这部分Token价格降低50%-90%。要最大化缓存命中率,需将固定文本前置、变动内容后置,避免污染缓存前缀。正确设计Prompt结构可显著提升响应速度并降低运营成本,这是规模化AI应用的重要优化手段。
2026-05-27 15:56:13
1368
原创 从 @Tool 装饰器到 MCP,浅析大模型工具生态与 Function Calling 的底层逻辑
本文解析了大模型工具生态中的核心概念与底层逻辑。通过"餐馆点餐"类比,区分了工具定义(菜单)、Function Calling(点菜)和工具执行(做菜)三个环节。重点对比了本地@tool装饰器与跨平台MCP协议:@tool适合快速开发但绑定特定框架,MCP则实现跨语言/跨框架的工具复用。文章还探讨了动态工具发现方案(工具检索器和分层架构)以应对工具爆炸问题。最终指出未来架构将是Function Calling作为决策核心,JSON Schema作为沟通语言,@tool与MCP互补共存,构建可扩展的生产级AI
2026-05-22 16:43:09
432
原创 浅析大模型 Agent 的记忆(Memory)机制
摘要: 本文深入探讨了大模型Agent记忆机制的设计挑战与解决方案。首先分析了全量历史对话堆叠带来的三大技术灾难:计算复杂度爆炸、中间迷失现象和商业化成本问题。随后指出纯向量RAG方案的"时序坍塌"缺陷,即语义相似但时间冲突的信息召回问题。核心解决方案是构建基于状态机的记忆固化系统,通过异步解耦、信息降维和冲突状态机实现精准记忆管理。最后提出混合检索架构(图谱路由+倒排索引+向量召回)解决复杂关联查询问题,并总结工业级记忆系统的三大基石:多级缓存设计、冷热分离与遗忘曲线、计算异步化。
2026-05-21 23:49:38
452
原创 别让大模型“胡说八道”:拆解 LLM 的“幻觉”与“中年健忘症”
摘要: 大模型常出现"幻觉"(一本正经地胡说八道)和"迷失在中间"(遗忘长文本中间内容)两大问题。前者源于模型本质是概率续写机而非事实库,后者因注意力机制导致中间信息被忽略。解决方案包括:1)采用RAG架构,通过检索和重排关键片段;2)优化提示词,如事实锚定、思维链和指令后置。这些方法能有效约束模型输出,平衡创造力和准确性。(149字)
2026-05-20 23:35:13
253
原创 从“开卷考试”到“精准喂饭”,工业级 RAG 检索质量的演进与调优血泪史
工业级RAG检索质量演进与调优实践 本文系统梳理了工业级RAG(检索增强生成)技术在落地过程中的关键挑战与优化路径。作者将大模型比作"博古通今但记性不好的天才",而RAG则是为其配备的"联网iPad",通过检索外部知识库解决原生大模型的五大痛点:时效性、幻觉、私有数据访问、可追溯性和微调成本。 文章重点剖析了数据切片技术的演进历程:从早期的固定长度切片,到基于文档结构的规则切片,再到更先进的语义切片和上下文增强切片。针对不同业务场景(如法律金融条文与结构化报告),作者提出了差异化的切片策略选择建议。 在检索
2026-05-18 23:49:09
556
原创 从 ReAct 到“越走越远”:为什么 AI 总顺着你胡说?深度解构大模型的盲区与自救
在大模型的“终极救赎”演进完全普及之前,作为使用 AI 的人类,我们该如何自保?既然自回归的上下文污染不可逆,那就物理刷新它。当你发现和 AI 的对话已经开始陷入泥潭、方向不对时,千万不要试图在当前的对话框里去纠正和反驳它(因为你的反驳又会变成新的上下文噪声)。提炼出前几轮对话中真正正确的几句核心结论,点击“New Chat”(新建对话),开辟新局。只有这样,才能彻底洗掉那条已经歪掉的自回归误差链,让注意力矩阵重新洗牌,迎来光明。
2026-05-18 01:00:38
807
原创 LLM 和 AI Agent 别搞混了
《LLM与AI Agent的区别:从知识库到行动者的进化》 文章通过比喻和公式解析了LLM(大语言模型)与AI Agent的本质区别:LLM如同知识渊博但行动受限的教授,擅长生成内容却无法执行任务;而AI Agent则是具备行动力的助教,能主动规划任务、调用工具并交付结果。二者的核心差异体现在三个维度:AI Agent=LLM+规划能力+记忆系统+工具使用,实现了从被动应答到主动执行、从内容生成到问题解决、从信息孤岛到联网协作的跨越。随着AI发展,我们正从"提示词工程时代"迈向"智能体工程时代",让AI不仅
2026-05-15 23:25:04
361
原创 RAG已死?
《RAG的进化:从检索增强到上下文管理的技术跃迁》 摘要:随着大模型上下文窗口的扩展,"Naive RAG"架构确实面临淘汰,但检索技术的核心价值正在经历深刻转型。2026年的技术发展呈现三大趋势:1)超长上下文窗口使模型可直接处理完整文档,但需要解决"注意力稀释"问题;2)上下文缓存技术成为新的性能优化关键,实现计算资源的智能复用;3)Agentic RAG推动检索向主动式理解转变,模型开始自主决策信息调用方式。现代RAG开发者应关注图谱理解、缓存管理和多模态处理等
2026-05-13 19:49:18
337
原创 pytorch中的损失函数使用
本文介绍了PyTorch中常用的损失函数及其实现。首先讲解了二元交叉熵损失函数(BCE)的计算公式和应用场景,通过代码示例展示了如何使用nn.BCELoss()。接着介绍了多分类交叉熵损失函数的概念和两种目标值处理方式(顺序标签和概率值)。最后通过一个简单的神经网络模型示例,演示了损失函数在实际训练中的应用流程,包括模型定义、前向传播、损失计算、反向传播和参数更新等步骤。代码示例涵盖了nn.Linear、nn.MSELoss和优化器的基本使用方法。
2026-05-11 16:36:16
303
原创 深度学习中的参数更新方法
SGD:基础款,手动挡,容易震荡。:加了惯性,跑得快,但还得手动调学习率。AdaGrad:能自动调学习率,但容易过早停止(学习率降太快)。RMSProp:解决了过早停止问题,只关注近期梯度。:既有惯性,又能自动调速,全能选手。
2026-05-10 11:45:47
495
原创 Could not retrieve mirrorlist http://mirrorlist.centos.org错误解决方法
mirrorlist.centos.org 不再被支持。使用sed命令批量替换CentOS镜像源。
2024-10-21 11:17:43
2619
13
原创 SpringBoot的maven项目自定义打包结构
我们在打包的时候,可以将配置文件、其他静态资源文件、jar包分开,便于我们平时的维护。-- 定义打包后的文件存放位置,一般为项目名 --><build><plugins>-- 开始处理启动模块jar包, --><plugin>--在启动模块的jar中排除以下文件类型,这是为了避免启动模块jar和后续的config目录下存在两份相同资源文件从而导致项目无法重启--><excludes><archive><manifest>-- 执行的主程序路径 -->
2024-06-04 17:59:15
936
原创 Mysql设置定时全量同步与增量同步实操
数据库数据备份是任何业务系统都应考虑到的方面。否则一旦数据库发生误删(或者恶意的删库跑路),那可真是欲哭无泪。我所了解的常见备份方式有两种:全量备份与增量备份。
2024-02-27 11:16:44
5364
原创 Async注解详解-Async的作用以及原理
也可以在类型级别使用,在这种情况下,类型的所有方法都被视为异步的。但是,请注意,在@Configuration类中声明的方法上不支持@Async。分别进入通知器的通知(advice,表示实际增强的逻辑入口)构造方法与切点(pointcut,表示哪些类或者哪些方法需要被拦截)构造方法一探究竟。我在调用同事的一个方法时,莫名奇妙的报了空指针,当前请求执行了一部分后,上下文中的用户信息居然丢失了!看的出来,这个注解可以用在类上,也可用在方法上。注解标注的方法时,是调用的具有切面定义的代理对象,并异步执行该方法。
2024-02-22 15:55:28
1721
原创 JAVA使用RestTemplate访问URL带用户名密码验证的Http请求
信息设置在header后,并通过exchange方法进行http请求,最终在创建连接时,其携带了。直接拼接在url中,然后通过restTemplate.getForObject进行请求导致的。通过debug,可以发现,restTemplate.getForObject进行请求时,携带的。根据报错结果可以推测请求失败是因为该http请求在目的主机鉴权失败。:请求报错:“401 Unauthorized…在对代码修改后,再次调用接口,访问成功。信息直接拼接在url中,,因此导致鉴权失败;信息,因此鉴权成功。
2024-02-20 10:32:17
1348
原创 【操作系统】I/O软件层次结构
偶然看到“程序员的护城河是什么”这个话题,作为一个工作两年多的程序员吧,经常看到网上关于各种35岁危机、裁员甚至猝死之云云。我的护城河是什么?我的护城河不单单是指一直作为一个程序员不被开除,而是我有哪些能力让自己始终不担心生计?或者说是应该提升哪些能力使得自己不对未来那么担忧和迷茫。思考了一段时间。首先,要排除家里“有矿”的前提(就算有矿那也得在精神层面不断提升自己吧)。我觉得第一就是要有始终学习的习惯,不然淘汰只会提前到来;
2023-11-22 17:13:28
529
原创 【操作系统】文件系统的实现
文件系统从上往下分为了五层,分别是用户调用接口、文件目录系统、存取控制模块、逻辑文件系统与文件信息缓冲区、物理文件系统。在操作系统中,目录实现主要有两种方式:线性列表是一种常见的数据结构,有链表和数组两种。我们将FCB(文件控制块)中的信息简化为文件名与文件索引节点指针后,文件的目录结构如下:链表:数组:哈希表依赖于哈希算法,是一种散列算法,文件名进行哈希计算后得到一个值,将这个值作为索引。相较于线性列表,哈希表的方式使得文件名与索引之间建立了一种映射关系,查询效率更高。文件最终是保存在磁盘上,磁盘的存
2023-11-21 17:19:11
1205
原创 【操作系统】文件系统之文件共享与文件保护
为了实现文件的共享,引入了“计数器”字段,当一个文件每被一个用户所共享,那么计数器就加一。,链接文件的文件内容指向了原文件。从实现方式来看,很明显硬链接的效率会更高一些,但是另一方面,软链接相较于硬链接要更加安全(不会删除原文件)。通过索引节点表中的索引节点指针是否指向真是文件索引节点的不同,文件共享的方式分为了。加密保护,即使用加密算法对文件内容进行了加密处理,如果没有密钥,即便获取了文件也无法识别正确内容。硬链接的索引节点指针直接指向真实文件的索引节点,当硬链接全部删除后,文件将会被删除。
2023-11-21 14:05:15
507
原创 【操作系统】虚拟内存浅析
所谓的“固定分配”就是操作系统分配固定大小的总页面,不够时不能向操作系统申请新的内存空间;所谓的“局部置换”,是说分配的内存不足时,只能在进程所分配的内存页中进行置换;而“全局置换”是可以从主存中其余空闲的内存中进行置换。由于进程在执行过程中,并不会一次性将程序装入,因此每当需要装入新的程序部分到内存时,就会进行请求。相对应的,如果页面置换算法判断为淘汰时(例如访问频率低),内存中的程序就需要对换入硬盘缓存中。当程序执行过程中,发现所需要的部分未加载至内存,将会发生缺页中断,将所需部分程序装入至内存。
2023-11-17 17:26:08
325
原创 【操作系统】内存的非连续分配管理
每个进程所分配的内存都是一个连续分区(一个分区内部)。那么会导致什么问题呢?由于每个进程的内存空间都是连续分配,而进程所需要的内存空间并不会完全与分配的内存分区大小一致,也就导致了内存的“碎片化”。对于固定分区分配而言,“碎片”来自于每个进程的分区内部;对于动态分区分配而言,每次都要从用户区寻找一块符合条件的分区,导致整个用户区在进程的各个内存分区之间夹杂很多“外部碎片”。而“碎片化”直接将会导致内存的利用率降低。
2023-11-16 17:47:34
759
原创 linux安装nginx并配置服务的详细步骤
zlib 库提供了很多压缩和解压缩的方式,nginx 使用 zlib 对 http 包内容进行 gzip 压缩。nginx安装前需要一些依赖,如果已经安装了则忽略。自己创建一个文件夹,上传刚刚下载的压缩包。#该模块提供nginx的基本状态信息。该依赖可以提供nginx重写功能。安全套接字层密码库,用于通信加密。选择要安装的nginx版本并下载。解压文件后进入文件夹。#所属用户nginx。
2023-11-15 17:57:39
294
原创 【操作系统】存储器的多层结构以及进程运行的准备工作
一个程序在内存中可能存在多个进程,操作系统可以考虑将不活跃的进程暂时交换到硬盘缓存中,达到内存扩充的目的。在一个操作系统中,我们的程序不是运行在磁盘上,而是运行在操作系统的内存中。内存,广义上可以认为就是我们电脑中的内存条,这也是为什么内存越大,运行的程序支持的越大/多。装入程序会根据程序指定的内存位置将需要运行的程序分配(如果指定位置被占用,重新计算位置)到“合适的位置”,即空闲空间中。当内存中存在多个运行的进程,假如有程序正在进行装入过程,那么必须避免正在运行的进程取访问装入程序的内存地址。
2023-11-10 15:16:48
210
原创 【操作系统】进程间的协作(三)
总之,条件变量是封装于管程内部,当进程执行所需的资源不足时,管程会通过条件变量将进程移入对应的条件队列(使用wait);当该条件满足时就会唤醒进程并移入就绪队列(signal)去重新获取所需资源(当然依旧存在被阻塞的可能性)。(进行PV操作的函数)组成的管理程序(封装)。注意:管程是由进程去调用的一个。管程,即进程管理,用于。
2023-11-07 15:42:45
140
原创 【操作系统】进程间的协作(一)
需要注意的是,以上三种通信方式是同一计算机中进程的通信方式。而我们通常两个计算机之间的通信,实际上是进程间的通信,只不过是两个计算机的进程通信,他的通信方式不同于以上三种方式。进程间通过消息传递的方式进行通信,可以分为两类:直接通信、间接通信。与共享内存有点类似,区别在于消息传递的间接通信是通过原语实现的。进程通信即进程间的信息交换;直接通信:点到点发送;间接通信:广播信箱;
2023-10-31 15:37:13
297
原创 【操作系统】调度算法介绍
不同操作系统中可能根据不同的需求而采用不同的调度算法。常见的调度算法有先来先服务(FCFS)、短作业优先(SJF)、高响应比优先调度(HRRN)、优先级调度(PSA)、时间片轮转调度(RR)、多级反馈队列调度(MFQ)。
2023-10-30 17:10:15
531
原创 【操作系统】进程的运行机制
操作系统通过原语来对进程进行有效的管理,包括创建进程、撤销已有的进程、挂起、阻塞和唤醒、进程切换等多种操作。为了方便系统和用户观察和分析进程,在进程控制中提供了挂起原语和激活原语。根据一定的算法和原则将处理机资源进行重新分配的过程。由若干条指令组成,完成特定的功能,是一种。非剥夺/非抢占式调度。
2023-10-30 14:53:29
299
原创 【操作系统】线程的概念
线程(Thread)是进程的轻型实体,也叫“轻量级进程”,是一系列活动按事先设定好的顺序一次执行的过程,是一系列指令的集合。线程是一条执行路径,不能单独存在,必须包含在进程之中。另外,线程是操作系统中运算调度的最小单位。
2023-10-19 13:54:12
310
原创 【操作系统】进程管理-进程的概念与结构
进程,是一个具有一定独立功能的程序关于某个数据集合的一次运行活动,是系统进行资源分配和调度的一个独立单位。
2023-10-19 11:24:40
154
原创 【操作系统】运行机制介绍
因此,运行在用户空间的程序即为用户程序,运行在内核空间的程序即为内核程序;当执行用户程序时CPU处于用户态,执行内核程序的时候CPU处于核心态;特权指令是指CPU执行内核态指令,非特权指令即CPU执行用户态执行。提高多道程序环境下CPU的利用率:比如当前程序执行到IO操作时,CPU可以不必等待IO结束,而是转而执行其他进程的CPU指令,减少了CPU的等待时间也就提高了CPU的利用率。例如执行某程序指令时,发现所需要的文件并不存在于内存中,此时将会引发故障中断,CPU会进入内核态去加载所缺失的文件;
2023-10-18 18:00:06
223
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅