3. 环境搭建与Hello World:安装LangChain、配置OpenAI API Key、第一个LangChain程序
好了,到了真正动手的时候了。前面两章我们聊了不少概念,什么Agent、Chain、Tool,听起来挺唬人。但说句实在话,不写一行代码,这些东西永远都是空中楼阁。这一章,我们就来把地基打牢。
我个人习惯,学任何新框架,第一件事不是读文档,而是先把环境跑通,跑一个Hello World。哪怕只是打印出一行字,那种「我能控制它」的感觉就来了。咱们今天的目标很简单:装好LangChain,配好OpenAI的Key,然后让大模型跟我们说句话。
3.1 环境准备:Python版本与虚拟环境
先看看你的Python版本。LangChain对Python 3.8以上支持得比较好,我个人建议用3.10或3.11。为什么?因为3.12有些依赖包还没完全跟上,我在项目里踩过坑,折腾了半天。
虚拟环境是必须的。你想想看,每个项目依赖的包版本可能不一样,混在一起迟早出问题。我一般这么干:
# 创建虚拟环境
python -m venv langchain_env
# 激活(Windows)
langchain_env\Scripts\activate
# 激活(Mac/Linux)
source langchain_env/bin/activate
看到终端前面多了个 (langchain_env) 前缀,就说明环境激活成功了。嗯,这一步别跳过,我曾经图省事直接在全局环境装包,结果两个项目打架,浪费了一下午。
3.2 安装LangChain核心库
环境激活后,安装LangChain就一行命令的事:
pip install langchain
但等等,这只是核心库。实际开发中,你还需要装一些配套包。比如你要调OpenAI的模型,就得装 langchain-openai。我整理了一个常用清单:
| 包名 | 用途 | 安装命令 |
|---|---|---|
| langchain | 核心框架 | pip install langchain |
| langchain-openai | OpenAI模型集成 | pip install langchain-openai |
| langchain-community | 社区维护的第三方集成 | pip install langchain-community |
| python-dotenv | 管理环境变量(API Key) | pip install python-dotenv |
3.3 配置OpenAI API Key
这是最容易出问题的一步。说白了,你要让LangChain知道你是谁,有没有权限调模型。API Key就是你的通行证。
我个人习惯用 .env 文件来管理Key,而不是硬编码在代码里。为什么?因为代码可能会上传到GitHub,Key一旦泄露,钱包就危险了。我曾经见过有人把Key直接写在Jupyter Notebook里然后传到GitHub,几分钟就被爬虫扫到,损失了几百刀。
操作步骤:
- 在项目根目录创建一个
.env文件 - 在里面写上:
OPENAI_API_KEY=你的Key - 在代码里用
python-dotenv加载
代码长这样:
from dotenv import load_dotenv
import os
load_dotenv() # 加载 .env 文件
api_key = os.getenv("OPENAI_API_KEY")
print(f"Key加载成功,前8位是:{api_key[:8]}...")
如果你没有OpenAI的Key,也可以用其他模型的Key,比如通义千问、文心一言。LangChain支持很多模型,但咱们这一章先用OpenAI做示范,因为最通用。
3.4 第一个LangChain程序:Hello World
好,万事俱备。现在我们来写第一个程序。目标很简单:让大模型回答一个问题,比如「什么是LangChain?」。
先看完整代码:
from langchain_openai import ChatOpenAI
from dotenv import load_dotenv
load_dotenv()
# 初始化模型
llm = ChatOpenAI(
model="gpt-3.5-turbo",
temperature=0.7
)
# 调用模型
response = llm.invoke("请用一句话解释什么是LangChain?")
print(response.content)
运行一下,如果看到类似这样的输出,恭喜你,成功了:
LangChain是一个用于构建基于大语言模型应用的框架,它通过链式调用和智能体机制简化了开发流程。
就这么简单?对,就这么简单。但别小看这几行代码,它背后做了很多事:
- 自动处理API请求的格式
- 管理对话上下文(虽然这里没用上)
- 处理网络错误和重试
我刚开始用的时候,觉得这跟直接调OpenAI API没啥区别。但后来项目复杂了,才发现LangChain的抽象层帮我省了多少事。
3.5 理解核心概念:LLM vs ChatModel
刚才我们用的是 ChatOpenAI,但LangChain里还有 OpenAI(注意没有Chat前缀)。这两者有什么区别?
| 对比维度 | OpenAI (LLM) | ChatOpenAI (ChatModel) |
|---|---|---|
| 输入格式 | 纯文本字符串 | 消息列表(System/User/Assistant) |
| 适用模型 | text-davinci-003等 | gpt-3.5-turbo, gpt-4等 |
| 对话能力 | 单轮,无记忆 | 原生支持多轮对话 |
| 推荐场景 | 简单的文本补全 | 聊天机器人、复杂对话 |
说白了,现在主流模型都是ChatModel,你就用 ChatOpenAI 准没错。那个 OpenAI 类,我只有在做某些特殊测试时才会用到。
3.6 本章知识体系
下面这张图,帮你把这一章的核心逻辑串起来:
3.7 常见问题与避坑指南
跑第一个程序时,你可能会遇到一些问题。我把常见的列出来:
原因:只装了langchain核心库,没装langchain-openai。
解决:
pip install langchain-openai
原因:API Key写错了,或者.env文件没被正确加载。
解决:检查.env文件路径,确认load_dotenv()在调用模型之前执行。
原因:API调用次数超限,或者账户余额不足。
解决:去OpenAI后台检查用量和账单。我曾经因为忘了关一个循环脚本,一晚上跑了上千次调用,第二天看到账单直接傻眼。
3.8 扩展:试试不同模型
如果你用的是其他模型,比如通义千问,代码也很类似:
from langchain_community.chat_models import ChatTongyi
llm = ChatTongyi(
model="qwen-turbo",
temperature=0.7
)
response = llm.invoke("请用一句话解释什么是LangChain?")
print(response.content)
你看,接口几乎一样。这就是LangChain的威力——换模型就像换插头,不用改业务逻辑。