跳到主要内容
Open on GitHub

设置

本指南将引导您了解如何在本地运行仓库并提交您的第一段代码。有关开发容器,请参阅.devcontainer 文件夹

依赖管理:uv 及其他环境/依赖管理器

本项目使用 uv v0.5+ 作为依赖管理器。

安装 uv安装说明文档

不同包

此仓库包含多个包

  • langchain-core:核心抽象的基础接口以及在链中组合它们的逻辑(LangChain 表达式语言)。
  • langchain:构成应用程序认知架构的链、代理和检索逻辑。
  • 合作伙伴集成:libs/partners 中独立版本控制的合作伙伴包。
注意

一些 LangChain 包位于单一仓库之外,例如 langchain-community 用于各种第三方集成,以及 langchain-experimental 用于实验性抽象(这些技术要么是新颖且仍在测试中,要么需要赋予大型语言模型(LLM)比大多数生产系统更多的访问权限)。

每个包都有自己的开发环境。文档从顶层 makefile 运行,但开发分为单独的测试和发布流程。

对于此快速入门,请从 langchain 开始

cd libs/langchain

本地开发依赖

安装开发要求(用于运行 langchain、运行示例、代码检查、代码格式化、测试和覆盖率)

uv sync

然后验证依赖安装

make test

测试

注意:langchainlangchain-communitylangchain-experimental 中,一些测试依赖项是可选的。请参阅以下关于可选依赖项的部分。

单元测试覆盖不需要调用外部 API 的模块化逻辑。如果您添加了新逻辑,请添加单元测试。

运行单元测试

make test

在 Docker 中运行单元测试

make docker_tests

还有集成测试和代码覆盖率可用。

开发 langchain_core

如果您只开发 langchain_core,您可以直接安装项目依赖并运行测试

cd libs/core
make test

格式化和代码检查

在提交拉取请求前在本地运行这些;CI 系统也会检查。

代码格式化

本项目通过 ruff 进行格式化。

运行文档、cookbook 和模板的格式化

make format

要对库进行格式化,请从相关库目录运行相同的命令

cd libs/{LIBRARY}
make format

此外,您可以使用 `format_diff` 命令,仅对当前分支与主分支相比已修改的文件进行格式化

make format_diff

当您仅更改了项目的一部分并希望确保您的更改得到正确格式化而不影响其余代码库时,这尤其有用。

代码检查

本项目的代码检查通过 ruffmypy 的组合完成。

运行文档、cookbook 和模板的代码检查

make lint

要对库进行代码检查,请从相关库目录运行相同的命令

cd libs/{LIBRARY}
make lint

此外,您可以使用 `lint_diff` 命令,仅对当前分支与主分支相比已修改的文件进行代码检查

make lint_diff

当您仅更改了项目某些部分并希望确保您的更改符合代码检查标准而无需检查整个代码库时,这会非常有帮助。

我们知道代码检查可能很烦人——如果您不想进行,请联系项目维护者,他们可以帮助您。我们不希望这成为贡献优秀代码的障碍。

拼写检查

本项目的拼写检查通过 codespell 完成。请注意,codespell 会查找常见错别字,因此可能会有误报(拼写正确但很少使用)和漏报(未找到拼写错误)的情况。

检查此项目的拼写

make spell_check

原地修复拼写

make spell_fix

如果 `codespell` 错误地标记了一个单词,您可以通过将其添加到 `pyproject.toml` 文件中的 `codespell` 配置来跳过该单词的拼写检查。

[tool.codespell]
...
# Add here:
ignore-words-list = 'momento,collison,ned,foor,reworkd,parth,whats,aapply,mysogyny,unsecure'

使用可选依赖

langchainlangchain-communitylangchain-experimental 依赖可选依赖项以保持这些包的轻量级。

langchain-core 和合作伙伴包不以这种方式使用可选依赖项。

您会注意到,当您在下面添加可选依赖项时,pyproject.tomluv.lock 不会被修改。

如果您正在向 Langchain 添加新的依赖项,请假定它将是一个可选依赖项,并且大多数用户不会安装它。

未安装该依赖项的用户应该能够导入您的代码,而不会产生任何副作用(无警告、无错误、无异常)。

要向库引入依赖项,请执行以下操作

  1. 打开 extended_testing_deps.txt 并添加依赖项
  2. 添加一个单元测试,至少尝试导入新代码。理想情况下,单元测试应利用轻量级夹具来测试代码逻辑。
  3. 对于任何需要该依赖项的单元测试,请使用 @pytest.mark.requires(package_name) 装饰器。

添加 Jupyter Notebook

如果您正在添加 Jupyter Notebook 示例,您会希望使用 test 依赖项运行

uv run --group test jupyter notebook

当您运行 uv sync 时,langchain 包会以可编辑模式安装到虚拟环境中,这样您的新逻辑就可以导入到 notebook 中。