本文档介绍了构成 LangChain 生态系统基础的单体仓库结构、包依赖、构建配置和开发基础设施。它涵盖了各种包的组织、构建和部署方式。
有关核心抽象和接口的信息,请参阅 Runnable 接口和 LCEL。有关单个提供商实现的详细信息,请参阅 提供商集成。
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.33 | JSON 补丁工具 |
PyYAML | >=5.3 | YAML 解析 |
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 的可编辑安装来处理本地开发依赖项
来源: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 进行强制执行,并带有特定于包的配置
["E", "F", "I", "D", "UP"],更严格的包为 ["ALL"]来源: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 流水线使用 GitHub Actions 进行自动测试、代码风格检查和发布管理。该工作流程旨在处理单体仓库结构的复杂性。
来源:.github/workflows/check_core_versions.yml1-29
通过自动化检查在整个代码库中强制执行版本一致性
check_core_versions.yml 工作流程确保 pyproject.toml 和 version.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