设置
本指南将引导您了解如何在本地运行仓库并提交您的第一段代码。有关开发容器,请参阅.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
测试
注意: 在 langchain
、langchain-community
和 langchain-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
当您仅更改了项目的一部分并希望确保您的更改得到正确格式化而不影响其余代码库时,这尤其有用。
代码检查
运行文档、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'
使用可选依赖
langchain
、langchain-community
和 langchain-experimental
依赖可选依赖项以保持这些包的轻量级。
langchain-core
和合作伙伴包不以这种方式使用可选依赖项。
您会注意到,当您在下面添加可选依赖项时,pyproject.toml
和 uv.lock
不会被修改。
如果您正在向 Langchain 添加新的依赖项,请假定它将是一个可选依赖项,并且大多数用户不会安装它。
未安装该依赖项的用户应该能够导入您的代码,而不会产生任何副作用(无警告、无错误、无异常)。
要向库引入依赖项,请执行以下操作
- 打开
extended_testing_deps.txt
并添加依赖项 - 添加一个单元测试,至少尝试导入新代码。理想情况下,单元测试应利用轻量级夹具来测试代码逻辑。
- 对于任何需要该依赖项的单元测试,请使用
@pytest.mark.requires(package_name)
装饰器。
添加 Jupyter Notebook
如果您正在添加 Jupyter Notebook 示例,您会希望使用 test
依赖项运行
uv run --group test jupyter notebook
当您运行 uv sync
时,langchain
包会以可编辑模式安装到虚拟环境中,这样您的新逻辑就可以导入到 notebook 中。