菜单

包结构和构建系统

相关源文件

本文档介绍了构成 LangChain 生态系统基础的单体仓库结构、包依赖、构建配置和开发基础设施。它涵盖了各种包的组织、构建和部署方式。

有关核心抽象和接口的信息,请参阅 Runnable 接口和 LCEL。有关单个提供商实现的详细信息,请参阅 提供商集成

Monorepo 结构

LangChain 采用单体仓库结构,多个包组织在 libs/ 目录下。该仓库包含核心库、合作伙伴集成和开发工具,所有这些都通过统一的构建系统进行管理。

来源:pyproject.toml55-66 libs/langchain/pyproject.toml9-10 libs/core/pyproject.toml8-17 libs/partners/xai/pyproject.toml9-14

包依赖层级

包结构遵循清晰的依赖层级,langchain-core 作为基础。每个包在其 pyproject.toml 文件中显式声明其依赖项。

核心依赖项

langchain-core 包提供了基础的抽象,并且外部依赖项最少。

依赖项版本约束目的
langsmith<0.4,>=0.1.126跟踪与监控
tenacity!=8.4.0,<10.0.0,>=8.1.0重试机制
jsonpatch<2.0,>=1.33JSON 补丁工具
PyYAML>=5.3YAML 解析
packaging<25,>=23.2版本工具
typing-extensions>=4.7类型系统扩展
pydantic>=2.7.4数据验证

来源:libs/core/pyproject.toml9-17

主包依赖

langchain 包依赖于核心库并添加了更高级的功能

来源:libs/langchain/pyproject.toml9-18

合作伙伴包模式

合作伙伴包遵循一致的模式,依赖于 langchain-core,并可选择依赖 langchain-openai 以获取共享功能

来源:libs/partners/xai/pyproject.toml9-14

构建系统配置

构建系统使用 PDM 后端和 UV 来进行快速的依赖解析和管理。每个包都配置为独立的 Python 包,同时共享通用的开发工具。

构建后端配置

所有包均使用 PDM 构建后端进行一致的打包

来源:libs/core/pyproject.toml1-3 libs/langchain/pyproject.toml1-3

依赖组

包为不同的开发场景定义了依赖项组

分组目的通用依赖项
test单元测试pytest, pytest-asyncio, pytest-mock, syrupy
lint代码质量ruff, mypy
typing类型检查mypy, types-*
dev开发jupyter, setuptools
test_integration集成测试特定于提供商的测试依赖项

来源:libs/core/pyproject.toml28-61 libs/langchain/pyproject.toml48-87

UV 源配置

单体仓库使用 UV 的可编辑安装来处理本地开发依赖项

来源:libs/langchain/pyproject.toml116-121 pyproject.toml55-66

开发工作流

开发工作流程通过 Makefiles 和 UV 命令在包之间进行标准化。每个包都为常见的开发任务提供了标准化的目标。

包级命令

每个包提供这些标准的 Makefile 目标

来源:libs/langchain/Makefile24-25 libs/core/Makefile12-18 libs/langchain/Makefile13-14

代码质量配置

代码质量通过 Ruff 和 MyPy 进行强制执行,并带有特定于包的配置

Ruff 配置

  • 目标版本:Python 3.9
  • 规则选择:核心包为 ["E", "F", "I", "D", "UP"],更严格的包为 ["ALL"]
  • Pydocstyle 约定:Google 风格的文档字符串

MyPy 配置

  • 启用严格模式以进行类型检查
  • 包特定的覆盖以实现渐进式采用

来源:libs/core/pyproject.toml79-134 libs/langchain/pyproject.toml122-170

测试基础设施

测试基础设施使用 pytest 以及多个插件和配置

插件目的配置
pytest-asyncio异步测试支持asyncio_mode = "auto"
pytest-socket网络隔离--disable-socket --allow-unix-socket
pytest-xdist并行执行-n auto 用于自动计算工作进程数
syrupy快照测试--snapshot-warn-unused

来源:libs/langchain/pyproject.toml157-170 libs/core/pyproject.toml116-122

CI/CD 流水线

CI/CD 流水线使用 GitHub Actions 进行自动测试、代码风格检查和发布管理。该工作流程旨在处理单体仓库结构的复杂性。

工作流架构

来源:.github/workflows/check_core_versions.yml1-29

版本管理

通过自动化检查在整个代码库中强制执行版本一致性

核心版本同步

check_core_versions.yml 工作流程确保 pyproject.tomlversion.py 文件中的版本声明保持同步

来源:.github/workflows/check_core_versions.yml17-19 libs/core/langchain_core/version.py3

依赖管理

单体仓库使用 UV 锁文件来确保不同环境下的可复现构建

锁文件范围目的
libs/core/uv.lock核心包最少的依赖集
libs/langchain/uv.lock主包扩展功能依赖项
libs/partners/*/uv.lock合作伙伴包特定于提供商的依赖项

锁文件确保了开发、测试和生产环境之间一致的依赖解析。

来源: libs/core/uv.lock1-12 libs/langchain/uv.lock1-16 libs/partners/xai/uv.lock1-12