自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(470)
  • 收藏
  • 关注

原创 文件加载器:从入门到实战

文件加载器是一种负责读取外部数据源并将其转换为统一格式的工具组件。它屏蔽了不同数据源的差异,为上层应用提供一致的接口。文件加载器是数据处理链路中的第一环,选择合适的加载器能显著提升开发效率。本文介绍了加载器的概念、分类和常见用法,希望能帮助你快速上手。在实际项目中,建议根据数据源类型和业务需求灵活选择,必要时自定义加载器以满足特殊场景。

2026-09-20 15:49:20 178

原创 LangChain 短期记忆:基于 PostgreSQL 的持久化实现详解

llm=llm,LangChain 短期记忆的「基于 PostgreSQL 的持久化」,本质上是把对话历史从进程内存迁移到 PostgreSQL 数据库,通过session_id实现会话隔离,让记忆在进程重启后依然可用。数据库持久化 ≠ 内存持久化:数据存储在 PostgreSQL 中,重启不丢失;是关键:它实现了与内存版相同的接口,可无缝替换;session_id实现隔离:天然支持多用户、多会话场景;可组合使用:滑动窗口、摘要压缩等策略均可与 PostgreSQL 结合;生产需注意。

2026-09-20 15:19:28 260

原创 Embedding 模型:从原理到实践

Embedding(嵌入)是将高维离散数据(如单词、句子、图片)映射为低维稠密向量的过程。在文本领域,Embedding 模型将一段文本转换为固定长度的数值向量,使得语义相近的文本在向量空间中距离更近。Embedding 模型是语义理解与向量检索的基础设施,在大模型时代的重要性日益凸显。理解其原理、熟悉主流模型的特点,并掌握基本的实践方法,将帮助你在实际项目中做出合理的技术选型,构建高效可靠的语义应用。

2026-09-20 09:54:55 148

原创 Milvus 向量数据库的 DDL、DML、DQL 操作详解

DDL 操作主要涉及数据库、集合(Collection)、字段(Field)、索引(Index)等结构的管理。类别操作说明DDL创建/删除数据库、集合、索引管理数据结构DML插入、删除、更新数据管理数据内容DQL标量查询、向量搜索、混合检索检索与分析数据Milvus 的集合(Collection)对应关系型数据库的表,字段(Field)对应列。向量搜索必须提前创建索引,否则无法执行。更新操作采用「先删后插」策略。混合检索(向量 + 标量过滤)是生产环境中最常用的检索模式。

2026-09-19 14:47:01 205

原创 Spring Boot 多数据源实战:让不同 Mapper 走不同数据源

适合需要运行时动态切换数据源的场景,比如读写分离、按租户切换。让不同 Mapper 走不同数据源,核心是让每个 Mapper 绑定到独立的 SqlSessionFactory。如果业务库之间完全独立、互不切换,推荐方案一,简单直观;如果需要运行时动态切换(如读写分离),推荐方案二。实际项目中也可以两者结合:静态分包 + 动态路由兜底。

2026-09-18 15:56:19 364

原创 LangChain 文本切分策略与 TextSplitter 详解

文本切分是 RAG 应用的地基,切分策略直接决定检索质量。选对切分器:通用文本用,代码用代码专用切分器,Markdown 用标题切分器。调好参数:块大小、重叠率、分隔符优先级三者配合,找到最适合你数据的组合。保持语义完整:优先在段落、句子边界切分,避免割裂关键信息。建议在实际项目中多组参数对比测试,用检索召回率和生成质量来验证切分策略的优劣。掌握好 TextSplitter,你的 RAG 应用就成功了一半。

2026-09-18 10:19:39 331

原创 高并发抢红包系统设计方案

抢红包系统的核心在于用 Redis 扛住高并发、用 Lua 脚本保证原子性、用幂等设计防止重复领取、用异步化削峰填谷。整体上采用「缓存 + 数据库 + 消息队列」的组合架构,既保证了抢红包瞬间的极致性能,又通过异步落库与对账机制保障了资金数据的最终一致。实际落地时还需结合具体业务量级,在限流阈值、缓存策略、集群规模等方面做针对性调优。

2026-09-16 11:12:56 183

原创 大模型对话记忆机制详解:为什么模型记不住历史提问?

大模型本身没有记忆能力,所谓"记住历史提问",本质上是开发者把历史对话作为上下文拼接到每次请求中。理解这一点后,你就能通过维护消息列表、控制上下文长度、引入外部存储等手段,让大模型在工程上表现出"记忆"能力。大模型是无状态的,每次调用独立。通过messages拼接历史即可实现短期记忆。长对话需要滑动窗口或摘要压缩来控制 Token。跨会话记忆需要借助数据库或向量库。

2026-09-16 10:48:06 195

原创 Spring AOP 详解:从入门到实战

AOP(Aspect Oriented Programming,面向切面编程)是一种编程范式,它通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能。AOP 是 Spring 框架的核心模块之一,与 IoC(控制反转)相辅相成。AOP 的核心思想是将横切关注点(Cross-cutting Concerns)与业务逻辑分离。日志记录事务管理权限校验性能监控异常处理import org。

2026-09-16 10:43:52 201

原创 MySQL 是如何实现事务隔离的?

隔离级别脏读不可重复读幻读READ UNCOMMITTED(读未提交)可能可能可能READ COMMITTED(读已提交)不可能可能可能REPEATABLE READ(可重复读)不可能不可能可能(InnoDB 已解决)SERIALIZABLE(串行化)不可能不可能不可能MySQL InnoDB 默认使用REPEATABLE READ(可重复读)隔离级别,但通过 MVCC 和间隙锁的配合,实际上已经解决了幻读问题,达到了接近 SERIALIZABLE 的效果。

2026-09-16 09:47:27 296

原创 RocketMQ 顺序消费处理:从原理到实战

顺序消息是指消息的消费顺序与生产顺序保持一致。订单状态流转:订单创建 → 支付 → 发货 → 完成,必须按顺序处理,否则会出现状态错乱。库存扣减:多个操作对同一商品库存进行增减,必须串行执行。日志同步:数据库 binlog 同步,需要按主键顺序写入。类型说明适用场景全局顺序一个 Topic 下所有消息严格有序对顺序要求极高,吞吐量要求低的场景分区顺序同一队列(Queue)内消息有序按业务 key 分桶,兼顾顺序与并发RocketMQ 顺序消费的核心在于。

2026-09-15 16:38:59 93

原创 Redis 过期事件监听:原理与实战

Redis 确实可以监听 Key 的过期时间,核心机制是键空间通知。通过订阅频道,我们可以在 Key 过期时收到通知并触发业务逻辑。但需要注意,这种方案存在事件丢失和触发延迟两个固有限制。对于订单超时这类对可靠性要求较高的场景,建议结合 Redis Stream 或延迟队列等方案,做到万无一失。

2026-09-15 15:34:45 235

原创 RocketMQ 延时队列使用详解

延时队列是一种特殊的消息队列,消息发送后不会立即被消费者消费,而是需要等待指定的延时时间后才能被投递给消费者。RocketMQ 原生支持延时消息,使用简单,无需额外部署组件。RocketMQ 的延时消息并不是任意时间都能设置,而是固定延时等级。默认支持 18 个延时级别,从 1 秒到 2 小时。RocketMQ 的延时队列使用非常简单,核心就是通过方法设置延时等级。虽然默认只支持固定等级的延时时间,但足以覆盖大多数业务场景。理解其底层实现原理,有助于在实际项目中更好地使用和排查问题。

2026-09-15 15:12:58 155

原创 高并发下超卖问题解决方案:从数据库到分布式锁的完整实践

超卖问题的本质是并发下的竞态条件,解决方案的核心思路是让「判断库存」和「扣减库存」成为一个原子操作。数据库层面:乐观锁、悲观锁、原子更新;应用层层面:分布式锁、Redis Lua 脚本、限流、MQ 削峰;生产实践:预扣减 + MQ 异步化 + 对账 + 幂等控制。实际项目中,没有银弹,需要根据并发量、一致性要求、团队技术栈综合选型。建议从最简单的数据库原子更新入手,在性能出现瓶颈时再逐步引入 Redis 方案,并配合限流和异步化,构建一套高可用、不超卖的库存系统。

2026-09-15 14:43:49 396

原创 RocketMQ 消费模式详解:从基础概念到实战

本文详细介绍了 RocketMQ 的两种消费模式:集群消费与广播消费。集群消费通过消费组内负载均衡实现高吞吐与高可靠,是生产环境的首选;广播消费则适用于需要所有节点同步感知消息的特殊场景。理解两者的差异,并根据业务场景做出正确选择,是构建稳定可靠消息系统的关键一步。希望本文能帮助你更好地掌握 RocketMQ 消费模式,在实际项目中游刃有余。

2026-09-14 16:26:00 241

原创 LangChain Agent 开发中间件使用指南

本文系统介绍LangChain Agent开发中中间件的使用方法,基于回调机制实现日志记录、限流、错误处理、上下文增强等横切关注点。通过自定义回调处理器,支持构造函数、运行时及全局配置三种接入方式,并提供实战示例构建完整的中间件链,提升智能体应用的健壮性与可维护性。

2026-09-09 14:26:41 82

原创 Claude Code 常用操作总结

在项目根目录创建CLAUDE.md文件,写入项目说明、代码风格、常用命令等,Claude Code 会自动读取并遵循这些规范。# 项目规范- 使用 TypeScript 编写代码- 使用 pnpm 作为包管理器- 测试文件放在 __tests__ 目录下Claude Code 的核心价值在于把 AI 能力无缝融入终端工作流。掌握上述常用操作后,你就能在日常开发中高效使用它完成代码编写、审查、调试等任务。建议从简单的对话和文件操作开始,逐步尝试进阶功能,找到最适合自己的使用方式。

2026-09-05 21:47:28 360

原创 Claude Code Skill 从使用到原理:让 Claude 真正“会干活”的技能体系

Claude Code Skill 是指赋予 Claude 的一组可复用、可组合、可调用的能力单元。如果说 Claude 是智能体的“大脑”,那么 Skill 就是大脑可以灵活支配的“手脚”。触发条件:什么情况下该技能被调用输入参数:技能执行所需的必要信息执行逻辑:技能内部的处理步骤或调用链输出结果:技能执行完成后返回的结构化结果元信息:技能的名称、描述、版本、依赖关系等在 Claude Code 中,Skill 以SKILL.md 文件为核心载体,存放在目录下,每个技能一个子目录。

2026-09-05 21:42:56 394

原创 Vue 3 模板语法详解:从插值到指令的完整指南

模板语法允许开发者以声明式的方式将 DOM 绑定到底层组件实例的数据上,让页面渲染变得直观而高效。本文将系统性地介绍 Vue 3 的模板语法,从基础的文本插值到复杂的指令用法,帮助你快速掌握并灵活运用。:优先使用数据中稳定的唯一标识(如 id)作为 key,避免使用 index,因为当列表顺序变化时,index 会导致渲染错误。文本插值是 Vue 模板中最基础的语法,使用双大括号(Mustache 语法)将数据渲染为文本。指令在表单元素上创建双向数据绑定,是 Vue 中最常用的指令之一。

2026-09-04 10:07:57 208

原创 Vue 3 响应式核心:ref() 与 reactive() 的深入解析与实战

ref()是全能型 API,适合所有场景,尤其是单个值和组合式函数。reactive()适合集中管理复杂对象状态,但要注意解构丢失响应性的问题。在中,ref在模板中自动解包,体验更佳。理解底层Proxy和依赖收集机制,有助于写出更高效的代码。在实际开发中,建议以ref()为主,reactive()为辅,根据具体场景灵活选择。掌握这两者的精髓,你的 Vue 3 开发效率将大幅提升。

2026-09-04 09:16:56 453

原创 向量数据库入门指南:从原理到选型实战

向量数据库是一种专门用于存储、管理和检索高维向量数据的数据库系统。它的核心能力在于处理非结构化数据(如文本、图片、音频、视频)的向量表示,通过相似度计算实现高效检索。与传统关系型数据库不同,向量数据库不依赖精确匹配,而是基于向量之间的距离(如欧氏距离、余弦相似度)来查找最相似的数据项。这一特性使其成为大语言模型(LLM)应用、推荐系统、图像识别等场景的基础设施。向量数据库是大模型应用时代的重要基础设施。

2026-09-02 20:09:50 198

原创 LangChain 中设置 Agent 的流式输出策略

给 LLM 开启。使用astream(0.3 推荐)或(0.1/0.2 常用)消费流。通过或事件类型区分 Token 流与 Agent 中间步骤。在后端结合将流实时推送给前端。掌握这些策略,就能为用户带来更流畅、更实时的 Agent 交互体验。

2026-09-01 19:48:20 134

原创 Java 内存溢出(OOM)场景总结与排查实践

OOM 类型典型原因排查工具预防手段对象过多、内存泄漏MAT、jmap合理堆大小、流式处理Metaspace类加载过多控制动态代理、热部署递归过深调用栈直接定位递归改循环NIO 堆外内存过多jcmd、NMT控制 MaxDirectMemorySize堆严重不足GC 日志、堆转储优化堆与 GC 策略线程数超限有界线程池先看异常信息,确定是哪种 OOM。开启堆转储与 GC 日志,复现问题。使用 MAT、jstack、jstat 等工具定位根因。

2026-09-01 15:18:27 324

原创 接口的幂等性方案:从原理到落地实践

幂等性(Idempotency)是指同一个操作无论执行多少次,产生的结果都与执行一次相同。在接口设计中,幂等性用于解决因网络超时、客户端重试、消息重复投递等导致的重复请求问题,保证数据不被重复处理、重复扣款或重复下单。一个典型的场景是:用户在支付页面点击「确认支付」,由于网络抖动,前端重试了两次,后端如果不对请求做幂等处理,就可能出现用户被扣款两次的情况。接口幂等性是分布式系统设计中不可回避的问题。核心思路是为每次操作找到一个业务唯一键,并保证该键对应的处理结果只生效一次。

2026-09-01 15:09:14 333

原创 LangChain Agent 高级用法:从入门到生产级实战

高级用法的第一步,是让 Agent 拥有「选择工具」的能力。@tool"""查询指定城市的当前天气。"""# 实际项目中可调用天气 APIreturn f"

2026-09-01 09:33:44 310

原创 LangChain Agent 基本使用:从入门到实战

实际项目中,我们往往需要让 Agent 调用自己的业务函数。LangChain 提供了两种常见方式。定义工具(@tool或初始化 LLM;通过创建 Agent;用驱动执行。Agent 的核心价值在于让模型自主决策、灵活调用工具,从而完成复杂任务。掌握这一套基本流程后,你就可以在此基础上扩展出搜索问答、数据分析、自动化办公等丰富的应用场景。

2026-08-31 10:04:39 187

原创 LangChain 输出解析实战:TypedDict、JSON Schema 与 @dataclass 三种格式

title: str = Field(description="电影名称")rating: float = Field(ge=0, le=10, description="评分")summary: str = Field(description="一句话影评")result = structured_llm.invoke("请评价电影《流浪地球2》")print(result.rating) # 属性访问@dataclasstitle: str。

2026-08-31 09:30:21 209

原创 LangChain 中 Pydantic 格式输出:结构化输出的完整指南

Pydantic 的name: str = Field(description="姓名")age: int = Field(description="年龄")raise ValueError("年龄必须在 0 到 150 之间")return vLangChain 结合 Pydantic 提供了强大而灵活的结构化输出能力。通过定义 Pydantic 模型,我们可以约束模型的输出格式,获得类型安全、易于解析的结构化数据。

2026-08-30 20:25:45 198

原创 ToolMessage 与消息流转

这种「用户 → 模型 → 工具 → 模型」的循环,是当前 Agent 应用的核心消息流转模式。ToolMessage("晴,25℃", tool_call_id)HumanMessage("今天北京天气如何?调用 get_weather(city="北京")在 LangChain 等 Agent 框架中,AIMessage("北京今天晴,25℃")是承载工具调用结果的消息类型。会包含多个调用,每个调用都有独立的。模型生成 tool_calls。框架并行执行后,返回多个。当模型一次请求多个工具时,

2026-08-30 11:32:04 322

原创 Pydantic 介绍与使用:Python 数据校验的现代方案

Pydantic 凭借其简洁的语法、强大的类型支持和卓越的性能,已成为 Python 数据校验领域的事实标准。本文从基础模型定义、字段约束、验证器、序列化到嵌套模型和配置管理,系统介绍了 Pydantic 的核心功能。在实际项目中,建议从简单的模型开始,逐步引入验证器和嵌套结构,让数据层始终保持清晰和健壮。结合 FastAPI 等框架使用时,Pydantic 能显著提升开发效率,减少大量重复的校验代码。

2026-08-30 10:38:08 318

原创 LangChain 工具调用(Tool Calling)实战指南

工具调用是 LLM 的一种能力:模型在生成回复时,可以输出一个结构化的“工具调用指令”,而不是直接给出最终文本。工具名称(tool name)传给该工具的参数(arguments,JSON 格式)应用侧拿到这个指令后,负责真正执行对应的函数,并把执行结果作为新的消息返回给模型,模型再基于结果继续推理,最终给出面向用户的回答。模型本身并不执行工具,它只负责“决定调用哪个工具、传什么参数”。真正的执行逻辑始终由我们的代码完成。在 LangChain 中,最推荐的方式是使用@tool。

2026-08-29 12:13:41 221

原创 部分变量预填充与消息占位符:让对话更智能的两种技巧

部分变量预填充是指在提示词模板中,预先为部分变量填充默认值或初始值,而其余变量留待运行时由用户输入或程序动态填充。这种方式可以让模型在生成回复时,自动带上预设的上下文信息,减少重复输入。消息占位符(MessagesPlaceholder)是一种特殊的模板占位符,它允许在提示词模板中预留一个位置,用于在运行时动态插入一组消息(而不是单个字符串)。这在需要携带多轮对话历史、工具调用记录或检索结果时非常有用。部分变量预填充适合固定不变的上下文信息,能减少重复传参,提升代码可维护性。消息占位符。

2026-08-28 17:23:46 139

原创 Full GC 详解与排查方案:从原理到实战

JVM 的内存被划分为多个区域,其中堆内存(Heap)是垃圾回收的主要战场。新生代(Young Generation):存放新创建的对象,进一步分为 Eden 区和两个 Survivor 区(S0、S1)。老年代(Old Generation):存放存活时间较长的对象,或从新生代晋升过来的大对象。垃圾回收器会定期扫描堆内存,回收不再被引用的对象,释放内存空间。Full GC 是指对整个堆内存(新生代 + 老年代 + 元空间/Metaspace)进行的一次完整垃圾回收。

2026-08-28 15:33:15 292

原创 LangChain 中 content 与 content_block 的使用详解

content是 LangChain 中消息(Message)对象的核心字段,用于承载一条消息的实际文本内容。无论是用户输入、AI 回复还是系统提示,最终都会以content的形式存储在消息对象中。是 LangChain 中用于表示消息内容结构化组成部分的概念。当一条消息的content包含多个不同类型的片段时,每个片段就是一个。content是消息的顶层内容字段,可以是字符串或结构化列表。是content的结构化组成单元,用于表达多模态、多类型内容。当content。

2026-08-28 13:06:54 235

原创 消息与提示词模板:从入门到实战

在 LLM 应用中,消息是模型输入输出的基本单位。角色(Role):标识消息的发送者,常见的有systemuserassistant。内容(Content):消息的实际文本内容。名称(Name):可选字段,用于进一步区分同一角色下的不同实体,例如多个user或tool消息。工具调用(Tool Calls):当模型请求调用外部工具时,消息中会携带工具调用 ID、函数名及参数。工具调用 ID(Tool Call ID):用于将工具执行结果与对应的工具调用请求关联起来。

2026-08-28 11:36:04 363

原创 LangSmith 使用与介绍:从入门到实战

LangSmith 是一个用于构建、调试、评估和监控 LLM 应用的开发者平台。它提供了从开发到生产全生命周期的可观测性支持,是 LangChain 生态中不可或缺的一环。调试困难:LLM 输出不确定,出错时难以定位是 Prompt 问题、模型问题还是代码逻辑问题。评估主观:如何量化一个 Prompt 的好坏?如何对比不同模型的输出质量?监控缺失:应用上线后,如何及时发现异常调用、成本飙升或质量下降?LangSmith 通过Trace(追踪)Dataset(数据集)和Evaluator(评估器)

2026-08-28 10:10:22 334

原创 LangChain 模型调用中的 config 参数详解

在 LangChain 中,config参数通常指调用链(Chain)或模型(Model)时传入的运行时配置对象。它独立于模型本身的参数(如max_tokens),用于控制调用过程中的非模型行为。# 调用时传入 configresponse = model.invoke("你好", config={"timeout": 30})config参数是 LangChain 调用模型中一个灵活且强大的配置入口。合理使用超时、重试、回调和标签等配置,可以显著提升应用的健壮性和可观测性。建议在实际项目中结合。

2026-08-27 21:04:03 328

原创 OpenAI 兼容接口中的 extra_body 参数详解

extra_body是 OpenAI Python SDK 中等请求方法提供的一个可选参数。它的作用是将你传入的字典内容原样合并到发送给服务端的 JSON 请求体中。简单来说,当 SDK 已经封装了大部分常用参数(如modelmessages),但某些新功能或自定义字段尚未被 SDK 支持时,你可以通过extra_body直接把这些字段塞进请求体,无需等待 SDK 更新。extra_body是一个轻量但非常实用的参数,它让你在 SDK 尚未封装新特性时,依然能够灵活地向 API 请求中注入自定义字段。

2026-08-27 20:57:37 343

原创 LangChain model_kwargs 参数详解:从入门到实战

是 LangChain 中用于向底层模型传递额外参数的字典。当你实例化一个模型对象(如ChatOpenAI等)时,LangChain 会将其中的常用参数(如max_tokens)提取为显式参数,而则用于传递那些未被显式提取的参数。不要将已在显式参数中定义的参数重复放入,以免造成混淆。是 LangChain 中一个灵活而强大的参数传递机制,它让你能够充分利用底层模型 API 的全部能力。掌握它的用法,可以帮助你构建更精细、更可控的 LLM 应用。在实际开发中,建议结合官方文档,合理使用显式参数和。

2026-08-27 20:54:02 212

原创 LangChain 模型调用方法总结:invoke、batch、stream 的入参与出参

下面是 LangChain 模型调用的完整流程示意图:fill:#333;important;important;fill:none;color:#333;color:#333;important;fill:none;fill:#333;height:1em;构造模型实例选择调用方法invoke 单次调用batch 批量调用stream 流式调用传入字符串或消息列表配置参数 temperature / max_tokens 等获取返回值LLM 返回 str。

2026-08-27 16:04:47 233

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除