LangChain不是大模型本身,而是连接大模型与现实世界的“组织层”。从统一大模型接口到提示词模板,从检索增强生成到工具调用型智能体——厦门大学教材用课程资料问答助手完整案例,拆解了LangChain的八大核心组件与RAG落地全流程。
LangChain的核心定位与八大组件
LangChain诞生于早期大模型应用开发的痛点——程序向大模型发送提示词、展示返回文本的简单方式,在调用本地文档、数据库、Web接口时需额外编写大量流程控制代码;应用规模扩大后,提示词构造、上下文拼接、异常处理、状态传递、结果解析等问题不断累积。LangChain定位为面向大模型应用开发共性需求、提供统一抽象层与可组合模块的LLM应用开发框架。
LangChain的核心思想是把大模型应用拆分为若干可组合模块。教材归纳了八大核心组件。大模型接口统一封装不同模型服务的调用方式,降低切换成本。提示词模板分离固定指令和动态变量,使提示构造更清晰可维护。输出解析器把模型生成结果转化为程序可消费的列表、键值对等结构化数据。工具让模型可调用外部函数、数据库、搜索服务。检索器与向量存储按问题从知识库中挑选相关内容,构成RAG的基础。链按固定顺序连接多个步骤,执行路径清晰稳定。智能体根据任务动态决定是否及如何调用工具。状态与持久化在多次调用之间保存上下文,实现对话记忆。
LCEL(LangChain Expression Language)用管道符“|”把多个步骤串成“流水线”,是LangChain推荐的现代写法。同一条链支持invoke(单次)、stream(流式)、batch(批量)、ainvoke(异步)四种调用方式,大幅提升了代码复用性和运行灵活性。
RAG在LangChain中的完整落地
检索增强生成(RAG)是大模型应用的重要方向——回答问题前先检索相关资料,再将资料作为上下文交付大模型。LangChain是落地RAG的常用工程化工具框架。
教材通过课程资料问答助手案例完整演示了RAG落地流程。离线构建阶段:课程文本读入内存→按一定长度切分为多个片段(chunk_size=350, chunk_overlap=80)→通过嵌入模型(nomic-embed-text)生成向量表示→写入FAISS本地向量索引。在线问答阶段:用户问题向量化→在向量索引中检索最相关的k个片段(k=5)→将检索片段与用户问题一起注入提示词模板→调用大模型(gemma4:e4b)生成回答→通过字符串输出解析器返回结果。
这一实现属于2-Step RAG——检索先于生成且流程固定,优点是结构清晰、执行稳定。核心代码采用了LCEL链式写法:`retriever | format_docs` 检索并格式化文档,`RunnablePassthrough()` 透传用户问题,`prompt | model | parser` 完成生成和解析。整个问答链将检索、格式化、提示构造、模型调用和输出解析五个步骤串联为一条可读可维护的流水线。
从链式到智能体——LangChain的状态管理与工具调用
当应用从“固定流程”走向“动态决策”,LangChain的智能体和状态管理机制开始发挥作用。
消息系统是LangChain实现多轮对话的基础——HumanMessage(用户)、AIMessage(AI/智能体)、SystemMessage(系统引导)、ToolMessage(工具返回结果)四种类型分别对应对话中的不同角色。智能体的典型交互链路为:用户HumanMessage→模型分析→生成含ToolCall的AIMessage→工具执行产生ToolMessage→模型整合后输出AIMessage。
状态管理方面,教材系统区分了三个层次。短期状态解决同一会话的上下文延续问题——通过InMemorySaver检查点和thread_id实现,相同thread_id的调用可读取之前保存的消息历史。持久化检查点让程序重启后仍能延续状态——通过SqliteSaver将状态写入本地数据库文件,跨程序运行仍可恢复。长期记忆不应简单等同于长聊天记录——学生姓名、常用编程语言、课程信息等应作为业务数据单独建模保存。
工具调用通过`@tool`装饰器将普通函数转换为LangChain可识别的工具对象,包含三个要素:装饰器转换、文档字符串(描述工具功能与参数)、类型注解(帮助参数验证)。教材通过计算器、日期计算、文件写入三个自定义工具实例演示了工具开发全流程。工具在智能体中的调用遵循“模型判断→生成工具调用参数→执行工具→基于结果回答”的闭环逻辑。