环境搭建与第一个 Chain:从零开始跑通 LangChain

说实话,每次带新人入门 LangChain,我最怕的就是环境配置这一步。明明代码逻辑都懂,结果卡在 pip 安装或者 API Key 配置上,一折腾就是半天。我自己刚接触那会儿也踩过不少坑,今天咱们就把这些坑提前填上。

安装 LangChain:比你想象的简单

先说说安装。LangChain 的安装其实就一行命令,但我建议你创建一个干净的虚拟环境再装。为什么?因为 LangChain 依赖的包比较多,跟其他项目混在一起容易出冲突。

# 创建虚拟环境(Python 3.8+ 都行)
python -m venv langchain_env
source langchain_env/bin/activate  # Mac/Linux
# 或者 langchain_env\Scripts\activate  # Windows

# 安装核心包
pip install langchain

# 如果你要用 OpenAI,再装这个
pip install openai

# 国产大模型的话,装对应的 SDK
# 比如百度文心:pip install qianfan
# 阿里通义:pip install dashscope

嗯,这里有个小细节。LangChain 本身只提供框架,真正干活的是底层的模型。所以你得根据自己选的大模型,额外安装对应的 Python 包。我个人习惯是先把 langchain 装上,跑一个最简单的例子,缺什么再补什么。

我的经验: 如果你在公司内网环境,记得先配好 pip 代理或者换国内镜像源。我遇到过好几次,同事卡在安装步骤,结果发现是网络问题。用 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple langchain 会快很多。

配置 API Key:两种主流方案

装好包之后,下一步就是让 LangChain 能调用大模型。说白了,你需要给框架一把「钥匙」——也就是 API Key。

方案一:OpenAI

如果你用 OpenAI,去 platform.openai.com 创建一个 Key。然后有两种方式配置:

# 方式1:环境变量(推荐)
export OPENAI_API_KEY="sk-xxxxxxxxxxxxxxxxxxxxxxxx"

# 方式2:直接在代码里传
from langchain.llms import OpenAI
llm = OpenAI(openai_api_key="sk-xxxxxxxxxxxxxxxxxxxxxxxx")

我个人强烈推荐用环境变量。为什么?因为代码里硬编码 Key 太危险了,万一不小心提交到 Git 仓库,那可就「裸奔」了。我曾经在一个项目里见过同事把 Key 写死在配置文件里,结果被爬虫扫到,一天跑了上千美元的费用……

方案二:国产大模型

国内的朋友可能更关心国产模型。以百度文心一言为例,配置方式类似:

# 设置环境变量
export QIANFAN_ACCESS_KEY="your_access_key"
export QIANFAN_SECRET_KEY="your_secret_key"

# 代码里使用
from langchain.llms import QianfanLLMEndpoint
llm = QianfanLLMEndpoint()

阿里通义千问、智谱 GLM 也都差不多,只是环境变量名和类名不同。你想想看,LangChain 的设计理念就是「统一接口」,不管底层是哪个模型,对开发者来说调用方式几乎一样。

避坑指南: 我曾经犯过一个低级错误——把 API Key 写在了 Jupyter Notebook 里,然后分享给了同事。结果同事的 Notebook 自动保存了 Key,又传到了公司共享盘……后来我养成了一个习惯:所有 Key 都放在 .env 文件里,用 python-dotenv 加载,并且把 .env 加到 .gitignore 里。

运行第一个 LLMChain:见证奇迹的时刻

环境配好了,Key 也设了,咱们来跑第一个 Chain。别紧张,就几行代码的事。

from langchain.llms import OpenAI
from langchain.chains import LLMChain
from langchain.prompts import PromptTemplate

# 1. 初始化模型
llm = OpenAI(temperature=0.7)

# 2. 定义提示模板
prompt = PromptTemplate(
    input_variables=["product"],
    template="请用一句话描述{product}的用途,要求简洁有趣。"
)

# 3. 创建 Chain
chain = LLMChain(llm=llm, prompt=prompt)

# 4. 运行
result = chain.run("智能手机")
print(result)

运行之后,你应该会看到类似这样的输出:

「智能手机是一个集通讯、娱乐、办公于一身的口袋电脑,让你随时随地连接世界。」

你看,就这么简单。LLMChain 的核心逻辑就是:模板 + 模型 = 输出。你给模板传入变量,Chain 自动拼接成完整的提示词,然后发给大模型,最后把结果返回给你。

拆解一下 Chain 的内部流程

为什么会这样?咱们把上面那个例子拆开看:

步骤 发生了什么
1. 定义模板 你写了一个带占位符 {product} 的字符串
2. 传入变量 chain.run("智能手机") 把 "智能手机" 填入模板
3. 生成提示词 最终发给模型的文本是:「请用一句话描述智能手机的用途,要求简洁有趣。」
4. 调用模型 LLMChain 自动调用 OpenAI 的 API,把提示词发过去
5. 返回结果 模型返回的文本就是你的输出

说白了,LLMChain 就是一个「提示词组装器 + 模型调用器」的组合体。你不需要手动拼接字符串,也不需要关心 HTTP 请求的细节。框架帮你把这些脏活累活都干了。

核心要点: Chain 是 LangChain 中最基本的构建块。一个 Chain 可以简单到只有「提示词→模型→输出」,也可以复杂到串联多个步骤。但不管多复杂,底层都是这个模式。

换用国产模型试试

如果你用的是国产大模型,代码几乎一样。以百度文心为例:

from langchain.llms import QianfanLLMEndpoint
from langchain.chains import LLMChain
from langchain.prompts import PromptTemplate

llm = QianfanLLMEndpoint(temperature=0.8)

prompt = PromptTemplate(
    input_variables=["topic"],
    template="用50字以内解释什么是{topic}。"
)

chain = LLMChain(llm=llm, prompt=prompt)
print(chain.run("区块链"))

你看,除了导入的类名不同,其他完全一样。这就是 LangChain 的「模型抽象层」在起作用。你写一次 Chain,换模型只需要改一行代码。

我的建议: 刚开始学的时候,先用 OpenAI 的免费额度跑通流程。等熟悉了 Chain 的用法,再切换到国产模型。因为 OpenAI 的文档最全,遇到问题好排查。等你能熟练写出各种 Chain 了,换模型就是分分钟的事。

常见问题与排查

第一次跑 Chain 可能会遇到几个典型问题,我列出来,你对照着看:

  • ModuleNotFoundError:缺包了。检查一下 pip list | grep langchain,看看是不是没装全。
  • AuthenticationError:API Key 没配好。检查环境变量是否生效,可以在终端里 echo $OPENAI_API_KEY 看看。
  • RateLimitError:调用太频繁。OpenAI 免费额度有速率限制,等几秒再试。
  • TimeoutError:网络问题。国内访问 OpenAI 可能需要代理,或者换国产模型。

嗯,其实大部分问题都是环境配置引起的。只要你能跑通上面那个「智能手机」的例子,后面的学习就会顺畅很多。

好了,第一个 Chain 你已经跑通了。接下来咱们会在这个基础上,一步步搭建更复杂的应用。记住这个感觉——从零到一往往是最难的,但也是最值得的。