1. uv 是什么

uv 是由 Astral 团队开发的 Python 项目和包管理工具。它把 Python 版本、虚拟环境、依赖安装和项目运行这些原本分散的步骤,放进一套统一的命令中。

在 LangChain Python 项目里,uv 主要负责四件事:

  • 安装并切换 Python 版本;
  • 为项目创建隔离的虚拟环境;
  • 声明、安装和锁定项目依赖;
  • 在项目环境中运行 Python 命令。

我们可以利用 uv 帮助我们把 Python 项目准备好。后面的文章会在 FastAPI 提供的 HTTP 服务基础上接入 LangChain,并使用 DeepSeek V4 Flash 运行模型和 Agent 案例。

2. 安装 uv

macOS 或 Linux 在终端执行官方安装脚本

macos.sh
1
curl -LsSf https://astral.sh/uv/install.sh | sh

安装完成后,重新打开终端,或者按照安装程序的提示重新加载当前 shell 的环境变量。

Windows 系统在 PowerShell 中执行:

windows.ps1
1
irm https://astral.sh/uv/install.ps1 | iex

3. 验证安装

执行下面的命令查看 uv 是否已经加入当前终端的 PATH:

macos.sh
1
uv --version

看到版本号就说明安装成功。如果终端提示找不到 uv,先重新打开终端;仍然无法找到时,再检查安装程序输出的目录是否已经加入 PATH。

4. 初始化第一个 FastAPI + LangChain 项目

这里不把 LangChain 当成一个脱离服务端的脚本来运行,而是先创建一个 FastAPI 项目,再把 LangChain 的模型和 Agent 逻辑放进接口中。

uv init 会创建项目目录、pyproject.toml 和基础的 Python 文件:

macos.sh
1
uv init fastapi-langchain
2
cd fastapi-langchain

为项目安装一个明确的 Python 版本:

macos.sh
1
uv python install 3.12

然后用这个版本创建虚拟环境:

macos.sh
1
uv venv --python 3.12

在 macOS 或 Linux 中,如果希望显式激活虚拟环境,可以执行:

macos.sh
1
source .venv/bin/activate

Windows PowerShell 对应的命令是:

windows.ps1
1
.venv\Scripts\Activate.ps1

激活不是必须的。后续使用 uv run 执行命令时,uv 会自动选择当前项目的虚拟环境:

macos.sh
1
uv run python --version

5. 安装 FastAPI 和 LangChain 依赖

FastAPI 负责 HTTP 路由、请求校验和响应;FastAPI CLI 会调用 Uvicorn 启动 ASGI 服务;LangChain 则负责模型调用和 Agent 编排。把它们安装在同一个项目中,才能形成后续案例使用的完整运行骨架:

macos.sh
1
uv add "fastapi[standard]" langchain langchain-openai

uv add 会更新 pyproject.toml,并生成或更新 uv.lock。其中 pyproject.toml 声明项目需要哪些依赖,uv.lock 记录具体解析出的版本,方便其他人恢复一致的开发环境。

安装完成后,用项目环境执行导入检查:

macos.sh
1
uv run python -c 'import fastapi, langchain, langchain_openai; print(fastapi.__version__, langchain.__version__)'

6. 写下第一个 FastAPI 接口

在项目根目录创建 main.py。这个接口接收用户问题,再把问题交给 LangChain Agent,最后将 Agent 的消息结果转换成 JSON:

main.py
01
import os
02
03
from fastapi import FastAPI
04
from pydantic import BaseModel
05
from langchain.agents import create_agent
06
from langchain_openai import ChatOpenAI
07
08
app = FastAPI()
09
10
agent = create_agent(
11
model=ChatOpenAI(
12
model=os.environ["DEEPSEEK_MODEL"],
13
api_key=os.environ["DEEPSEEK_API_KEY"],
14
base_url=os.environ.get("DEEPSEEK_BASE_URL", "https://api.deepseek.com"),
15
),
16
system_prompt="你是一名简洁、可靠的 Python 学习助手。",
17
)
18
19
class ChatRequest(BaseModel):
20
question: str
21
22
@app.post("/chat")
23
async def chat(request: ChatRequest) -> dict[str, str]:
24
result = await agent.ainvoke({
25
"messages": [{"role": "user", "content": request.question}],
26
})
27
return {"answer": result["messages"][-1].content}

这里的 app 是 FastAPI 应用,agent 是 LangChain 的 Agent。DeepSeek 提供 OpenAI 兼容的 Chat Completions 接口,所以这里使用 ChatOpenAI 作为 LangChain 的模型封装,并通过 base_url 将请求发送到 DeepSeek。FastAPI 只负责接收和返回 HTTP 数据,模型选择、提示词和 Agent 执行仍然由 LangChain 处理。

7. 使用 .env 管理模型配置

在项目根目录创建 .env,把 DeepSeek V4 Flash 的配置集中放在这个文件中:

.env
1
DEEPSEEK_MODEL=deepseek-v4-flash
2
DEEPSEEK_BASE_URL=https://api.deepseek.com
3
DEEPSEEK_API_KEY=your-api-key

如果要把项目提交到 Git 仓库,可以创建一个不包含真实密钥的 .env.example,并在 .gitignore 中忽略 .env

.gitignore
1
.env
2
.env.*
3
!.env.example

.env 只保留在本机,.env.example 只用于说明需要哪些变量。使用中转服务时,将 DEEPSEEK_BASE_URL 改成中转站提供的 OpenAI 兼容地址即可。

启动服务时,显式告诉 uv 读取这个文件:

macos.sh
1
uv run --env-file .env fastapi dev

Windows PowerShell 使用同一条命令即可:

windows.ps1
1
uv run --env-file .env fastapi dev

uv 会在启动子进程前读取 .env,所以 Python 代码仍然可以通过 os.environ["DEEPSEEK_MODEL"] 等方式访问配置,不需要在代码中手动解析文件。也可以让 uv 自动发现项目中的 .env,但显式使用 --env-file 更容易看出服务依赖哪个配置文件。

FastAPI CLI 默认以开发模式启动服务,自动开启代码变更重载,并在项目根目录自动寻找 main.py 中名为 app 的 FastAPI 应用。如果以后调整了文件结构,也可以显式指定入口,例如 uv run --env-file .env fastapi dev --entrypoint main:app

服务启动后,用另一个终端发送请求:

macos.sh
1
curl -X POST http://127.0.0.1:8000/chat \
2
-H "Content-Type: application/json" \
3
-d '{"question":"请用一句话介绍 LangChain。"}'

调通之后,说明我们的环境已经准备好了。

订阅后可阅读剩余内容
LangChain Python
已发布5计划发布50目标已完成10%