- 博客(76)
- 收藏
- 关注
原创 大模型网关的限流与排队:从原理到工程实践
本文围绕 LLM Gateway 在高并发场景下的流量控制展开,从限流、排队、背压、持久化四个维度梳理完整的工程链路。限流部分覆盖 TPS / TPM / 并发数三个控制维度,拆解令牌桶与滑动窗口算法,并给出 Redis + Lua 分布式限流的可运行代码。排队部分从网关内置 burst 到应用层有界队列,深入分析背压的传导机制及其在多实例下的失效原因。持久化部分划出同步排队与异步任务的分界线——秒级排队无需持久化,分钟级排队须转向 MQ + LiteTopic 异步模式。
2026-08-05 02:14:15
408
原创 秒杀系统全链路流量控制技术解析
本文系统阐述了应对百万级秒杀流量的分层架构设计。核心思路是通过四层防御体系(接入层、网关层、服务层、存储层)实现流量逐层过滤,将百万请求削减为与库存匹配的有限请求。接入层利用CDN、验证码等技术拦截无效流量;网关层通过限流和熔断防止系统过载;服务层采用多级缓存和消息队列削峰填谷;存储层确保数据一致性。整个架构遵循"尽早拦截,越上游越便宜"的原则,最终实现从百万流量到百件库存的流量漏斗效应,保障系统稳定运行。文章还提供了库存预热、热点Key分片等实战建议,为高并发秒杀系统设计提供了完整解决方案。
2026-08-05 01:20:28
347
原创 Agent 隐性意图漂移治理:当逻辑完全正确,却离用户真实意图越来越远
本文深入拆解了隐性意图漂移的本质,从 Perplexity、Devin、Claude Code 等主流 Agent 架构中提炼出五大通用治理策略:持久化目标契约、分层规划锚点、双 Agent 评审机制、信息增益评估、主动回溯澄清。同时给出了一套可落地的五维判定框架,帮助你系统区分「合理拓展」与「无效跑偏」。最后整合为一个工程化的防漂移 Agent 架构,让 Agent 在架构层面就 "跑不偏"。
2026-08-04 02:00:45
366
原创 AI IDE 代码检索的底层真相:跟着一次查询,走完检索全流程
拆解 Cursor / Claude Code 背后的代码检索架构:为什么主力仍是朴素的 grep,向量 RAG 只是入口?五层流水线 + 实践避坑,讲清 AI IDE 多文件重构总幻觉、总漏改的真正原因。
2026-08-04 01:18:51
595
原创 【Java/Go后端手撸原生Agent(第十一篇):RAG检索——给Agent加上“查资料“能力】
文章首先指出传统流水线式RAG的三大缺陷(强制检索、单轮检索、结果不可控),提出 **Agentic RAG** 范式——将检索封装为 `knowledge_search` 工具,让Agent自主决策何时查、查几次、结果是否够用。
2026-08-03 19:22:01
420
原创 2026年AI Agent开发完整学习路线 | 后端工程师转型指南 | 从零到手搓生产级多Agent系统
《后端工程师手搓AI Agent全攻略》是一个17篇系列教程,专为有后端开发经验、想转型AI Agent开发的工程师设计。教程采用"纯原生手搓"方式,从ReAct循环底层原理开始,逐步实现Function Calling、流式输出、记忆管理等核心功能,最终构建生产级多Agent系统。目前已更新前10篇,涵盖Agent核心原理、协议工程化、记忆管理和产品化等关键阶段,后续将扩展RAG检索和多Agent系统开发。所有代码均无框架依赖,采用分层设计思路,强调工程实践与底层原理理解。
2026-08-03 16:46:16
1614
原创 Redis ZSet 完全指南:从应用场景到核心原理
Redis的有序集合(ZSet)是一种高效的数据结构,结合了哈希表和跳表的优势,既能快速查找元素(O(1)时间复杂度),又能高效排序(O(logN)时间复杂度)。ZSet适用于排行榜、热搜、任务调度等场景。其核心在于跳表通过多层级索引加速查询,而随机化设计简化了维护成本。相比平衡树,跳表实现简单、并发性能更好,更适合Redis的需求。常见操作如ZADD、ZSCORE等均能高效执行,使用时需注意避免全量扫描等性能陷阱。
2026-08-02 23:59:00
238
1
原创 从跳表到HNSW:深度拆解向量ANN检索的分层设计与近似本质
本文深入剖析了HNSW(分层导航小世界)算法与跳表的异同,揭示了HNSW作为近似最近邻搜索算法的核心机制。虽然两者共享概率分层的设计范式,但HNSW因高维空间的局部相似性而存在本质差异:跳表实现精确检索,而HNSW始终是近似算法。文章详细分析了HNSW误差的两大来源(高层导航偏差和底层搜索预算限制),解释了为何不能在高层提前返回结果(会导致永久性召回损失),并强调了HNSW分层职责隔离的设计精髓(高层专注导航,底层负责结果输出)。最终指出近似算法的价值在于工程权衡,HNSW以可控精度损失换取性能提升
2026-08-02 23:53:43
380
原创 【Java/Go后端手撸原生Agent(第八篇):摘要压缩——让Agent“记要点“而不是“记流水账“】
本文针对Agent对话中滑动窗口裁剪导致的"历史遗忘"问题,提出通过摘要压缩保留语义核心。摘要作为有损压缩层,在消息块被删除时触发,将旧摘要与被裁内容合并生成新摘要(约200 token),保留用户目标、关键结论等核心信息,舍弃中间细节。设计上采用同步更新、失败降级策略,通过ShortMemory的summary字段存储,并在消息序列头部插入摘要标记。代码改造包括消息转文本、摘要源拼接等功能,实现裁剪与语义保留的平衡,避免Agent因上下文限制而"失忆"。
2026-07-24 04:45:59
323
原创 【Java/Go后端手撸原生Agent(第九篇):Plan-and-Execute规划模式——从“走一步看一步“到“先谋后动“】
本文介绍了在现有Agent框架中引入"规划-执行"(Plan-and-Execute)模式的实现方案。针对多步骤复杂任务中Agent可能迷失方向的问题,该方案通过新增PLANNING状态、计划数据模型和Planner提示词,让Agent先制定全局计划再执行。与强制工作流方案不同,本文选择将计划作为软引导注入系统提示,保持执行灵活性的同时通过Judge进行结果校验。核心设计包括:1)用Pydantic定义带目的说明的计划步骤;2)独立Planner模块生成结构化任务分解;3)故障降级机制确保规划失败时仍能回退
2026-07-24 04:45:45
289
原创 【Java/Go后端手撸原生Agent(第十篇):HTTP+SSE+Web UI——让Agent长出真正的用户界面】
本文介绍如何为原生Agent添加Web UI界面,将原本基于命令行交互的Agent升级为支持浏览器访问的用户友好界面。文章分析了原有架构的问题——Agent核心逻辑与终端输出(print)高度耦合,导致难以扩展其他交互方式。 解决方案采用事件驱动模型,定义了一套结构化事件体系(AgentEvent基类及9种具体事件),通过SSE(Server-Sent Events)协议实现前后端通信。改造后的核心变为纯事件生成器run_agent_stream(),通过FastAPI暴露SSE端点,前端使用单页应用消费事
2026-07-24 04:45:01
411
原创 【Java/Go后端手撸原生Agent(第七篇):Token预算管理 + 滑动窗口上下文裁剪】
Token管理与上下文裁剪:智能体对话的核心约束 本文是智能体开发系列的第七篇,聚焦LLM应用的硬约束——上下文窗口限制。当对话轮次增多或工具输出较大时,无限增长的上下文会导致API报错。解决方案包含: 精确Token计数:使用tiktoken库精确计算系统提示、工具schema、消息历史和输出预留的token开销,避免传统中文/1.5的粗糙估算误差。 智能裁剪策略:实现滑动窗口机制,超预算时从最早消息开始删除完整"消息块"(保持tool_calls与工具结果的配对完整性),而非单条消息,避免协议断裂。 分
2026-07-24 02:44:34
730
原创 【Java/Go后端手撸原生Agent(第六篇):流式输出——让Agent思考过程“看得见”】
本文介绍了Agent开发中流式输出的实现方法。主要内容包括: 同步模式的痛点:传统同步调用会导致用户长时间等待,体验差 流式原理:基于HTTP SSE协议,服务器逐块返回数据 核心难点:工具调用(tool_calls)的流式组装,包括: id和name只在首个chunk出现 arguments是逐步拼接的JSON字符串 多工具并行时用index区分 解决方案: 采用事件模型设计(ContentDelta/ToolCallStart等) 维护builder字典按index组装参数 使用生成器实现流式处理 流式
2026-07-24 02:13:21
553
原创 【Java/Go后端手撸原生Agent(第五篇):多工具并行调用 + BashTool执行引擎 + Judge证据链升级】
本文介绍了Agent开发的三大核心升级:多工具并行支持、新增BashTool执行能力、Judge证据链增强。首先解决了单工具串行瓶颈,通过遍历tool_calls数组实现多工具批量执行;其次新增带安全防护的BashTool,使Agent具备Shell执行能力,完成从"只读顾问"到"能读能写能执行"的转变;最后增强Judge模块,引入工具调用轨迹证据链,实现基于事实的质量校验。这些升级提升了Agent的并行处理能力、执行能力及回答可信度,同时保持了架构的可扩展性。通过分层防御设计,确保Shell执行的安全性。
2026-07-23 20:14:59
376
原创 【Java/Go后端手撸原生Agent(第四篇):原生Function Calling协议接入 + Memory Role修正 + LLM-as-Judge回答完整性校验】
本文介绍了Java/Go后端开发者如何从零构建原生Agent的第四阶段技术升级,重点解决了前期架构中的三个核心问题:工具调用协议稳定性差、内存角色语义混乱和回答完整性无校验。文章首先分析了JSON Mode模拟工具调用导致格式漂移、参数幻觉的问题根源,指出应改用OpenAI原生Function Calling协议;接着针对工具结果污染System消息的问题,提出了新增tool角色存储结果并引入tool_call_id配对的解决方案;最后设计了LLM-as-Judge机制,通过二次校验确保回答完整性。
2026-07-23 17:47:34
580
原创 【Java/Go后端手撸原生Agent(第三篇):Pydantic自动生成工具Schema + 三态状态机 + 文件读取工具】
本文针对智能体开发中的工程痛点提出三大改造方案:1)基于Pydantic的工具参数模型实现Schema自动生成,解决信息重复维护问题;2)引入三态状态机(思考/执行/完成)显式管控流程;3)新增参数校验层与重复调用检测。通过重构工具基类,实现参数定义、校验、文档生成的统一管理,并设计文件读取工具进行多工具联调验证。该方案借鉴后端工程思想,将工具抽象为带Schema的API接口,使智能体开发更符合软件工程规范。
2026-07-21 23:56:19
498
1
原创 【Java/Go后端手撸原生Agent(第二篇):Pydantic结构化输出改造,工程化解决工具死循环问题】
本文是《Java/Go后端手撸原生Agent》的续篇,针对Python原生Agent进行两大工程级升级:1)使用Pydantic实现结构化JSON输出,替代脆弱的文本解析;2)采用状态机方案解决工具重复调用的死循环问题。全文包含Pydantic模型定义、LLM客户端JSON模式改造、消息组装规范、系统提示词优化等核心实现,适合希望深入理解Agent底层原理的后端开发者。代码保持原生无框架风格,完整项目地址见文内链接。
2026-07-21 18:02:20
282
原创 后端工程师纯原生手搓Agent,吃透ReAct底层循环(完整可运行代码01,持续更新中)
本文面向具有Java/Go后端开发经验的工程师,介绍如何不依赖LangChain等框架,从零实现一个原生ReAct智能体(Agent)。作者指出直接使用高阶框架会导致黑盒封装、调试困难、扩展受限等问题,提出基于requests、pydantic等基础库的分层实现方案。项目采用标准工程结构,包含配置层、LLM客户端层、工具抽象层(模拟接口编程)和Agent核心模块(记忆管理、输出解析)。通过手写计算器工具示例和ReAct文本解析逻辑,开发者可深入理解Agent的底层交互原理(如工具调用、记忆循环等)
2026-07-20 21:31:14
470
原创 【 别再把逻辑全塞给LLM:后端做Agent的架构决策方法论】
后端开发转Agent开发:传统复杂度+变更频率的二维决策模型,在开放场景的Agent面前彻底失灵了。三维决策框架:新增「灵活度」维度,清晰划分硬编码、配置、LLM三层边界
2026-07-18 19:07:06
575
原创 二叉树的种类与关系图谱
二叉树作为计算机科学中最重要的数据结构之一,其变体众多,每种变体都针对特定场景进行了优化。理解不同二叉树之间的关系和特性,对于解决算法问题和系统设计至关重要。本文将系统性地介绍二叉树的主要分类,并通过关系图直观展示它们之间的联系。
2025-07-13 04:24:16
1401
原创 Vim 编辑器基础命令
Vim作为Linux系统中最强大的文本编辑器之一,以其高效的编辑模式和可扩展性闻名。本文将深入解析Vim的核心机制、实用技巧和配置。
2025-07-12 03:19:21
496
原创 Linux基础命令完全指南
在Linux系统管理中,命令行是最核心的交互方式。熟练掌握基础命令不仅能提升工作效率,更是深入理解系统原理的必经之路。本文将系统性地介绍Linux基础命令,覆盖文件操作、用户管理、系统监控等核心场景。
2025-07-12 03:12:21
257
原创 图解Java数据容器(三):Queue
在现代软件开发中,队列(Queue)作为一种重要的数据结构,广泛应用于任务调度、消息传递、并发编程等场景。Java集合框架提供了丰富的Queue实现,每种实现都有其独特的设计理念和适用场景。本文将从原理、性能、应用等多个维度,对Java中的Queue接口及其核心实现类进行系统剖析。
2025-07-10 23:11:50
1274
原创 图解Java数据容器(二):Set
在Java开发中,Set接口是集合框架的重要组成部分,它提供了不重复元素的存储能力。本文将深入剖析Java中几种主要Set实现的核心特性、适用场景及性能差异,并通过流程图和代码示例帮助读者全面掌握。
2025-07-09 00:15:00
8785
原创 图解Java数据容器(一):List
在Java开发中,List是最常用的数据结构之一,它提供了有序、可重复的元素存储能力。本文将深入剖析Java中几种主要List实现的核心特性、适用场景及性能差异,并通过流程图和代码示例帮助读者全面掌握。
2025-07-08 01:55:10
749
原创 RabbitMQ 延时队列的底层原理
RabbitMQ 延时队列的底层原理涉及消息的存储、路由规则以及特殊交换机/插件的协同工作,其核心是通过**控制消息的投递时间**,让消息在指定延迟后才进入消费队列被处理。以下从底层实现机制、核心组件及工作流程展开详细说明:
2025-07-08 00:59:51
1561
原创 MyBatis-Plus分页拦截器原理深度解析
在企业级应用开发中,分页查询是几乎所有数据交互场景的基础需求。MyBatis-Plus作为MyBatis的增强工具,通过分页拦截器提供了简洁高效的分页解决方案。本文将从原理、实现到优化,全面剖析MyBatis-Plus分页拦截器的工作机制。
2025-07-06 23:36:13
1566
原创 Spring中DelayQueue深度解析:从原理到实战(附结构图解析)
在构建复杂的Spring应用时,我们常常会遇到需要延迟执行任务的场景,比如订单超时取消、缓存自动刷新等。这时候,Java并发包中的`DelayQueue`结合Spring框架,就能为我们提供优雅且高效的解决方案。
2025-07-05 17:14:12
1202
原创 Java中不可变对象的设计、判断与应用
在Java中,不可变对象(Immutable Object)就像是一座坚固的堡垒,一旦建成便不可更改。这种设计模式不仅能显著提升代码的安全性和可维护性,更是并发编程中的重要基石。本文将从不可变对象的设计原则、判断方法以及实际应用场景三个维度,一起深入理解这一核心概念。
2025-07-05 00:28:39
817
原创 Java对象哈希值深度解析
在Java开发中,对象的哈希值(`hashCode()`)是一个看似基础却暗藏玄机的概念。它不仅影响着`HashMap`、`HashSet`等集合框架的性能,还涉及到JVM内存模型和对象相等性判断的核心逻辑。本文将从JVM底层实现、哈希冲突处理、性能优化等多个维度,一起深入理解Java对象哈希值的工作原理。
2025-07-04 23:59:25
1005
原创 MySQL Buffer Pool 深度解析:从架构设计到性能优化(附详细结构图解)
在 MySQL 数据库的世界里,有一个决定性能上限的"神秘仓库"——Buffer Pool。它就像超市的货架,把最常用的商品(数据)放在最方便拿取的地方,避免每次都要去仓库(磁盘)取货。今天我们就来深入了解Buffer Pool内部结构,以及它如何在高并发场景下高效工作。
2025-07-02 13:37:58
2675
原创 HashMap 与 Hashtable 的深度对比:从原理到实践
在 Java 开发中,HashMap 和 Hashtable 是最常用的两种键值对存储结构,但很多时候我们可能只是默认使用HashMap,没有去深究两者的差异,对它们的区别并不完全清楚。今天我们就来深入剖析这两个类的差异,帮助我们在实际开发中做出正确选择。
2025-07-02 13:14:12
1477
原创 深入理解Java锁原理(二):轻量级锁的设计原理到实战优化
轻量级锁的设计目标是在无竞争或轻度竞争的场景下,避免使用重量级锁带来的线程阻塞和上下文切换开销。它的核心思想是:在竞争不激烈时,通过CAS操作和自旋等待实现快速加锁,只有在竞争激烈时才升级为重量级锁。
2025-07-01 02:52:56
1223
原创 深入理解Java锁原理(一):偏向锁的设计原理与性能优化
偏向锁的设计基于"锁使用的二八定律":在实际应用中,大部分锁在其生命周期内仅被同一个线程获取,不存在多线程竞争。传统的无锁状态虽然简单,但每次获取锁仍需执行CAS(Compare-and-Swap)操作,而CAS操作虽然轻量,但相比简单的内存比较仍有显著开销。
2025-07-01 01:57:25
1321
原创 一文吃透Java零拷贝技术:从原理到实战
在开发系统时,经常会遇到文件传输、数据读写效率瓶颈。在解决问题的同时记录一下Java中能有效解决这类问题的“神器”——零拷贝
2025-06-30 04:21:05
840
原创 Spring AI 中 MCP 架构与工具调用技术详解
MCP(Message Communication Protocol)是 Spring AI 用于支持 AI 模型交互的消息通信协议,在客户端与服务端之间搭建桥梁,支持多种传输层协议,提供标准化消息格式定义,实现 AI 能力的高效交互与管理。其核心流程为:客户端接收用户输入,通过大模型判断是否调用 MCP 服务器中的工具;若需调用,客户端向 MCP 服务器发起请求,服务器执行对应工具并返回结果,大模型整合结果后生成最终回答。
2025-06-29 05:39:54
3688
1
原创 Spring AI + MCP最详细实践:从配置开始到服务搭建(踩坑无数版)
随着MCP的火爆,作者也是想要自己实践一下。但是看网上的资料,或是实践起来太过繁琐,或是因为Spring AI版本的快速更迭导致实现不了。于是自己记录一下实现过程。本篇会带大家从零开始手搓一个MCP服务端出来,并且验证。同时最后会给出一些常见报错的解决方案。
2025-06-29 05:37:27
2382
原创 工厂模式中使用Map管理策略实例时,为何仍需要Context?
工厂是"策略对象的仓库",而Context是"策略执行的引擎"。通过合理分离创建职责与调用职责,系统将更符合"高内聚、低耦合"的设计原则。
2025-06-27 22:51:27
1241
原创 策略模式与工厂模式的黄金组合:从设计到实战
策略模式和工厂模式是软件开发中最常用的两种设计模式,当它们结合使用时,能产生1+1>2的效果。本文将通过实际案例,阐述这两种模式的协同应用,让代码架构更优雅、可维护性更强。
2025-06-27 22:47:45
2124
原创 Java四种拷贝方式总结!一文扫清所有拷贝问题
作为Java开发者,日常开发中经常会遇到数据拷贝的需求。最近在面试中也有被问到一次大文件拷贝,抽空专门总结一下,从基础概念到实战技巧,配合流程图,让原理和流程一目了然~
2025-06-26 23:59:01
1685
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅