<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Cheney的博客]]></title><description><![CDATA[记录学习成长过程！]]></description><link>https://blog.youkuaiyun.com/cj151525</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; cj151525]]></copyright><item><title><![CDATA[Codex安全盲区：代码漏洞生成实测]]></title><link>https://blog.youkuaiyun.com/cj151525/article/details/163955896</link><guid>https://blog.youkuaiyun.com/cj151525/article/details/163955896</guid><author>cj151525</author><pubDate>Fri, 21 Aug 2026 21:05:55 +0800</pubDate><description><![CDATA[本文通过系统性测试，揭示基于GPT-3.5/4的Codex模型在代码生成任务中可能产生的安全漏洞盲区。我们将从SQL注入、XSS、命令注入、路径遍历、内存安全等维度进行实测分析，探讨AI辅助编程时代的新型安全挑战与应对策略。]]></description><category></category></item><item><title><![CDATA[我将腾讯 ima 开源了，请看 Happy Friday Lite ！]]></title><link>https://blog.youkuaiyun.com/cj151525/article/details/163927500</link><guid>https://blog.youkuaiyun.com/cj151525/article/details/163927500</guid><author>cj151525</author><pubDate>Thu, 20 Aug 2026 22:58:56 +0800</pubDate><description><![CDATA[Happy Friday Lite 是一款基于 Electron + Vue 3 开发的桌面端个人知识智能助手。它集成了 AI Agent、RAG 知识检索、富文本笔记和日程日历功能，所有数据本地存储，注重隐私保护。核心功能包括： Friday 智能助手：基于 DeepAgent SDK + LangChain 构建，支持 12+ 工具和 HITL 确认机制 知识库管理：支持多格式文档处理，使用 Zvec 向量数据库实现 RAG 全流程 富文本笔记：基于 TipTap 编辑器，支持 AI 补全和版本历史 日]]></description><category></category></item><item><title><![CDATA[Langchain.js 实战五：Agent 实战]]></title><link>https://blog.youkuaiyun.com/cj151525/article/details/163779858</link><guid>https://blog.youkuaiyun.com/cj151525/article/details/163779858</guid><author>cj151525</author><pubDate>Sat, 15 Aug 2026 14:46:03 +0800</pubDate><description><![CDATA[文章摘要： Agent（智能代理）是大模型通过循环调用工具完成任务的技术架构，其核心公式为Agent = Model + Harness。Model作为"大脑"决策，Tools作为"四肢"执行，Harness（约束机制）通过提示词、工具和中间件控制大模型行为边界。文章通过LangChain实现了一个天气查询Agent，演示了基础调用、结构化输出和进度追踪功能，并强调中间件是定制Agent行为的关键。当前AI技术落地的核心仍是大模型（LLM）和提示词（Prompt）的组合运用。]]></description><category></category></item><item><title><![CDATA[Langchain.js 实战四：工具的使用]]></title><link>https://blog.youkuaiyun.com/cj151525/article/details/163779850</link><guid>https://blog.youkuaiyun.com/cj151525/article/details/163779850</guid><author>cj151525</author><pubDate>Sat, 15 Aug 2026 14:45:33 +0800</pubDate><description><![CDATA[工具与智能体交互机制 工具作为Agent与外界交互的接口，通过明确定义的输入输出实现功能扩展。本文介绍了工具的核心概念、创建方法及高级应用技巧： 核心架构 工具三要素：名称（唯一标识）、描述（功能说明）、参数Schema（输入约束） 工作流程：用户输入 → Agent决策 → 工具执行 → 结果返回 → 生成响应 开发实践 推荐使用tool函数配合Zod进行声明式定义 描述编写需明确功能边界和使用场景 Schema通过.describe()增强模型参数理解 错误处理应返回可读信息供模型自我修正 进阶能力 通]]></description><category></category></item><item><title><![CDATA[Langchain.js 实战三： RAG 知识库增强搜索]]></title><link>https://blog.youkuaiyun.com/cj151525/article/details/163779845</link><guid>https://blog.youkuaiyun.com/cj151525/article/details/163779845</guid><author>cj151525</author><pubDate>Sat, 15 Aug 2026 14:44:56 +0800</pubDate><description><![CDATA[LangChain 文档处理与语义搜索教程摘要 本教程介绍了使用LangChain构建语义搜索引擎的核心组件，主要包括： 文档加载器：支持多种文件格式（CSV、JSON、PDF、Word等），将不同来源的数据统一转换为Document对象，包含内容、元数据和可选ID。 文本处理流程： 使用文本分割器将长文档分块 通过嵌入模型将文本向量化 存储在向量数据库中实现高效检索 关键应用：特别适用于检索增强生成（RAG）场景，为LLM提供外部知识支持。 教程通过实际代码示例演示了文本文件和PDF的加载过程，展示了如何]]></description><category></category></item><item><title><![CDATA[Langchain.js 实战二：会话消息]]></title><link>https://blog.youkuaiyun.com/cj151525/article/details/163779839</link><guid>https://blog.youkuaiyun.com/cj151525/article/details/163779839</guid><author>cj151525</author><pubDate>Sat, 15 Aug 2026 14:44:18 +0800</pubDate><description><![CDATA[本文介绍了LangChain中的消息系统，包括消息类型（SystemMessage、HumanMessage、AIMessage、ToolMessage）及其作用，并提供了实战演示代码。消息包含角色、内容和元数据，用于与语言模型交互。代码示例展示了如何创建和使用这些消息类型，包括多轮对话场景和工具调用场景（ToolMessage）。文章还说明了手动组装消息的方法以及不同消息类型的具体结构，帮助开发者理解如何与语言模型进行有效交互。]]></description><category></category></item><item><title><![CDATA[Langchain.js 教程一：快速入门]]></title><link>https://blog.youkuaiyun.com/cj151525/article/details/159054775</link><guid>https://blog.youkuaiyun.com/cj151525/article/details/159054775</guid><author>cj151525</author><pubDate>Sat, 14 Mar 2026 22:55:59 +0800</pubDate><description><![CDATA[LangChain.js 是一个简化构建智能体和基于大语言模型(LLM)应用的工具库，支持对接多种主流AI平台。本文介绍了其安装配置和基础使用方法。]]></description><category></category></item><item><title><![CDATA[Kubernetes的自我修复]]></title><link>https://blog.youkuaiyun.com/cj151525/article/details/147358700</link><guid>https://blog.youkuaiyun.com/cj151525/article/details/147358700</guid><author>cj151525</author><pubDate>Mon, 21 Apr 2025 10:00:00 +0800</pubDate><description><![CDATA[Kubernetes使用一个专门的Service对象来为在Pod中运行的应用提供网络连接。它有另一个称为Deployment的专用对象，用于提供自我修复(self-healing)。事实上，Deployment也可以实现扩缩容和滚动更新。与Pod和Service对象一样，Deployment对象也是在YAML清单文件中定义的。下图显示了一个Deployment清单文件。它被做了一些标记，展示了容器是如何嵌套在Pod中的，以及Pod是如何嵌套在Deployment中的。容器提供操作系统和其他应用依赖。]]></description><category></category></item><item><title><![CDATA[Kubernetes扩缩容与滚动更新]]></title><link>https://blog.youkuaiyun.com/cj151525/article/details/147358741</link><guid>https://blog.youkuaiyun.com/cj151525/article/details/147358741</guid><author>cj151525</author><pubDate>Mon, 21 Apr 2025 09:00:00 +0800</pubDate><description><![CDATA[第14行和第15行强制Kubernetes一次更新一个Pod，运行机制是：第14行中maxSurge=1允许Kubernetes在更新操作中增加一个额外的Pod，期望状态需要5个Pod，所以Kubernetes可以在更新期间将其增加到6个；如果以后你编辑deploy.yml文件，指定一个容器镜像被更新过的版本，并重新发送给Kubernetes，你也会将副本的数量增加到10。在本节中，你将手动编辑Deployment YAML文件，将副本的数量增加到10个，并重新将其发送给Kubernetes。]]></description><category></category></item><item><title><![CDATA[应用Kubernetes容器部署]]></title><link>https://blog.youkuaiyun.com/cj151525/article/details/147358593</link><guid>https://blog.youkuaiyun.com/cj151525/article/details/147358593</guid><author>cj151525</author><pubDate>Sun, 20 Apr 2025 03:42:29 +0800</pubDate><description><![CDATA[本文介绍了如何将一个应用进行Kubernetes容器化部署，构建容器化文件，构建镜像，容器化等内容。]]></description><category></category></item><item><title><![CDATA[Kubernetes 基本概念总结]]></title><link>https://blog.youkuaiyun.com/cj151525/article/details/147358049</link><guid>https://blog.youkuaiyun.com/cj151525/article/details/147358049</guid><author>cj151525</author><pubDate>Sun, 20 Apr 2025 02:11:34 +0800</pubDate><description><![CDATA[Kubernetes是云原生微服务(cloud-native microservice)应用的编排器(orchestrator)。微服务：将大型单体应用拆分为若干个可以独立运行的服务，这些不同的微服务整体替代了大型单体应用的能力。云原生：云原生应用是具有弹性的、可以自动扩缩容的，并且可以在不停机的情况下进行更新。它们还可以在任何拥有Kubernetes的地方甚至是内部环境运行。]]></description><category></category></item><item><title><![CDATA[重构艺术 | 内联与查询替代临时变量]]></title><link>https://blog.youkuaiyun.com/cj151525/article/details/147167687</link><guid>https://blog.youkuaiyun.com/cj151525/article/details/147167687</guid><author>cj151525</author><pubDate>Sat, 12 Apr 2025 17:56:51 +0800</pubDate><description><![CDATA[在代码重构的殿堂里，临时变量常常扮演着双面角色：既是代码清晰的助力器，也可能成为代码腐败的温床。本文将深入探讨两种处理临时变量的重要手法：内联临时变量（Inline Temp）与用查询替代临时变量（Replace Temp with Query）。]]></description><category></category></item><item><title><![CDATA[重构艺术 | 如何优雅地“提炼函数“]]></title><link>https://blog.youkuaiyun.com/cj151525/article/details/147164853</link><guid>https://blog.youkuaiyun.com/cj151525/article/details/147164853</guid><author>cj151525</author><pubDate>Sat, 12 Apr 2025 14:57:48 +0800</pubDate><description><![CDATA[在工作中总数遇到非常多的长代码，俗称“屎山”，这类代码读起来特别费劲。自己想重构一遍，但是总感觉缺乏经验指导，因此，多读书，读好书可能是最优解之一。读《重构改善即有代码的设计》有感，便写下此篇博客，积累经验！在软件开发的浩瀚星河中，函数是最基本的代码单元。当我们面对臃肿冗长的函数时，《重构》一书给出的第一剂良方便是"提炼函数"。这个看似简单的重构手法，实则是提升代码质量的关键转折点。]]></description><category></category></item><item><title><![CDATA[Redis集群主从切换源码解读]]></title><link>https://blog.youkuaiyun.com/cj151525/article/details/145442312</link><guid>https://blog.youkuaiyun.com/cj151525/article/details/145442312</guid><author>cj151525</author><pubDate>Tue, 18 Feb 2025 22:43:40 +0800</pubDate><description><![CDATA[主从切换方法中，既包括自动主从切换，也执行了手动主存切换的逻辑。类似代码，这里节点解释就是设置集群的标记，参数就是标记，然后在每次进入事件驱动库的主循环之前（理解为另外一个定时任务），都会调用。方法，这个方法主要是用于处理收到的请求，我们找到处理投票请求和手动切换请求的消息处理逻辑。定时任务，其详细注释的源码已经贴在下文了。设置为1，表示接下来的代码可以通过该标记直接执行主从切换逻辑。，找到如下代码，这里运行了一个定时任务，每隔100毫秒执行一次。设置手动故障转移的代码如下，假设在某个从节点上执行了。]]></description><category></category></item><item><title><![CDATA[生产Redis批量删除数据]]></title><link>https://blog.youkuaiyun.com/cj151525/article/details/144120430</link><guid>https://blog.youkuaiyun.com/cj151525/article/details/144120430</guid><author>cj151525</author><pubDate>Thu, 28 Nov 2024 20:49:19 +0800</pubDate><description><![CDATA[生产Redis不能直接删除大量的Key，避免占用主线程阻塞正常业务，因此需要批量多次删除。一下代码经过生成磨炼，可以直接测试使用。]]></description><category></category></item><item><title><![CDATA[【Spring 底层原理】手搓一个Spring框架]]></title><link>https://blog.youkuaiyun.com/cj151525/article/details/142370925</link><guid>https://blog.youkuaiyun.com/cj151525/article/details/142370925</guid><author>cj151525</author><pubDate>Sun, 22 Sep 2024 21:58:03 +0800</pubDate><description><![CDATA[最近工作接触到的知识比较底层，因此为了突破瓶颈，彻底搞明白Spring到底帮我们干了些啥。学习了很多关于Spring的知识，看了这么多资料能讲清楚的人不多，我将尝试将Spring的原理和读者讲明白。我们手写一个简单的Spring框架用于搞清楚其核心原理，这个手写框架我把它叫做Summer框架，平行时空的Spring框架。 追求高质量文章需要兄弟萌支持，一键三连！]]></description><category></category></item><item><title><![CDATA[概念辨析（1）]]></title><link>https://blog.youkuaiyun.com/cj151525/article/details/140937397</link><guid>https://blog.youkuaiyun.com/cj151525/article/details/140937397</guid><author>cj151525</author><pubDate>Mon, 05 Aug 2024 21:30:21 +0800</pubDate><description><![CDATA[注解表示该函数为事务方法，其中的操作要么全部执行成功或者全部不执行。如果一个所谓的“原子性函数”内部的实现并非真正的原子操作，或者存在其他可能导致线程不安全的因素（如共享了非原子操作的全局变量等），那么它就不是线程安全的。原子操作：原子操作是指不会被线程调度机制打断的操作；这种操作一旦开始，就一直运行到结束，中间不会有任何 context switch 线程切换。原子操作一定具备原子性，是线程安全的。具有原子性的函数或者方法并发一个原子操作不一定具备线程安全性。原子性：事务具有原子性，在一个函数上面加上。]]></description><category></category></item><item><title><![CDATA[Spring Core——资源加载与访问（Resource）]]></title><link>https://blog.youkuaiyun.com/cj151525/article/details/140758384</link><guid>https://blog.youkuaiyun.com/cj151525/article/details/140758384</guid><author>cj151525</author><pubDate>Sun, 28 Jul 2024 23:56:48 +0800</pubDate><description><![CDATA[Resource接口为所有资源类型提供了一个通用的抽象，使得无论资源来自文件系统、类路径还是网络，开发者都可以通过一致的方式进行访问。通过使用这些实现类，开发者可以轻松地从不同来源获取资源，而不必担心底层的实现细节。总之，Resource接口及其实现类为资源访问提供了一种高度抽象和简化的解决方案，是Spring框架中一个非常有用的功能。Spring中将所有的资源抽象成了Resource对象，对于不同的资源类型有着不同的实现类，它为访问底层资源提供了一个统一的抽象，从而使得代码可以独立于实际资源的类型。]]></description><category></category></item><item><title><![CDATA[Redis 关于内存碎片的解决方法]]></title><link>https://blog.youkuaiyun.com/cj151525/article/details/140518859</link><guid>https://blog.youkuaiyun.com/cj151525/article/details/140518859</guid><author>cj151525</author><pubDate>Thu, 18 Jul 2024 21:53:17 +0800</pubDate><description><![CDATA[今天生产机报内存爆满异常被叫过去查看问题，通过各种排除最终定位到了Redis的内存碎片的问题，这篇博客将详细介绍Redis内存碎片问题并给出最佳实践解决此问题。]]></description><category></category></item><item><title><![CDATA[映射器代理工厂]]></title><link>https://blog.youkuaiyun.com/cj151525/article/details/140414918</link><guid>https://blog.youkuaiyun.com/cj151525/article/details/140414918</guid><author>cj151525</author><pubDate>Sun, 14 Jul 2024 12:55:14 +0800</pubDate><description><![CDATA[我们在使用Mybatis时，只需要写Mapper和Dao接口就行，使用的时候只需要调用Dao中的方法就能完成数据的增删改查。那么Dao中的方法是谁实现的呢？难道Mybatis自动帮我们写了一个Dao的实现类吗？非也！而是使用了映射器代理工厂来实现的。映射器代理工厂（Mapper Proxy Factory）在Mybatis框架中扮演着至关重要的角色。它是用来创建映射器接口的代理对象的工厂类，通过这个工厂类，可以实现对数据库操作的抽象和简化。]]></description><category></category></item></channel></rss>