从零开始学LangChain(一):LangChain简介与环境搭建

从零开始学LangChain(一):LangChain简介与环境搭建

本系列教程将带你从零开始学习LangChain框架,构建强大的AI应用程序。

什么是LangChain?

LangChain是一个强大的框架,用于开发由大型语言模型(LLMs)驱动的应用程序。

想象一下,LLM就像一个超级聪明的大脑,但它需要手脚才能真正做事。LangChain就是为这个大脑提供”手脚”的工具集。

LangChain的核心价值主要体现在几个方面:提供标准化接口统一不同LLM提供商的调用方式,支持链式调用将多个操作串联形成复杂工作流,能够集成外部工具如搜索引擎和数据库,提供对话历史的持久化存储,以及适用于聊天机器人、文档问答、代码生成等多种应用场景。

LangChain的核心组件

LangChain由几个核心组件构成。Models负责调用各种LLM,相当于大脑;Prompts用于管理和优化提示词,代表思考方式;Chains串联多个操作,形成工作流程;Memory存储对话历史,提供记忆力;Agents负责自主决策和工具使用,扮演自主助手角色;Tools连接外部服务,就像是手和脚。

环境准备

在开始之前,确保你的电脑已经安装了Python 3.8或更高版本,准备好了OpenAI API密钥或其他兼容的LLM服务,并且有互联网连接用于安装包和调用API。

安装LangChain

首先创建一个虚拟环境,这是推荐的做法。

1
2
3
4
5
6
7
8
9
10
11
# 创建虚拟环境
python3 -m venv langchain-env

# 激活虚拟环境
# macOS/Linux:
source langchain-env/bin/activate
# Windows:
langchain-env\Scripts\activate

# 升级pip
pip install --upgrade pip

然后安装LangChain和相关依赖。

1
2
3
4
5
6
7
8
9
10
# 安装LangChain核心库
pip install "langchain>=0.1.0,<0.2.0"

# 安装OpenAI集成
pip install langchain-openai

# 安装其他常用依赖
pip install python-dotenv
pip install chromadb
pip install pypdf

安装成功后会显示已安装的版本信息。

配置API密钥

永远不要将API密钥直接写在代码中或提交到Git仓库。创建一个.env文件来安全地存储API密钥。

1
2
# 在项目根目录创建.env文件
echo "OPENAI_API_KEY=your-api-key-here" > .env

然后在Python中加载环境变量。

1
2
3
4
5
6
7
8
9
10
11
12
import os
from dotenv import load_dotenv

# 加载环境变量
load_dotenv()

# 验证API密钥
api_key = os.getenv("OPENAI_API_KEY")
if api_key:
print(f"API密钥已设置: {api_key[:10]}...")
else:
print("错误:请设置 OPENAI_API_KEY 环境变量")

确保将.env文件添加到.gitignore中,避免提交敏感信息。

验证安装

运行以下命令验证安装。

1
2
3
4
5
# 检查LangChain版本
python -c "import langchain; print(f'LangChain版本: {langchain.__version__}')"

# 检查OpenAI包
python -c "import langchain_openai; print('OpenAI集成已安装')"

你的第一个LangChain程序

让我们创建一个简单的”Hello World”程序,体验LangChain的基本功能。

基础示例:调用LLM

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import os
from dotenv import load_dotenv
from langchain_openai import ChatOpenAI

# 加载环境变量
load_dotenv()

# 初始化Chat模型
llm = ChatOpenAI(model="gpt-3.5-turbo")

# 调用模型
response = llm.invoke("你好,请用一句话介绍LangChain")

# 打印结果
print(response.content)

ChatOpenAI是LangChain提供的OpenAI聊天模型接口,model="gpt-3.5-turbo"指定使用GPT-3.5模型,invoke()用于发送消息给模型,response.content获取模型的回复内容。

使用提示词模板

在实际应用中,我们经常需要使用结构化的提示词。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
from langchain_openai import ChatOpenAI
from langchain.prompts import ChatPromptTemplate

# 初始化模型
llm = ChatOpenAI(model="gpt-3.5-turbo")

# 创建提示词模板
prompt = ChatPromptTemplate.from_template(
"请用{style}的风格解释{topic},不超过50字"
)

# 格式化提示词
formatted_prompt = prompt.format(
style="幽默",
topic="什么是编程"
)

# 调用模型
response = llm.invoke(formatted_prompt)

print(response.content)

构建简单的链

LangChain的强大之处在于”链”——将多个操作串联起来。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
from langchain_openai import ChatOpenAI
from langchain.prompts import ChatPromptTemplate

# 初始化模型
llm = ChatOpenAI(model="gpt-3.5-turbo", temperature=0.7)

# 创建提示词模板
prompt = ChatPromptTemplate.from_template(
"作为一位{role},请回答:{question}"
)

# 使用LCEL(LangChain Expression Language)创建链
chain = prompt | llm

# 调用链
response = chain.invoke({
"role": "Python专家",
"question": "什么是装饰器?"
})

print(response.content)

这里|运算符是LangChain的表达式语言(LCEL),表示将前一个步骤的输出传递给下一步。chain.invoke()传入字典格式的输入数据,temperature=0.7控制输出的随机性。

实战示例:智能问答助手

让我们创建一个实用的问答助手,能够回答关于LangChain的问题。

完整代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
from langchain_openai import ChatOpenAI
from langchain.prompts import ChatPromptTemplate

# 初始化模型
llm = ChatOpenAI(model="gpt-3.5-turbo", temperature=0)

# 创建结构化提示词
system_template = """你是一位友好的LangChain导师,擅长用简单的比喻解释复杂概念。
回答时请遵循以下格式:
1. 【通俗解释】:用生活中的比喻来解释
2. 【代码示例】:提供简单的代码示例
3. 【注意事项】:列出2-3个关键点"""

human_template = "{question}"

prompt = ChatPromptTemplate.from_messages([
("system", system_template),
("human", human_template)
])

# 创建链
chain = prompt | llm

# 测试问答
question = "什么是LangChain中的Chain(链)?"
print(f"问题:{question}\n")
response = chain.invoke({"question": question})
print(response.content)

代码解析

ChatPromptTemplate.from_messages()创建包含系统消息和用户消息的提示词模板。System消息设定AI的角色和行为准则,Human消息是用户的实际输入,链式调用prompt | llm将提示词传递给模型。

常见错误

错误1:忘记激活虚拟环境

症状是出现ModuleNotFoundError: No module named 'langchain'错误。正确做法是在使用前激活虚拟环境,然后用which python验证环境。

错误2:API密钥未设置

症状是出现ValueError: Please set OPENAI_API_KEY environment variable错误。需要检查.env文件是否存在,检查环境变量,如果没设置则重新创建.env文件。

错误3:导入错误

症状是出现ImportError: cannot import name 'ChatOpenAI' from 'langchain'错误。这是因为导入方式不对,旧版本使用from langchain.llms import OpenAI,新版本应该使用from langchain_openai import ChatOpenAI,并且需要安装langchain-openai包。

错误4:版本不兼容

症状是出现AttributeError: 'LLM' object has no attribute 'invoke'错误。需要检查LangChain版本,如果不是0.1.x版本,重新安装指定版本。0.1.x版本使用invoke()方法,而0.0.x版本使用__call__()方法(已废弃)。

系列导航