LangChain 实战 | 快速搭建 Python 开发环境

介绍 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)

上述代码的含义是:

  1. 导入依赖
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
  1. 加载环境变量
  • load_dotenv()
    • 读取项目根目录下的 .env 文件
    • 将其中的内容(例如 OPENAI_API_KEYOPENAI_API_BASE)导入环境变量
    • 这样 ChatOpenAI 就可以自动读取 Key 和 API Base,无需在代码中硬编码
  1. 初始化 LLM
python 复制代码
llm = ChatOpenAI(
    model="deepseek-chat",
    temperature=0,
)
  • 创建一个 ChatOpenAI 对象,用于发送消息给 LLM
  • model="deepseek-chat"
    • 因为 DeepSeek 兼容 OpenAI API,这里可以直接指定 DeepSeek 提供的模型
  • temperature=0
    • 控制生成文本的随机性, 0 → 最确定、最稳妥, 越大 → 输出越多样化
  1. 调用 LLM
  • response = llm.invoke("你是谁")
    • invoke() 是 ChatOpenAI 的核心方法
    • 输入参数 "你是谁"prompt,告诉 LLM 你希望它做什么
    • 返回值 response 是一个对象,通常包含:response.content → LLM 的文本输出

结语

最终 ,在终端命令行输入:python .\01-hello-world\01-chat.py 等待几秒就会在控制台打印内容。

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

相关推荐
HDO清风15 小时前
CASIA-HWDB2.x 数据集DGRL文件解析(python)
开发语言·人工智能·pytorch·python·目标检测·计算机视觉·restful
weixin_4997715515 小时前
Python上下文管理器(with语句)的原理与实践
jvm·数据库·python
weixin_4521595515 小时前
高级爬虫技巧:处理JavaScript渲染(Selenium)
jvm·数据库·python
多米Domi01116 小时前
0x3f 第48天 面向实习的八股背诵第五天 + 堆一题 背了JUC的题,java.util.Concurrency
开发语言·数据结构·python·算法·leetcode·面试
深蓝海拓16 小时前
PySide6从0开始学习的笔记(二十六) 重写Qt窗口对象的事件(QEvent)处理方法
笔记·python·qt·学习·pyqt
纠结哥_Shrek16 小时前
外贸选品工程师的工作流程和方法论
python·机器学习
小汤圆不甜不要钱16 小时前
「Datawhale」RAG技术全栈指南 Task 5
python·llm·rag
冀博16 小时前
从零到一:我如何用 LangChain + 智谱 AI 搭建具备“记忆与手脚”的智能体
人工智能·langchain
A懿轩A16 小时前
【Java 基础编程】Java 变量与八大基本数据类型详解:从声明到类型转换,零基础也能看懂
java·开发语言·python