W
AI-Wiki
SOURCE

AI领域原始文档:LangChain主文档 摘要

文档概览

本摘要共覆盖7大核心板块:框架特性、生态结构、核心模块、核心概念、常用组件、安装方法、代码示例,涉及关联技术包括LangChain表达式语言(LCEL)LangChain RAG能力框架AI Agent向量数据库Python开发、大模型接口封装等,包含可直接运行的通义千问调用代码样例,同时标注了与Python学习笔记LLM学习笔记等已有词条的关联关系。

关键事实

  1. 基础属性:LangChain是开源AI应用开发框架,支持Python(≥3.9)、Typescript两种开发语言
  2. 模块能力:RAG模块内置超过100种文档加载组件,集成50+种向量存储引擎
  3. 生态组成:包含LangSmith(开发监控平台)、LangServe(部署工具)、Templates(预置模板)、LangChain核心库四大组件
  4. 核心语法:LangChain表达式语言(LCEL)采用声明式编程,基于Runnable协议实现组件编排,仅支持顺序调用,分支、循环逻辑需依赖LangGraph库补充
  5. 安装方式:Python环境下通过pip install langchain即可完成核心库安装

重要细节

1. 核心特性

  • 大模型接口抽象:统一不同厂商大模型的访问API,同时提供Prompt提示词模板管理机制
  • 内置LangChain RAG能力框架AI Agent、Memory(记忆)三大核心能力模块

2. 生态结构

  • LangSmith:云原生开发平台,提供链的Debug、任务监控能力
  • LangServe:基于FastAPI的部署工具,可将LangChain定义的**LangChain链(Chain)**发布为REST API
  • Templates:预置多场景开发模板,降低通用场景开发成本
  • LangChain库
    • LangChain-Community:社区维护的第三方工具、服务集成组件
    • LangChain-Core:基础抽象层,包含**LangChain表达式语言(LCEL)**核心实现
    • 主库:内置LangChain链(Chain)、代理、检索策略的核心实现

3. 核心模块

  • 模型I/O模块:包含提示管理(模板化、动态选择模型输入)、语言模型接口(统一大模型调用方式)、输出解析器(从大模型输出提取结构化信息)三个子模块
  • RAG模块:支持100+种文档格式加载,内置文档分片能力,提供多种检索算法与特定文档优化逻辑,集成50+种向量数据库存储引擎
  • 存储模块:实现记忆能力,支持读、写两个基础操作,可留存应用上下文信息
  • 工具模块:支持大模型应用执行代码、连接数据库、访问邮件等外部操作
  • 回调组件:在特定操作触发时执行预定处理逻辑,分为构造器回调、请求回调两类,回调概念详见编程基础#^7b938a

4. 核心概念

  • LLMs:大语言模型,详细说明见LLM学习笔记
  • LangChain表达式语言(LCEL):LangChain专用工作流编排语言,基于Runnable协议实现,用竖杠(|)连接子组件,仅支持顺序调用,分支循环需配合LangGraph使用^aa2ef5
    • 高级特性:
      • ConfigurableField:支持传递参数实现同一组件多环境适配
      • RunnableLambda:将普通Python函数转换为标准Runnable组件,等价于低代码平台的自定义代码节点
      • RunnableBranch:路由机制,可动态选择链的处理分支
      • RunnablePassthrough:在链中绑定变量或值,可作为中继站或占位符
      • RunnableParallel:并行执行能力,可将单一输入同时分发到多个操作节点
      • with_fallbacks:异常降级机制,节点调用失败时自动触发备选逻辑
  • Prompts:提示词管理工具,支持提示词内容格式化、模板化
  • Output Parsers:输出解析器,可将大模型输出转换为JSON、XML等结构化格式
  • Retrievers:检索框架,支持文档加载、分片、向量化、存储、全链路检索逻辑,相关原理见LLM学习笔记#^9a9a35
  • Vector stores向量数据库,针对高维向量存储、检索做了专项优化,默认存储在内存中,需持久化存储时可指定persist_directory参数配置本地存储路径
  • AgentsAI Agent,以大模型为决策引擎,自动调用外部工具完成复杂任务的应用设计模式
  • Runnable接口:LangChain所有可执行组件(LLM、Prompt、解析器、链等)的通用操作规范,支持invoke/batch/stream等统一调用方法,实现组件即插即用、任意组合
    • 核心方法:
      • invoke/ainvoke:单个输入同步/异步执行,返回输出结果
      • batch/abatch:多输入并行同步/异步执行
      • stream/astream:单输入同步/异步流式返回输出
      • astream_log:异步流式返回输出及中间执行日志
  • LangChain链(Chain):多个组件的组合调用封装,既可以单独使用处理简单任务,也可以多链组合实现复杂工作流,已封装问答系统、自然语言转SQL等通用场景链,通常包含语言模型、提示词模板、输出解析器三个核心要素

5. 常用组件

模型组件

LangChain将大模型分为两类,本质为接口规范不同:

  • LLM:通用文本生成型,对应大模型文本补全接口
  • ChatModel:对话型,对应大模型聊天接口,支持多轮对话,输入为消息列表,输出为单条消息
  • LangChain消息对象体系:ChatModel的输入输出结构,包含rolecontent两个必填属性,分为HumanMessage、AIMessage、SystemMessage、FunctionMessage、ToolMessage等类型
  • 通用调用方法:所有模型组件均支持invoke接口调用

提示词模板组件

  • 定义:将固定提示词与动态输入参数结合的模板工具,可复用静态提示内容,仅动态修改变量部分
  • 基础用法示例:
from langchain_core.prompts import PromptTemplate
# 创建提示词模板
template = PromptTemplate.from_template("翻译这段文字:{text},风格:{style}")
# 格式化模板
formatted_prompt = template.format(text="我爱编程", style="诙谐有趣")
print(formatted_prompt)
  • 三个格式化方法的区别:
    • invoke():返回ChatPromptValue封装对象,适合直接传入大模型调用
    • format():返回拼接完成的字符串,适合调试或文本二次处理
    • format_messages():返回消息对象列表,适合需要修改消息结构的场景
  • FewShotPromptTemplate组件:用于创建少样本学习提示,可自动将示例拼接为提示词
  • 示例选择器:可根据用户输入动态筛选最相关的少样本示例,避免提示词冗余

输出解析器组件

用于将大模型原始文本输出转换为下游应用可直接使用的结构化格式,常用类型包括:

  • XMLOutputParser:转换为XML格式
  • DatetimeOutputParser:转换为日期时间对象
  • CommaSeparatedListOutputParser:转换为列表格式

大模型封装接口

LangChain为不同厂商的大模型提供了标准化封装接口,自定义封装器需实现两个核心部分:

  • _call方法:接收字符串输入,返回大模型输出字符串
  • _identifying_params属性:返回包含模型关键参数的字典

6. 安装部署

  1. 环境要求:Python版本≥3.9,Python环境安装配置可参考Python学习笔记#安装python
  2. 安装命令:pip install langchain
  3. 环境激活:在IDE中激活安装了LangChain的Python虚拟环境,操作方法可参考Python学习笔记#激活python环境
  4. 组件引用:通过from langchain_xxx.xxx import Xxx的方式引入所需组件

7. 可运行代码示例(通义千问调用)

from langchain_core.prompts import ChatPromptTemplate
from langchain_community.llms import Tongyi

# 实例化通义千问大模型
llm = Tongyi(
    model_name="qwen-max",
    api_key="替换为自己的通义千问API密钥"
)

# 构建对话提示词模板
prompt = ChatPromptTemplate.from_messages([
    ("system", "你是一个玩世不恭的老登"),
    ("user", "{input}")
])

# 用LCEL编排链
chain = prompt | llm

# 调用链获取结果
result = chain.invoke({"input": "你谁啊"})
print(result)

代码关键点说明:

  • 大模型实例化时需传入有效API密钥
  • 采用**LangChain表达式语言(LCEL)**的竖杠语法编排组件,等价于可视化工作流的连线操作
  • 链的invoke方法可传入动态参数完成调用

相关条目

  • LangChain
  • LangChain表达式语言(LCEL)
  • LangChain链(Chain)
  • LangChain RAG能力框架
  • LangChain消息对象体系
  • LangChain配套工具链
  • LLM学习笔记
  • Python学习笔记
  • AI Agent
  • 向量数据库