LangChain:消息(Message)类型和特性详解
LangChain的消息系统是结构化对话管理的核心组件,通过明确区分角色和上下文,使大模型能精准处理多轮对话与工具调用。
其核心是四种基础消息类型(SystemMessage、HumanMessage、AIMessage、ToolMessage),官方文档明确要求必须使用类型化消息对象而非原始字典,以确保跨模型兼容性和功能完整性。
LangChain的消息系统是结构化对话管理的核心组件,通过明确区分角色和上下文,使大模型能精准处理多轮对话与工具调用。
其核心是四种基础消息类型(SystemMessage、HumanMessage、AIMessage、ToolMessage),官方文档明确要求必须使用类型化消息对象而非原始字典,以确保跨模型兼容性和功能完整性。
LangChain 已从一个简单的链式调用库,发展为包含多个开源框架的全链路完整生态,涵盖了开发→编排→部署→监控。
LangChain 1.0 是一次重大的架构重构,其核心定位已从方便调用的“工具集”,转变为面向生产的“智能体工程框架”。
本文章是基于LangChain 1.0+版本的定义和特性的描述。
LangChain 1.0+ 官方文档和路线图中没有直接定义或描述“LEDVR” 这个术语。
目前 LEDVR 这个词主要出现在一些中文社区博客和技术文章中,是对RAG(检索增强生成)流程节点的概述。而官方的英文术语中,一般用 RAG(检索增强生成)来描述从文档加载到向量检索的端到端数据预处理流程。
LangChain中的文档链是处理文档内容的核心组件,专门用于文档总结、问答、信息提取等任务。在LangChain 1.0+版本中,官方推荐使用LCEL(LangChain Expression Language)风格的链,它们更易于扩展和集成。
回退通常意味着用一个全新的响应来替换失败的响应,而这在流式传输中是做不到的。
在 LangChain 的流式输出场景中,常见的回退方案(如 with_fallbacks)在并不直接适用,核心难点在于,一旦流式传输开始,就无法简单地“撤回”已经发送给客户端的数据。
LangChain 中的 RunnableWithFallbacks 是一个用于错误处理和降级策略的核心组件,它允许为Runnable任务设置备选方案,确保在主要组件失败时能够优雅切换到备用方案。
本文档基于 LangChain v0.3+ / v1.0 官方推荐,聚焦于 BaseChatMessageHistory 及其主流持久化实现,以LangGraph 记忆、通用集成模式、记忆管理策略等,并更新了决策树和推荐路径。新项目应统一使用 LCEL + RunnableWithMessageHistory 构建有状态对话系统。
已弃用的旧版记忆类(如 ConversationBufferWindowMemory、ConversationSummaryMemory、VectorStoreRetrieverMemory 等)不再推荐使用。
LangChain 中的链(Chain)是其核心抽象之一,用于将多个组件(如模型、提示词模板、输出解析器等)组合成一个可执行的流水线,支持同步/异步调用、流式输出、序列化及记忆功能,是构建LLM应用的基础架构。
现代的 LangChain 主要推荐使用 LangChain 表达式语言(LCEL) 来构建链,它更简洁、功能也更强大。
LangChain 中的“链”(Chain)并非单一对应某一种设计模式,而是多种设计模式的巧妙融合。
LangChain 的 Chain 本质上责任链的现代化实现 —— 通过 Runnable 协议统一接口,用组合模式支持嵌套,借建造者模式简化构造,最终实现了声明式、可组合、延迟执行的 LLM 应用流水线。
LCEL 是 LangChain 的表达式语言,是一种编程范式,是一种语法糖,使代码看起来非常简洁,但同时隐藏了更多需要注意事项,避免踩坑犯错。
1 | chain = prompt | model | parser |