介绍 uv
uv 是一个用 Rust 编写的 极快的 Python 包管理器和项目管理器。
它整合了 Python 开发者常用的多种工具到一个 CLI 中,非常像 Node.js 生态里的 npm/pnpm。
- Rust 写的,速度比 pip 快 10~80 倍
- 一个工具替代多个工具(pip、virtualenv、pip-tools、pyenv、poetry...)
- 和 Ruff 同一个团队,专业度高
- 配置统一在
pyproject.toml - 兼容 pip,不需要迁移成本
uv 命令速查表:
| 功能 | 命令 |
|---|---|
| 创建虚拟环境 | uv venv |
| 使用虚拟环境运行脚本 | uv run main.py |
| 安装依赖 | uv pip install fastapi |
| 安装到项目(写入 pyproject) | uv add fastapi |
| 安装 Python 版本 | uv python install 3.12 |
| 运行工具 | uv run uvicorn app:app |
| 解析依赖锁定 | uv pip compile |
安装 uv
我们需要依据 uv 官网给我们提供的安装方法将 uv 安装到计算机中。

powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
以 Windows 为例,将上述命令输入到终端后等待几秒就会安装完成。

初始化环境
学习 langchain 我们要创建一个 Python 项目环境。
首先,创建 langchain 项目目录 learn-langchain,在目录下的终端命令行输入 uv init。

此时,uv 就会帮我们初始化开发环境,会生成如下初始文件:

其中,pyproject.toml 是 Python 项目的"总配置中心 + 依赖声明入口"。
toml
[project]
name = "learn-langchain"
version = "0.1.0"
description = "Add your description here"
readme = "README.md"
requires-python = ">=3.13"
dependencies = []
可以把它类比成前端项目中的 package.json 文件,下面我们详细解释这个文件中各个字段的含义。
- [project] :这是一个 Python 项目的元数据声明,uv 会从这里读取项目信息。
- name:项目的官方名称。
- version:项目版本号。
- description:项目的一句话描述。
- readme:指定项目的 README 文件。
- requires-python:声明项目能运行的 Python 版本范围。
- dependencies:项目的运行时依赖,后续安装的依赖都会存到这里。
安装项目依赖
首先,安装 langchain 核心依赖,在项目跟目录终端输入:
uv add langchain langchain-core langchain-classic langchain-community

此时,新的依赖会声明在 pyproject.toml 文件的 dependencies 中。
同时,在项目中会生成 uv.lovk 文件和 .venv 文件:
- uv.lovk : uv 自动生成的依赖锁文件 , 记录每个依赖的最终版本。
- .venv: uv 为当前项目创建的 Python 虚拟环境目录,避免全局 Python 环境污染。
激活虚拟环境
如果是 Windows 系统,在项目终端命令行输入:
.venv\Scripts\activate
如果是 macOS / Linux 系统,在项目终端命令行输入:
source .venv/bin/activate

虚拟环境激活后,会在终端命令行前端显示 (learn-langchain) 表示当前激活的 Python 虚拟环境名称。
创建项目示例
安装依赖
首先,安装必要的依赖,在项目跟目录终端输入:
uv add python-dotenv langchain-openai langchain-deepseek
python-dotenv是一个用于读取.env文件并将环境变量加载到 Python 运行时的工具。langchain-openai提供对 OpenAI 官方模型 的接口封装。langchain-deepseek提供对 DeepSeek 平台(OpenAI-compatible)的接口 封装。
配置环境变量
在项目根目录创建 .env 文件,输入如下内容:
ini
OPENAI_API_KEY=sk-c97afa925b1745f79225c904dff53cba
OPENAI_API_BASE=https://api.deepseek.com/v1
在学习 LangChain 的前期阶段,我们暂时使用 DeepSeek 作为我们的大语言模型。
因为 DeepSeek 兼容 OpenAI API 协议, 所以我们可以使用其 API key 赋值给 OPENAI_API_KEY。
访问 DeepSeek 开放平台,创建 API key 保存起来,然后赋值给 .env 中的 OPENAI_API_KEY。
使用官网提供的兼容 OpenAI 的base_url 赋值给 OPENAI_API_BASE。
创建示例
创建第一个示例,在项目根目录创建 01-hello-world 文件夹,在其文件夹内创建 01-chat.py 文件。
python
from langchain_openai import ChatOpenAI
from dotenv import load_dotenv
# 加载环境变量
load_dotenv()
# 初始化聊天模型
llm = ChatOpenAI(
model="deepseek-chat",
temperature=0,
)
# 调用模型
response = llm.invoke("你是谁")
print(response.content)
上述代码的含义是:
- 导入依赖
python
from langchain_openai import ChatOpenAI
from dotenv import load_dotenv
from langchain_openai import ChatOpenAI- 从 LangChain 的 OpenAI 适配器包 里导入 ChatOpenAI 类
- 这个类封装了对 OpenAI 或兼容 API(DeepSeek)的对话模型调用
- 本质上是一个 LLM(Large Language Model)客户端
from dotenv import load_dotenv- 从
python-dotenv导入load_dotenv - 用来加载
.env文件中的环境变量到 Python 的os.environ
- 从
- 加载环境变量
load_dotenv()- 读取项目根目录下的
.env文件 - 将其中的内容(例如
OPENAI_API_KEY、OPENAI_API_BASE)导入环境变量 - 这样
ChatOpenAI就可以自动读取 Key 和 API Base,无需在代码中硬编码
- 读取项目根目录下的
- 初始化 LLM
python
llm = ChatOpenAI(
model="deepseek-chat",
temperature=0,
)
- 创建一个 ChatOpenAI 对象,用于发送消息给 LLM
model="deepseek-chat":- 因为 DeepSeek 兼容 OpenAI API,这里可以直接指定 DeepSeek 提供的模型
temperature=0:- 控制生成文本的随机性, 0 → 最确定、最稳妥, 越大 → 输出越多样化
- 调用 LLM
response = llm.invoke("你是谁")invoke()是 ChatOpenAI 的核心方法- 输入参数
"你是谁"是 prompt,告诉 LLM 你希望它做什么 - 返回值
response是一个对象,通常包含:response.content→ LLM 的文本输出
结语
最终 ,在终端命令行输入:python .\01-hello-world\01-chat.py 等待几秒就会在控制台打印内容。

这说明,我们第一个 LangChain 示例运行成功,后续,我们将开始系统学习 LangChain 提供的强大的能力。