自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 LangGraph vs LangChain

LangGraph与Langchain的对比,简单描述各自的特点

2026-08-27 23:59:04 516

原创 RabbitMQ、RocketMQ、Kafka 怎么选?三种常用消息队列对比

三种常用消息队列如何选择?

2026-08-26 23:58:34 364

原创 LangGraph:子图动态路由与 Agent 工作流设计

动态子图跳转:LangGraph支持子图通过Command(goto="node_b", graph=Command.PARENT)直接返回父图指定节点,实现动态路由,需通过destinations声明以正确渲染拓扑。 路由分层设计:推荐将路由拆分为语义判断(LLM输出结构化结果)和图路由(Python函数映射节点),避免LLM直接返回节点名,降低耦合。

2026-08-25 16:26:54 378

原创 LangGraph Agent 模式详解:从自主决策到 Tool Calling 执行链

本文详细解析了LangGraph中Agent模式的工作原理与实现方式。文章首先区分了固定Workflow和Agent的核心差异:前者由开发者预设执行路径,后者则由模型自主决策。Agent通过"推理-行动-观察"的循环机制完成任务,其核心结构包含Agent节点和Tool节点。 文章深入探讨了Agent节点的职责、Tool Calling的完整执行链路、bind_tools的实际作用,以及ToolNode的工作机制。

2026-08-24 23:00:03 398

原创 LangGraph 运行图设计模式详解:如何设计复杂 Agent 工作流?

探讨了Agent任务流程的七种设计模式:1) 顺序执行(Prompt Chaining)适合固定流程;2) 并行执行(Parallelization)提升多任务效率;3) 路由模式(Routing)根据输入动态分支;4) 协调者-执行者(Orchestrator-worker)拆分复杂任务;5) 评估优化(Evaluator-optimizer)循环改进输出;6) Agent自主决策灵活应对未知任务;7) 选择建议:根据任务确定性、依赖关系和优化需求匹配模式

2026-08-23 19:57:01 359

原创 LangGraph 子图详解:父子图如何通信、持久化与流式执行?

本文介绍了LangGraph中子图的两种用法及其特点:1)通过节点函数调用子图,适用于状态隔离场景;2)直接将编译后的子图作为节点,适用于状态共享场景。子图支持检查点持久化,通过thread_id、checkpoint_ns和checkpoint_id实现层级状态管理。子图提供三种持久化策略:每次调用独立状态、线程级持续状态和无状态模式。观察子图执行时,可通过subgraphs参数同时获取父子图流数据,并通过namespace区分来源。这些特性使子图成为模块化开发复杂工作流的有效工具。

2026-08-22 23:26:31 376

原创 LangGraph 流式执行详解:stream、astream 与 stream_mode 怎么选?

LangGraph流式执行详解

2026-08-21 22:19:12 968

原创 LangGraph ToolNode 工具调用详解:从手动执行到 ToolRuntime 与容错

上一篇我们学习了和 HITL,让 Agent 可以在关键步骤暂停并等待人工确认。。本文不展开太多底层细节,重点把、手动工具节点、ToolNode、工具更新 State 和工具容错几个知识点串起来。

2026-08-20 23:07:16 321

原创 LangGraph 中断机制详解:Interrupt、HITL、审批与工程实践

本文介绍了LangGraph中Agent的中断与人工协作功能。主要内容包括:1)LangGraph提供动态和静态两种中断机制,动态中断通过interrupt()实现业务逻辑暂停;2)中断流程包括保存检查点、等待输入和恢复执行;3)中断必须配合检查点保存状态信息;4)人工介入的三种模式:审批、审核编辑和工具执行审批;5)支持多中断点区分恢复;6)使用注意事项如避免try/catch包裹中断、保持中断顺序等;7)中断机制可与企业Agent工具结合,实现关键操作的人工确认。

2026-08-19 23:09:54 444

原创 LangGraph Runtime Context 与 State 设计详解:节点到底应该保存什么?

LangGraph开发中数据存储的三类区分:State、Store和Runtime Context。State用于保存当前执行过程的状态数据,支持断点恢复;Store存储长期用户数据;Runtime Context仅保存当前请求的临时信息(如用户身份、权限)。合理区分三者能避免状态臃肿,提升执行效率和会话管理。典型设计应将任务数据放State,用户画像放Store,请求参数放Context,确保节点职责清晰且系统可维护。

2026-08-18 23:04:49 386

原创 为什么 LangGraph 需要 `defer=True`,而不是直接把节点放在最后?

defer=True主要用于解决复杂并行流程中节点执行时机问题,而非简单调整节点顺序。在线性流程中,直接将收尾节点置于末尾即可;但在并行分支长度不同时(如多Agent协作、Map-Reduce场景),普通节点依赖边触发可能导致提前执行。defer=True通过延迟节点调度,确保其等待所有待处理任务完成后再执行,适用于汇总、聚合等统一收尾需求。关键区别在于:普通节点依赖图的连接关系触发,而延迟节点依赖系统级任务完成状态。因此,它并非后台异步任务,而是对执行时序的精确控制机制。

2026-08-17 17:39:02 329

原创 LangGraph 记忆管理详解:短期记忆、长期记忆与 Runtime Context

本文介绍了LangGraph中Agent开发的三种信息管理机制:短期记忆、长期记忆和Runtime Context。短期记忆通过State + Checkpointer实现,作用于同一thread_id的会话;长期记忆通过Store实现跨会话数据共享;Runtime Context则仅作用于当前调用,不会被持久化。三者分别适用于不同场景:会话状态、用户长期数据和临时调用参数。开发者可根据数据的作用范围和持久化需求选择合适的存储机制,其中短期记忆和长期记忆可配合使用,实现数据的高效存取。

2026-08-16 23:05:47 444

原创 LangGraph 失败恢复详解:为什么成功节点不会重复执行?

本文探讨了LangGraph中节点失败恢复的机制。当同一SuperStep中部分节点成功、部分失败时,LangGraph通过检查点(Checkpoint)记录成功节点的结果和失败节点的错误信息。修复问题后恢复执行时,系统会复用已成功节点的结果,仅重新执行失败节点,而非整个工作流从头运行。这种机制通过保存任务执行状态(成功结果或错误)实现,确保恢复时能精确继续未完成的任务,避免重复执行已成功的昂贵操作。

2026-08-15 23:38:45 336

原创 LangGraph 检查点回溯详解:Replay 与 Fork 到底有什么区别?

LangGraph提供了两种基于历史检查点继续执行的方式:Replay和Fork。Replay:基于历史检查点重新执行后续流程,不修改原始状态,适用于重现执行过程。 Fork:通过update_state()修改历史状态的某些字段,生成新的检查点并继续执行,适用于测试不同分支或调整执行路径。 两者的核心区别在于是否修改历史状态: Replay直接基于原检查点执行,确保流程重现(但动态内容可能不同)。

2026-08-14 22:30:32 252

原创 LangGraph 历史检查点详解:get_state_history、get_state 与 StateSnapshot 到底怎么看?

本文介绍了LangGraph中检查点(Checkpoint)的查看方法,重点比较了get_state()和get_state_history()的区别。get_state_history()用于获取完整的执行历史,返回包含多个StateSnapshot的迭代器,每个快照记录特定步骤的状态值(values)、下一步节点(next)、配置信息(config)和元数据(metadata)。而get_state()默认返回最新状态,配合checkpoint_id可查看指定历史检查点。

2026-08-13 23:13:28 384

原创 LangGraph 持久化机制详解:Checkpoint、Checkpointer 与 thread_id 到底是什么?

本文介绍了LangGraph中持久化执行的核心概念,包括检查点(Checkpoint)、检查点存储器(Checkpointer)和线程ID(thread_id)的协同工作机制。检查点是图执行过程中的状态快照,检查点存储器负责保存和读取这些快照,而线程ID则用于标识不同的执行会话。文章通过对比内存存储(InMemorySaver)和数据库存储(PostgresSaver),说明了不同持久化方案的适用场景。

2026-08-13 23:03:27 425

原创 LangGraph 循环防护详解:recursion_limit、RemainingSteps 与 GraphRecursionError

LangGraph 为循环工作流提供了 recursion_limit 机制,防止无限执行。该参数限制单次图运行的最大 SuperStep 数量(非函数递归次数),并通过 config["metadata"]["langgraph_step"] 跟踪当前步数。当步数耗尽时,默认抛出 GraphRecursionError,但更推荐主动使用 RemainingSteps 状态字段实现优雅退出。

2026-08-12 22:31:20 1388 1

原创 LangGraph ReAct 循环详解:让 Agent 学会思考、调用工具与继续执行

本文介绍了LangGraph中ReAct工作流的核心机制。ReAct通过"思考(Reason)+行动(Act)"的循环模式,使Agent能够动态调用工具并持续优化结果。文章详细解析了ReAct的两个关键实现方式:通过add_conditional_edges的条件边判断和Command命令的直接跳转控制,并比较了两者的适用场景。同时展示了State在循环过程中的演变过程,说明ReAct本质上是将State、Node、条件判断等基础机制组合应用的结果。

2026-08-11 23:05:38 424

原创 LangGraph 多分支汇聚详解:Fan-in 与 MapReduce 是怎么实现的?

本文介绍了LangGraph中Fan-in的概念及其实现方式。Fan-in用于解决动态分支任务执行后结果的汇聚问题,与Fan-out形成互补。文章详细对比了两种Fan-in实现方式:等待所有上游完成再触发的["node_c", "node_d"]列表写法,和每个上游独立触发下游的单独写法。通过Superstep执行模型解释了触发机制的差异,并展示了如何结合Send动态创建任务、Reducer合并结果来实现MapReduce模式。

2026-08-10 23:39:23 360 7

原创 LangGraph 动态分支详解:Send 和 Command 到底有什么区别?

介绍了LangGraph中的动态分支功能,重点对比了Send和Command两种控制流工具。Send用于运行时动态创建任务实例,允许根据运行数据决定任务数量和内容,但不改变图结构;而Command则用于运行时决定节点跳转路径,能同时更新状态。文章通过动态扇出示例展示了Send的用法,并解释了多任务状态更新时的Reducer合并机制。

2026-08-09 22:10:20 355

原创 LangGraph 中 State、Node、Edge 到条件分支:一个工作流到底是怎么跑起来的?

本文介绍了LangGraph的核心概念和工作原理,重点解析了State、Node、Edge三个基本元素及其交互方式。

2026-08-08 23:21:52 363 1

原创 Python logging 在 Agent 项目中的入门实践

本文介绍了如何在Python Agent项目中合理使用logging模块替代print()进行日志管理。

2026-08-07 23:13:50 330

原创 codex接入deepseek,通过codex-Tools工具(开源免费),小白也能学会

本文介绍了Codex Tools这一开源工具的核心功能与使用方法,主要解决多Codex账号管理和API切换的痛点。工具提供图形化界面实现账号管理、用量查看、配置切换和API接入,支持本地保存账号列表并快速切换。 内容涵盖: 工具下载安装步骤(Windows系统) 账号添加与切换操作指南 DeepSeek API接入方法(包括API Key获取和配置) 常见问题解决方案。

2026-08-06 14:46:48 457 5

原创 LangChain Agent 流式输出:stream_mode=“values“ 数据结构解析

本文介绍了如何使用LangChain的create_agent()创建agen,并重点讲解流式输出模式。通过stream_mode="values"参数,代理执行时会逐步返回完整状态,其中chunk["messages"][-1]可获取最新消息。消息对象包含content(文本内容)和tool_calls(工具调用信息)两个关键属性。文章展示了代理处理股票查询的完整流程:接收用户问题→决定调用工具→执行工具→整合结果→生成最终回答。

2026-08-05 18:06:59 307

原创 Java 是如何操作Redis的?从 Spring Data Redis中RedisTemplate 源码分析 ZSet 调用链

本文分析了Java通过Spring Data Redis操作ZSet的原理,深入源码进行分析。以RedisTemplate的opsForZSet()和range()方法为例,揭示了完整的调用链:从DefaultZSetOperations序列化参数,到RedisTemplate执行命令,最后通过RedisConnection发送给服务器并反序列化结果。文章详细解析了ZADD和ZRANGE命令的执行过程,包括序列化处理、连接获取和结果转换等关键环节,帮助理解Java与Redis的底层交互机制。

2026-08-05 11:32:16 953 1

原创 深入剖析 MySQL InnoDB 存储引擎:架构、事务与锁机制

本文深入解析了MySQL InnoDB存储引擎的核心原理,主要包含四个部分:1)逻辑存储结构,介绍表空间、段、区、页和行的层级关系;2)体系架构,包括内存结构(缓冲池、更改缓冲区等)和磁盘结构(表空间、日志等)的交互机制;3)事务实现原理,详细阐述Redo Log、Undo Log和MVCC如何保证ACID特性;4)锁机制,分析从全局锁到行锁的粒度及并发控制策略。

2026-08-04 23:38:59 200 1

原创 深入理解 LangChain RAG 链中 History 的传递机制

在使用 LangChain 构建带对话历史的 RAG应用时,我对数据在Chain中的流转过程感到困惑。尤其是当 `RunnableWithMessageHistory`、`RunnablePassthrough` 和自定义 `RunnableLambda` 组合在一起时,`history` 到底是如何被注入并传递给 Prompt 模板的?如果你也有过这样的疑惑,那么这边文章或许可以帮到你。

2026-08-04 16:13:15 348 4

原创 MyBatis 底层的 JDBC:从 PreparedStatement 看 SQL 注入防护

本文深入解析JDBC中PreparedStatement的核心机制,重点阐述其如何通过预编译和参数绑定有效防止SQL注入。文章首先演示了SQL注入的典型场景:通过字符串拼接构造恶意SQL绕过身份验证。随后详细讲解PreparedStatement的解决方案,包括参数化查询的创建、参数绑定和执行流程,并通过日志分析展示其安全原理。最后揭示了PreparedStatement的底层工作机制,说明预编译语句如何分离SQL结构与参数值,实现安全性和性能的双重提升。

2026-08-03 23:56:58 343 7

原创 LangChain 文档加载器中的 metadata 是什么?

本文介绍了LangChain文档加载器中metadata的概念与作用。Document对象包含两部分:page_content(正文内容)和metadata(来源、页码等附加信息)。metadata通常用于记录文档属性、过滤检索结果和展示来源,而page_content则参与向量化处理。文章通过示例说明了两者的区别,并指出metadata在RAG项目中的常见用途,包括按类别过滤、显示引用来源、权限控制等。最后强调page_content和metadata虽然可能包含相同字段,但用途完全不同。

2026-08-02 23:37:13 330 4

原创 LangChain 向量检索为什么要用 as_retriever?从 LCEL 到 RunnableParallel 一次讲清

通过一个完整的 LangChain RAG 示例,讲清向量检索接入 LCEL 的关键过程:VectorStore 如何转换为 VectorStoreRetriever,similarity_search() 与 as_retriever() 有何区别,以及 RunnableParallel 如何将同一问题分发给多个分支,帮助初学者理解向量检索链的执行逻辑。

2026-08-01 16:02:03 740 2

空空如也

空空如也

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

TA关注的人

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