- 博客(519)
- 资源 (5)
- 收藏
- 关注
原创 从十二缘起到职场修行:一场关于念头、业力与现实的对话
从十二缘起的轮回链条,到业力的种子与惯性,再到"论迹不论心"的处世智慧,最后落回职场这个最现实的道场
2026-09-11 15:33:03
40
原创 上位机软件设计要点
事件驱动 模块间Pub-Sub,加功能即订阅,零侵入 (有时一套代码适配多个项目,不能应为改了一处影响所有项目)一个好的可维护的代码,一定可以为公司节省大量的时间和成本。报警即定位:不是报"通信超时",而是报"从站3无响应,检查站号/波特率/物理连接"核心:上位机关键不是功能都"做出来"就行,而是"活得久、修得快、现场能自治"。还比如(try 的捕获,要能反馈最初始的问题,而不是一个最终的显示的问题)人好理解:语义命名、状态机图表、决策注释写清"为什么"四、好理解:人懂 + AI懂,重点攻AI。
2026-08-01 15:31:12
181
原创 【C#】 主构造函数(Primary Constructors)的来龙去脉
这是与record// record:参数 = 自动属性(public)// Name, Age 是公共属性// class 主构造函数:参数 = 参数(作用域内可用,不自动暴露)public class Person(string name, int age) // name, age 只是参数// 开发者决定如何暴露record的定位是"数据载体",公开属性符合其语义class的定位是"行为封装",隐藏内部依赖符合 OOP 原则。
2026-07-25 16:40:26
214
原创 【C#】 `Channel<T>` 深度解析:生产者-消费者模式的现代解法
C# Channel<T> 深度解析摘要 Channel<T> 是 .NET Core 3.0 引入的生产者-消费者模式现代解决方案,位于 System.Threading.Channels 命名空间。它提供了线程安全、异步优先的数据交换机制,支持无界和有界两种模式。无界 Channel 队列可无限增长,而有界 Channel 可配置容量和满队列策略(等待/丢弃新旧数据等)。核心组件包括 ChannelWriter<T>(提供写入方法)和 ChannelReader<T>(提供读取方法),支持多生产者/多消
2026-07-24 15:50:11
215
原创 【C#】 一行代码的魔法:`public readonly record struct` 完全解析
C#中的public readonly record struct MachineId(string Value)一行代码浓缩了现代编程的多项最佳实践。这行声明创建了一个轻量级、不可变的值类型标识符,具有以下特性: 通过public提供广泛访问性 readonly确保不可变性,增强线程安全性 record自动生成值相等比较、解构和with表达式等功能 struct实现栈分配,减少GC压力 主构造函数语法(C#12)简化声明 这行代码特别适用于领域驱动设计中的强类型ID模式,能有效避免原始类型滥用问题,同时通
2026-07-20 19:14:13
250
原创 【LangChain】从“链式调用“到“中间件架构“——一场关于“控制“的三年长征
本文回顾了LangChain框架从2022年到2026年的演进历程,揭示了开发者需求从"便利"到"控制"的转变。早期链式调用虽简化LLM集成,但导致代码臃肿和失控;2024年LangGraph引入图结构实现流程控制,但上下文工程仍不足;2025年LangChain 1.0采用中间件架构解决横切关注点问题,实现控制与模块化的平衡。最终形成运行时(LangGraph)、上下文工程(LangChain)和模型集成的清晰分层架构,下载量突破24亿次。文章指出AI应用开发的真正挑战在于平衡控制权与开发效率。
2026-06-29 17:04:37
365
原创 【LangChain】 预定义工具与 Toolkits 详解:从单独使用到混合编排
在上一篇博客中,我们深入探讨了 LangChain 中**自定义工具(Custom Tools)**的实现方式,包括如何使用 `@tool` 装饰器和 `BaseTool` 类来封装业务逻辑。然而,LangChain 的强大之处不仅在于支持自定义扩展,更在于它提供了一套**开箱即用的预定义工具(Prebuilt Tools)**和**工具集(Toolkits)**,能够让我们快速构建具备搜索、计算、数据库操作等能力的智能 Agent。
2026-06-27 17:08:24
280
原创 【LangGraph】 InMemorySaver 深度解析:与 Message History 的范式对比
在 LangChain 生态中,记忆机制经历了从"消息容器"到"状态快照"的范式跃迁。本文将深入解析 `InMemorySaver` 的工作原理,并与传统的 Message History(如 `ConversationBufferMemory`)进行全面对比,帮助你在 2026 年的 Agent 开发中做出正确选择。
2026-06-27 16:15:14
418
原创 【LangChain】 LangChain中的工具(Tools)——自定义工具调用与 ReAct 隐性纠错
本文是 LangChain Expression Language (LCEL) 系列文章的开篇,聚焦于 **Tool(工具)** 的定义、自定义方式,以及一个有趣的实验:当工具"说谎"时,Agent 会如何反应?
2026-06-27 14:53:29
544
原创 【LangChain】 文档链与检索链深度解析
LangChain文档链与检索链解析 摘要: LangChain的RAG体系包含文档链和检索链两大核心。文档链负责处理检索到的文档(格式化、拼接、整合到提示词并传递给LLM),而检索链则管理完整问答流程(问题→检索→文档处理→回答)。相比手动拼凑的无链方案,链式架构具有标准化流程、自动上下文管理、高扩展性等优势:通过create_stuff_documents_chain处理文档,create_retrieval_chain协调整个流程,实现检索器、文档链和LLM的解耦,避免手动方案存在的格式混乱、代码冗余
2026-06-15 07:43:26
395
2
原创 【LangChain】RAG 中检索结合多轮对话记忆
1. **包装器模式**: 不侵入原有 RAG 链, 基础逻辑零改动;2. **零侵入**: Prompt, 检索, 模型调用层完全保留;3. **成本最低**: 仅需增加 `MessagesPlaceholder` 和包装器配置, 实现复杂度极低。
2026-06-15 07:33:21
511
原创 【LangChain】检索器完全指南:从向量检索到生产级 RAG 架构
本文是 LangChain Expression Language (LCEL) 系列文章的开篇,后续将深入探讨 LCEL 的链式组合与高级用法。系列文章将遵循统一的 Markdown 格式规范,标题层级清晰,代码示例可复现。
2026-06-13 08:19:02
562
原创 平衡相关性与多样性:推荐系统中的永恒博弈与 MMR 算法详解
摘要: 推荐系统面临相关性与多样性的根本矛盾:过度追求相关性会导致信息茧房,而单纯强调多样性则降低用户体验。MMR算法(最大边际相关性)通过数学公式平衡两者,每次选择物品时既考虑与用户的相关性,又惩罚与已选物品的相似性。关键参数lambda控制权衡比例,算法采用贪婪迭代策略实现高效计算。MMR已广泛应用于RAG、推荐系统等领域,并被主流框架原生支持,但其存在贪婪策略局限性和参数敏感问题。进阶方法如xQuAD和多目标优化可进一步优化效果。理解场景需求是找到最佳平衡点的核心。
2026-06-13 08:16:09
370
原创 【LangChain】 嵌入模型包装器(Embeddings)深度解析
本文深入解析了LangChain框架中的嵌入模型包装器(Embeddings),这是文本向量化的核心组件。文章首先介绍嵌入模型将文本转化为数值向量的基本原理及其在语义理解、相似度计算等任务中的应用。然后详细说明了LangChain提供的标准化接口设计,包括批量文档嵌入和单查询嵌入两种方法。通过OpenAI和百度千帆的代码示例展示了具体使用方式,并分类介绍了支持的各种嵌入模型类型,包括云端API、本地部署、多模态和中文专用模型等。文章还讲解了缓存包装器这一高级特性,可显著提升性能并降低成本。最后阐述了嵌入模型
2026-06-08 07:39:45
290
原创 【LangChain】 文档加载器(Loader)深度解析:从数据源到 Document 的统一之道
这是 LangChain Expression Language (LCEL) 系列文章的开篇。我们将从最基础的数据输入层——Document Loader 开始,逐步深入 LangChain 的完整数据管道。
2026-06-07 10:46:41
354
原创 【LangChain】 Document 对象:RAG 数据流的核心枢纽
本文是 LangChain 系列文章之一,重点剖析 `Document` 对象的数据结构、承上启下的枢纽作用,以及在 RAG 全流程中的实际应用。
2026-06-07 10:44:48
353
原创 【LangChain】 文本分割器全景指南:从 RecursiveCharacterTextSplitter 到各类分割器对比
在构建 RAG(检索增强生成)系统时,**文档分割(Chunking)** 是决定检索质量的第一道关卡。本文将系统梳理 LangChain 中各类文本分割器,并以 `RecursiveCharacterTextSplitter` 为核心,深入解析其工作原理、参数配置与最佳实践。
2026-06-07 10:23:21
440
原创 【LangChain】RunnableWithMessageHistory 完全指南(下):流式、截断与自定义
在上篇中,我们掌握了 `RunnableWithMessageHistory` 的基础用法——如何包装链、管理 Session、以及底层的工作原理。但生产环境中的挑战远不止于此:- 用户要求**实时看到 AI 的回复**,流式输出怎么搞?- 对话历史越来越长,**Token 费用爆炸**怎么办?- 公司有**审计合规**要求,需要自定义存储逻辑?本文将深入这三个核心场景,并给出一套**可直接投入生产**的完整代码模板。
2026-05-30 07:37:07
204
原创 【LangChain】RunnableWithMessageHistory 完全指南(上):基础与存储实战
本文是《RunnableWithMessageHistory 完全指南》系列的上篇,主要介绍 LangChain 中对话历史管理的基础概念和实战应用。文章从 LLM 无状态的局限性出发,分析了手动管理对话历史的痛点,引出 RunnableWithMessageHistory 这一声明式解决方案。 核心内容包括: 对话历史的必要性:LLM 本质无状态,多轮对话需要外部维护上下文 设计哲学:采用声明式编程范式,将历史管理与业务逻辑解耦 核心机制:基于 Session ID 隔离对话历史,自动完成加载-拼接-保存
2026-05-30 07:35:55
516
原创 C++ Lambda 捕获陷阱:`[&]` 与显式值捕获的线程安全之争
C++多线程编程中,lambda捕获方式的选择直接影响线程安全性。使用[&]引用捕获可能导致悬空引用问题,当外层函数返回后,线程访问的栈内存可能已被销毁,引发未定义行为。相比之下,显式值捕获(如[this, var1, var2])会创建独立副本,确保线程安全。最佳实践建议:1)优先显式列出捕获变量;2)共享数据修改需使用智能指针和同步原语;3)避免隐式捕获。核心原则是保证对象生命周期覆盖线程执行时间,否则必须使用值捕获。这个案例警示我们,编译通过不等于运行正确,多线程环境下捕获方式的选择是稳定与崩溃的关键
2026-05-23 16:35:29
270
1
原创 【LangChain】 多轮对话实战:手动管理对话历史的三种核心组件
在多轮对话应用中,模型需要"记住"之前的对话内容才能给出连贯的回复。LangChain 提供了灵活的组件来管理这种"记忆",但初学者常常混淆各组件的职责边界。本文将深入剖析三个核心组件——`ChatMessageHistory`、`RedisChatMessageHistory` 和 `MessagesPlaceholder`——并展示如何手动搭建一个完整的多轮对话系统。
2026-05-22 07:50:10
690
原创 【LangChain】实现网页内容问答:从 gov.cn 抓取到 LLM 回答的完整链路
通过一个实际案例,完整拆解 LangChain `WebBaseLoader` 的 `bs_kwargs` 透传机制,以及如何利用预制 LCEL 链和 BeautifulSoup 完成「网页抓取 → 文本分割 → LLM 问答」的全流程。
2026-05-21 07:39:38
621
原创 【LangChain】LCEL 链式构建方法论:从混沌到秩序的探究之路
当我们第一次面对 LangChain Expression Language(LCEL)时,往往会被其优雅的管道语法 `|` 所吸引。但真正让我们陷入困境的,不是语法本身,而是**"如何从零开始设计一条合理的链"**。本文将以探究的模式,分享一套经过实践验证的构建方法论。
2026-05-20 07:23:12
526
原创 【LangChain 】从一行 LCEL 代码,理解 LangChain 管道操作符 `|` 的自动转换机制
本文解析了LangChain LCEL管道操作符|的自动转换机制。通过一个用户反馈处理链的代码示例,揭示了|操作符如何将普通Python对象(如函数、字典)自动转换为Runnable类型。核心机制是Runnable类实现了__or__和__ror__方法,当至少一边是Runnable时,系统会自动将非Runnable对象转换为对应的RunnableLambda、RunnableParallel等类型。文章还澄清了常见误区,指出开发者无需手动包装普通函数,并提供了各种组合的可行性对照表。这种自动转换机制大大简
2026-05-19 07:37:21
566
1
原创 【LangChain 】RunnablePassthrough 两种写法对比:`.assign()` 的参数到底要不要包 `RunnableLambda`?
`.assign()` 和 `RunnableParallel` 是"友好"的 API,看到函数会自动帮你包成 `RunnableLambda`;但管道运算符 `\|` 是"严格"的,只接受 Runnable 对象,不会自动转换。 在 `.assign()` 里直接写函数或 Lambda 就行,别画蛇添足包 `RunnableLambda`
2026-05-18 07:16:03
402
3
原创 【LangChain 】 RunnablePassthrough:LangChain 管道里的“透明水管“
本文介绍了LangChain中的RunnablePassthrough组件,将其比喻为"透明水管"。该组件本身不改变输入数据,主要作用是在管道处理中实现数据分流。文章通过RAG系统的实例说明,当需要同时保留原始输入(如用户问题)和处理结果(如检索文档)时,RunnablePassthrough能有效解决LangChain管道中数据单向传递的限制。它还支持通过assign方法在保留原数据的同时添加新字段。核心价值在于复杂AI流程中确保关键数据不被丢失,是LangChain管道设计中实现数据并行处理的重要工具。
2026-05-17 13:12:59
240
原创 【LangChain】 Expression Language 系列(二):Runnable 源码剖析——理解 stream 和 transform 的迭代器魔法
本文深入剖析了LangChain Expression Language(LCEL)中Runnable的核心源码实现。文章首先指出阅读源码的必要性,解释了stream逐字输出、batch并发等关键特性的底层原理。然后重点分析了Runnable抽象基类的设计,包括同步/异步接口和组合操作符的实现。接着详细解读了RunnableSequence的管道组合机制,展示了数据在组件间的传递流程。最后揭示了stream功能的实现魔法,特别是ChatOpenAI如何通过设置stream=True实现真正的流式输出。全文通
2026-05-16 07:25:57
495
原创 【LangChain】LangChain Expression Language 系列(一):构建 AI 应用的新范式
这是 LCEL 深度解析系列的开篇。后续文章将从源码、自定义组件、复杂编排、生产级 RAG 与 Agent 等维度逐层深入。本文先建立完整的认知框架——LCEL 是什么、核心抽象有哪些、以及它如何重塑 AI 应用的构建方式。**
2026-05-16 07:22:43
519
原创 【Langchain】 ChatPromptTemplate:从“手动拼字符串“到“专业模板“的进化之路
ChatPromptTemplate 是 LangChain 中专门用来组装聊天消息的"模板引擎",它能让你像填空题一样,把变量插进预设的对话结构里,告别手动拼接字符串的混乱时代。
2026-05-15 07:37:13
595
原创 【LangChain】 LCEL 核心组件详解:RunnableSequence vs RunnableParallel / RunnableMap
本文详细介绍了LangChain LCEL中的两大核心组件:RunnableSequence和RunnableParallel/RunnableMap。RunnableSequence用于串行执行多个步骤,前一步输出作为后一步输入;而RunnableParallel/RunnableMap则用于并行执行多个独立分支,最后合并结果。文章通过代码示例展示了两种组件的使用方法、执行流程和适用场景,并对比了它们的关键差异。最后通过一个智能客服工单分析的实战案例,演示了如何组合使用串行和并行组件来完成复杂任务。
2026-05-15 07:04:49
576
原创 【LangChain】 Runnable 链式调用深度解析:从 `itemgetter` 到 `RunnableLambda`
本文深入解析了LangChain框架中Runnable链式调用的核心机制,重点剖析了itemgetter、管道符|和RunnableLambda的用法与设计原理。主要内容包括: itemgetter作为Python标准库的数据提取工具,本质是可调用对象,用于从字典/列表中提取值 管道符|通过运算符重载实现链式编排,LangChain采用"左包右不包"策略:左边自动包装为Runnable,右边严格要求类型安全 RunnableLambda作为适配器,将普通Python函数转换为符合Runn
2026-05-14 07:41:05
414
1
原创 【LangChain 】大模型调用双雄:流式输出vs 批量调用 —— 一文讲透怎么选
摘要: 大模型调用方式中,流式输出(边生成边返回)适合用户交互场景,降低等待焦虑;批量调用(打包并行处理)适合后台任务,提升效率。两者各有优劣:流式输出首字延迟低但后端复杂,批量调用吞吐量高但需统一输入格式。实际应用中,聊天机器人、长文本生成推荐流式输出;文档批量处理、数据标注推荐批量调用。两者也可组合使用,兼顾体验与效率。选择时需根据场景需求权衡,而非技术本身。
2026-05-14 06:32:50
922
原创 【LangChain】LangServe:5 分钟把你的 LangChain 应用变成在线 API
LangServe是LangChain官方推出的快速部署工具,能将LangChain应用一键转换为REST API服务。它基于FastAPI构建,只需调用add_routes函数即可将Chain封装成Web服务,自动生成接口文档和调试界面。支持单次调用、批量处理和流式输出,并提供Python远程调用接口,使远程服务调用如同本地函数般便捷。通过示例展示了如何快速部署翻译服务,并介绍了进阶功能如多服务部署和RAG知识库集成。LangServe极大简化了AI能力对接流程,是LangChain应用快速上线的理想解决
2026-05-14 06:04:11
636
原创 【LangChain 】 自定义解析器实战指南:从原理到 10 个业务场景落地
痛点描述 — 真实业务问题 完整代码 — 可直接运行的解析器实现使用示例 — prompt | llm | parser 的 Chain 用法适用领域 — 明确标注适用场景
2026-05-12 07:55:57
727
4
原创 【LangChain】 输出解析器(Output Parsers)完全指南
本文介绍了LangChain中的输出解析器(Output Parsers),它们是将LLM输出的自然语言转换为结构化数据的桥梁。文章详细分类了各种解析器,包括基础文本(如StrOutputParser)、列表(如CommaSeparatedListOutputParser)、结构化(如JsonOutputParser和PydanticOutputParser)以及专用解析器(如DatetimeOutputParser)。重点解析了PydanticOutputParser的优势,它能将输出直接转为类型安全的P
2026-05-11 07:37:57
480
2
《PrismPrism.DryIoc 对话框中使用 Region 的完整指南 》 配套资源
2025-08-25
halcon算子列表.xlsx
2025-08-05
TimeQuest笔记
2013-04-09
孙鑫C++教程(全20讲)PPT讲义 + code
2024-04-18
wpf .net prism 框架 项目模板
2023-12-08
tesseract-ocr-setup-4.00.00dev + tessdata + jTessBoxEditorFX-2.2
2022-04-25
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅