LangChain
综合介绍
LangChain是一个开源的开发框架,它的核心目标是简化基于大语言模型(LLM)的应用开发过程。 对于开发者来说,LangChain将与大模型交互的复杂过程进行了封装和抽象,提供了一系列标准化的接口和模块化组件。这些组件就像是预制好的积木,开发者可以将它们“链接”在一起,快速地构建出功能强大的AI应用,例如能够回答特定领域问题的聊天机器人、文档分析和摘要工具、或者能够自主完成任务的智能体(Agent)。 LangChain不仅仅是一个基础框架,它还围绕着应用的开发、生产和部署提供了一整套工具,包括用于调试和监控的LangSmith平台,以及用于构建更复杂、可控的多智能体系统的LangGraph库,从而为开发者提供从原型设计到生产上线的全生命周期支持。
功能列表
LangChain通过其模块化的组件设计,为开发者提供了灵活且强大的功能,使其可以轻松构建复杂的LLM应用。
- 模型(Models):这是框架的核心,提供了与各种大语言模型(如OpenAI的GPT系列、Google的Gemini等)交互的统一接口。它支持三种类型的模型:
- 语言模型:接收文本字符串作为输入,输出文本字符串。
- 聊天模型:使用一系列聊天消息作为输入和输出,更适合对话场景。
- 文本嵌入模型:将文本转换为向量表示,用于语义搜索等任务。 [Deepchecks-2]
- 提示词(Prompts):管理和优化用户向模型输入的指令。LangChain提供了提示词模板功能,允许开发者创建包含动态变量的、可复用的提示词结构,从而简化了与模型的交互。 [Deepchecks-2, DataCamp-1]
- 链(Chains):这是LangChain的核心概念,代表着将多个组件(可以是模型调用,也可以是其他工具)按顺序组合起来的工作流。通过将不同的调用链接在一起,开发者可以构建出比单一LLM调用更复杂的应用。 [Educative-1, GeeksforGeeks-5]
- 索引(Indexes):帮助LLM使用外部数据进行增强。该模块提供了加载外部数据(如PDF、网页、数据库)的工具,并将其结构化以便模型可以高效地查询和使用。这对于实现检索增强生成(RAG)至关重要。 [Educative-1]
- 记忆(Memory):让应用能够记住之前的交互内容。在多轮对话中,记忆组件可以存储和检索过去的聊天记录,从而使应用能够进行有上下文的、连贯的对话。 [Educative-1]
- 智能体(Agents):赋予LLM决策和执行能力。智能体可以使用一系列工具(如搜索引擎、计算器、API),并由模型自主决定调用哪个工具来完成用户指定的任务,从而实现更高级的自动化工作流。 [Ksolves-3, Milvus-2]
- 集成(Integrations):LangChain拥有庞大的生态系统,集成了数百个第三方提供商,涵盖了模型、数据库、API等。这使得开发者可以轻松地将外部工具和服务接入到他们的应用中。
使用帮助
下面将详细介绍如何安装LangChain并创建一个基础的AI应用,帮助你快速上手。
第一步:环境准备与安装
在开始之前,你需要确保你的开发环境中已经安装了Python(建议使用3.7或更高版本)。
- 创建虚拟环境:为了避免包依赖冲突,强烈建议在一个独立的虚拟环境中安装LangChain。打开你的终端(命令行工具),执行以下命令:
# 创建一个名为 lchain-env 的虚拟环境 python -m venv lchain-env # 激活虚拟环境 # Windows: lchain-env\Scripts\activate # macOS/Linux: source lchain-env/bin/activate
- 安装LangChain核心库:LangChain采用模块化设计,你可以按需安装。首先安装其核心库:
pip install langchain-core
- 安装模型集成库:要使用特定的大语言模型,你需要安装对应的集成包。例如,如果要使用OpenAI提供的模型,需要安装
langchain-openai
。pip install langchain-openai
- 设置API密钥:与大模型交互需要使用API密钥。你需要先在相应的模型提供商网站(如OpenAI)注册并获取密钥。为了安全起见,最好将密钥设置为环境变量,而不是直接写在代码里。
- 在终端中设置环境变量(此方法仅在当前终端会话中有效):
# Windows set OPENAI_API_KEY="你的密钥" # macOS/Linux export OPENAI_API_KEY="你的密钥"
- 你也可以将密钥保存在一个
.env
文件中,然后使用python-dotenv
库在代码中加载。
- 在终端中设置环境变量(此方法仅在当前终端会话中有效):
第二步:构建你的第一个LLM应用(问答机器人)
我们将创建一个简单的应用,它可以根据你提供的主题,生成一个相关的笑话。
- 导入所需模块:创建一个Python文件(例如
app.py
),并导入我们将要使用的核心模块。import os from langchain_openai import ChatOpenAI from langchain_core.prompts import ChatPromptTemplate from langchain_core.output_parsers import StrOutputParser # 如果你使用.env文件管理密钥,请取消下面两行注释 # from dotenv import load_dotenv # load_dotenv()
- 初始化模型:实例化一个聊天模型对象。这里我们使用
ChatOpenAI
,它会默认从环境变量中读取OPENAI_API_KEY
。# 初始化聊天模型,默认使用 gpt-3.5-turbo llm = ChatOpenAI()
- 创建提示词模板:提示词模板使得我们可以动态地插入内容。我们创建一个模板,其中包含一个名为
topic
的占位符。# 创建一个提示词模板,它接受一个 "topic" 变量 prompt = ChatPromptTemplate.from_template("讲一个关于 {topic} 的笑话")
- 创建输出解析器:LLM返回的原始输出是一个复杂的对象。为了方便使用,我们添加一个输出解析器,它能将模型的回复直接提取为简单的文本字符串。
# 创建一个字符串输出解析器 output_parser = StrOutputParser()
- 创建并运行“链”:现在,我们使用LangChain表达式语言(LCEL)的管道符
|
将模型、提示词和解析器“链接”在一起。这个链条定义了我们应用的数据处理流程:输入数据先进入提示词模板,然后传递给模型,最后由输出解析器处理结果。# 使用管道符 | 将组件链接在一起,形成一个处理链 chain = prompt | llm | output_parser # 调用链,并传入主题 # 使用 .invoke() 方法传入一个字典作为输入 response = chain.invoke({"topic": "程序员"}) # 打印结果 print(response)
运行python app.py
后,你将会在终端看到一个关于程序员的笑话。通过这个简单的例子,你可以看到LangChain如何将复杂的LLM调用流程简化为几个清晰的步骤。你可以尝试修改topic
来生成不同主题的笑话,或者修改提示词模板来让应用执行不同的任务。这是探索LangChain强大功能的起点。
应用场景
- 文档问答与信息检索通过结合文档加载器(Document Loaders)和向量数据库,LangChain可以构建强大的检索增强生成(RAG)系统。企业可以将内部的知识库、技术文档或PDF报告作为数据源,让员工用自然语言直接提问并获得精准答案,而不是在大量文件中手动搜索。 [Milvus-2]
- 构建智能聊天机器人利用LangChain的“记忆”和“链”组件,可以开发出具有上下文理解能力的聊天机器人。这种机器人能够记住之前的对话内容,为用户提供连贯且个性化的服务,常用于客户支持、产品导购和个人助理等场景。 [LangChain Docs-5]
- 自动化工作流与智能体(Agent)LangChain的智能体功能可以将LLM从一个单纯的文本生成工具,转变为一个可以调用外部API、访问数据库、执行代码的“行动者”。例如,可以创建一个智能体来监控销售数据,当发现异常时自动发送邮件警报,或者根据用户指令自动完成预订机票、查询天气等一系列操作。 [Milvus-2]
- 数据提取与分析LangChain能够从非结构化的文本中提取出结构化的信息,如从一篇新闻报道中抽取出事件、时间、地点等关键信息并存入数据库。此外,它还能直接用自然语言查询表格数据(如CSV或SQL数据库),极大地降低了数据分析的门槛。 [GitHub-3, Medium-4]
- 代码生成与理解对于软件开发团队,LangChain可以用于辅助编程。它可以根据需求描述生成代码片段、解释现有代码的功能、或者将代码从一种编程语言翻译成另一种,从而提高开发效率。 [GitHub-3]
QA
- LangChain是免费的吗?LangChain的核心框架是开源且免费的。 你可以在GitHub上获取其源代码,并在自己的项目里自由使用。不过,它本身只是一个开发框架,在实际使用时,调用背后的大语言模型(如OpenAI的GPT-4)通常需要支付费用给相应的服务提供商。
- 使用LangChain需要具备什么样的编程基础?你需要具备基础的Python或JavaScript编程知识。 LangChain已经将许多复杂的实现细节封装起来,但理解变量、函数、对象等基本编程概念是必需的。如果你对API的工作方式有所了解,上手会更快。
- LangChain和LangSmith、LangGraph之间是什么关系?它们同属于LangChain生态系统,但扮演不同角色:
- LangChain是基础框架,提供构建应用所需的各种组件。
- LangSmith是一个配套的运维平台,用于监控、评估和调试基于LangChain(或任何LLM)构建的应用,确保应用在生产环境中的可靠性。
- LangGraph是一个扩展库,用于构建更复杂的、包含循环和状态控制的智能体应用,特别适合需要多智能体协作或人机协作的场景。
- 我可以用自己的数据来训练模型吗?LangChain本身不提供模型训练功能。但是,它提供了一个非常强大的替代方案,即检索增强生成(RAG)。你可以将自己的私有数据(如公司文档)加载到向量数据库中,LangChain可以在生成回答时,先从你的数据中检索相关信息,再交给LLM进行参考,从而让模型能够回答关于你私有数据的问题,这在很多场景下比重新训练模型更高效、成本更低。