什么是 LangChain
LangChain是一个用于开发由大型语言模型(LLMs)支持的应用程序的框架。它旨在简化构建 LLM 应用的流程,提供了一套丰富的组件和工具,使得开发者能够更容易地集成、编排和管理各种 AI 能力。
LangChain 是构建 LLM 应用的流行框架。本文详细介绍了 LangChain 的安装配置、核心组件(Prompt、Model、VectorStore、Agent)、LCEL 表达式语言以及 RAG 模式实现。内容涵盖 Python 环境搭建、代码示例、常用大模型服务商对比及智谱 AI 实战案例,旨在帮助开发者快速掌握大模型应用开发技能。

LangChain是一个用于开发由大型语言模型(LLMs)支持的应用程序的框架。它旨在简化构建 LLM 应用的流程,提供了一套丰富的组件和工具,使得开发者能够更容易地集成、编排和管理各种 AI 能力。
从生态角度来看,LangChain 不仅支持 Python 生态,也支持 TypeScript/JavaScript 生态,这意味着开发者可以使用熟悉的 JS 技术栈来开发 AI 应用。目前 LangChain 的版本迭代较快,主流版本为 v0.3+,集成了众多的 LLM 提供商和组件,极大地降低了 AI 开发的门槛。
LangChain 目前是 v0.3+ 版本,如果使用了旧版本可能会有内容发生变化。以下以 Python 为例进行环境搭建:
如果你使用 pip 作为安装工具,建议按顺序安装核心库及社区扩展:
# 核心库
pip install langchain-core
pip install langchain
pip install langsmith
pip install -U langgraph
pip install "langserve[all]"
pip install -U langchain-cli
# 社区组件(包含文档加载器等)
pip install langchain_community
# 大模型集成
pip install langchain-openai
pip install -qU langchain-anthropic
LCEL 全称 LangChain Expression Language,是一种创建任意自定义链的方法。它提供了一种声明式的接口,允许开发者通过管道操作符 | 轻松组合不同的组件(如 Prompt、Model、Parser),形成可复用的处理链路。
LangChain 提供了丰富的组件帮助开发者高效构建 LLM 应用,主要组件包括:
| 术语 | 说明 |
|---|---|
| Prompt Template | 提示词模板,用于定义输入给模型的格式和内容。 |
| Example selectors | 示例选择器,用于从一组示例中选择适当的示例以供参考或生成响应。 |
| Chat models | 聊天模型,专门设计用于与用户进行对话和互动的语言模型。 |
| Messages | 消息,指用户与模型之间的交流内容。 |
| LLM | 大语言模型,指大型预训练语言模型,通常用于生成和理解文本。 |
| Output parsers | 输出解释器,用于处理和格式化模型生成的输出,使其更易于使用。 |
| Document loaders | 文档加载器,用于将文档内容加载到系统中以便处理和分析。 |
| Text splitters | 文本分割器,用于将长文本分割成较小的部分,以便更好地处理和分析。 |
| Embedding models | 嵌入模型,将文本转换为向量表示,以便进行相似度计算和检索。 |
| Vector stores | 向量存储,保存向量数据的数据库或系统,以支持高效的检索和查询。 |
| Retrievers | 检索器,负责从存储中获取相关数据或信息的组件。 |
| Indexing | 索引,建立数据结构以支持快速搜索和检索。 |
| Tools | 工具,辅助完成特定任务的软件组件或功能。 |
| Agents | 代理(智能体),自动化执行特定任务的智能系统或程序。 |
| Callbacks | 回调,允许在特定事件发生时执行自定义代码的机制。 |
PromptTemplate 和 ChatPromptTemplate 是定义交互格式的基础。ChatPromptTemplate 更适合多轮对话场景。
from langchain_core.prompts import PromptTemplate, ChatPromptTemplate
# 简单提示词模板
prompt_template = PromptTemplate.from_template("Tell me a joke about {topic}")
result = prompt_template.invoke({"topic": "cats"})
print(result)
# 聊天提示词模板
chat_prompt = ChatPromptTemplate([
("system", "You are a helpful assistant"),
("user", "Tell me a joke about {topic}")
])
messages = chat_prompt.invoke({"topic": "cats"})
LangChain 支持多种模型提供商,包括 OpenAI、Anthropic、HuggingFace 以及国内厂商如智谱 AI。
from langchain_openai import ChatOpenAI
from langchain_core.messages import HumanMessage, SystemMessage
# 初始化聊天模型
llm = ChatOpenAI(model="gpt-4o-mini", temperature=0.7)
# 发送消息
messages = [
SystemMessage(content="Translate the following from English into Italian"),
HumanMessage(content="hi!")
]
response = llm.invoke(messages)
print(response.content)
为了结构化地获取模型输出,可以使用 StrOutputParser 或其他解析器。
from langchain_core.output_parsers import StrOutputParser
parser = StrOutputParser()
chain = llm | parser
result = chain.invoke({"input": "What is LangChain?"})
在处理私有数据时,需要先将文档加载并切分。
from langchain_text_splitters import CharacterTextSplitter
from langchain_community.document_loaders import PyPDFLoader
# 加载 PDF
loader = PyPDFLoader("example.pdf")
documents = loader.load()
# 文本分割
text_splitter = CharacterTextSplitter.from_tiktoken_encoder(
encoding_name="cl100k_base", chunk_size=100, chunk_overlap=0
)
texts = text_splitter.split_documents(documents)
这是 RAG(检索增强生成)模式的核心。将文本转为向量并存入向量数据库。
from langchain_openai import OpenAIEmbeddings
from langchain_chroma import Chroma
# 初始化嵌入模型
embeddings = OpenAIEmbeddings()
# 创建向量存储
vector_store = Chroma(
collection_name="example_collection",
embedding_function=embeddings,
persist_directory="./chroma_langchain_db"
)
# 添加文档
vector_store.add_texts([txt_content for doc in texts for txt_content in [doc.page_content]])
# 检索
retriever = vector_store.as_retriever()
docs = retriever.invoke("what did the president say?")
Agent 允许模型自主决定调用哪些工具来完成复杂任务。
from langchain.agents import AgentExecutor, create_tool_calling_agent
from langchain_core.tools import tool
@tool
def multiply(a: int, b: int) -> int:
"""Multiply two numbers."""
return a * b
tools = [multiply]
agent = create_tool_calling_agent(llm, tools, prompt)
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)
# 执行
response = agent_executor.invoke({"input": "Calculate 5 * 3"})
在大模型应用中,主要涉及两类模型:Chat 大模型和 Embedding 大模型。常用的服务商包括:
运行大模型应用可以选择不同的 Python 环境:
我们使用智谱 AI 的 glm-4-flash 模型进行演示,因其免费且兼容 OpenAI 接口。
首先创建一个 .env 文件保存 API Key:
OPENAI_API_KEY = your_zhupu_ai_key
代码实现如下:
import os
from dotenv import load_dotenv
from langchain_openai import ChatOpenAI
from langchain_core.messages import HumanMessage, SystemMessage
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate
load_dotenv()
key = os.getenv("OPENAI_API_KEY")
model = ChatOpenAI(
temperature=0.95,
model="glm-4-flash",
openai_api_key=key,
openai_api_base="https://open.bigmodel.cn/api/paas/v4/"
)
# 消息定义
messages = [
SystemMessage(content="Translate the following from English into Italian"),
HumanMessage(content="hi!")
]
# 直接调用
response = model.invoke(messages)
print(response.content)
# 使用 Chain 链式调用
parser = StrOutputParser()
chain = model | parser
result = chain.invoke(messages)
print(result)
# 结合提示词模板
system_template = "Translate the following into {language}:"
prompt_template = ChatPromptTemplate.from_messages(
[("system", system_template), ("user", "{text}")]
)
full_chain = prompt_template | model | parser
final_result = full_chain.invoke({"language": "italian", "text": "hello world"})
print(final_result)
本文介绍了 LangChain 的基本概念、核心组件及生态内容。涵盖了从环境安装、Prompt 工程、模型调用、向量检索到智能体开发的完整流程。通过智谱 AI 配合 ChatOpenAI 接口的实战示例,展示了如何快速构建一个简单的聊天机器人。掌握这些基础技能,有助于开发者更好地应对实际项目中的大模型应用需求。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online