设置
本指南将引导您如何在本地运行仓库并提交您的第一段代码。 有关开发容器的信息,请参阅.devcontainer文件夹。
依赖管理:Poetry 和其他环境/依赖管理器
该项目使用Poetry v1.7.1+ 作为依赖管理器。
❗注意:在安装Poetry之前,如果你使用Conda
,请创建并激活一个新的Conda环境(例如conda create -n langchain python=3.9
)
安装Poetry:如何安装的文档。
❗注意:如果您使用Conda
或Pyenv
作为您的环境/包管理器,在安装Poetry之后,告诉Poetry使用virtualenv python环境(poetry config virtualenvs.prefer-active-python true
)
不同的包
此仓库包含多个包:
langchain-core
: 关键抽象的基础接口以及将它们组合成链的逻辑(LangChain 表达式语言)。langchain-community
: 各种组件的第三方集成。langchain
: 构成应用程序认知架构的链、代理和检索逻辑。langchain-experimental
: 实验性的组件和链,这些组件和链要么是因为技术新颖且仍在测试中,要么是因为它们需要给予LLM比大多数生产系统中更多的访问权限。- 合作伙伴集成:在
libs/partners
中的合作伙伴包,这些包是独立版本控制的。
每个都有其自己的开发环境。文档是从顶层的makefile运行的,但开发分为单独的测试和发布流程。
对于这个快速入门,从 langchain-community 开始:
cd libs/community
本地开发依赖
安装langchain-community开发需求(用于运行langchain、运行示例、代码检查、格式化、测试和覆盖率):
poetry install --with lint,typing,test,test_integration
然后验证依赖安装:
make test
如果在安装过程中收到关于debugpy
的WheelFileValidationError
,请确保您正在运行Poetry v1.6.1+。此错误存在于旧版本的Poetry(例如1.4.1)中,并在新版本中已解决。如果您在v1.6.1+上仍然看到此错误,您也可以尝试禁用“现代安装”(poetry config installer.modern-installation false
)并重新安装需求。有关更多详细信息,请参阅此debugpy
问题。
测试
注意: 在 langchain
、langchain-community
和 langchain-experimental
中,一些测试依赖是可选的。请参阅以下关于可选依赖的部分。
单元测试覆盖不需要调用外部API的模块化逻辑。 如果您添加了新逻辑,请添加一个单元测试。
运行单元测试:
make test
要在Docker中运行单元测试:
make docker_tests
还有集成测试和代码覆盖率可用。
仅开发 langchain_core 或 langchain_community
如果你只开发langchain_core
或langchain_community
,你可以简单地安装相应项目的依赖并运行测试:
cd libs/core
poetry install --with test
make test
或者:
cd libs/community
poetry install --with test
make test
格式化和代码检查
在提交PR之前,请在本地运行这些;CI系统也会进行检查。
代码格式化
此项目的格式化是通过ruff完成的。
要运行文档、食谱和模板的格式化:
make format
要为库运行格式化,请从相关库目录运行相同的命令:
cd libs/{LIBRARY}
make format
此外,你可以使用 format_diff 命令仅在当前分支中与主分支相比已修改的文件上运行格式化程序:
make format_diff
这在您对项目的一部分进行了更改并希望确保您的更改被正确格式化而不影响代码库的其余部分时特别有用。
代码检查
要运行对文档、食谱和模板的代码检查:
make lint
要为库运行代码检查,请从相关库目录运行相同的命令:
cd libs/{LIBRARY}
make lint
此外,您可以使用 lint_diff 命令仅在当前分支中与主分支相比已修改的文件上运行 linter:
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
和 poetry.lock
文件 不会 被修改。
如果您正在向Langchain添加新的依赖项,请假设它将是一个可选的依赖项,并且大多数用户不会安装它。
没有安装依赖的用户应该能够导入你的代码而不会产生任何副作用(没有警告,没有错误,没有异常)。
要引入库的依赖,请执行以下操作:
- 打开 extended_testing_deps.txt 并添加依赖项
- 添加一个单元测试,至少尝试导入新代码。理想情况下,单元测试使用轻量级的夹具来测试代码的逻辑。
- 请使用
@pytest.mark.requires(package_name)
装饰器来标记任何需要依赖的单元测试。
添加一个Jupyter Notebook
如果您正在添加一个Jupyter Notebook示例,您可能需要安装可选的dev
依赖项。
安装开发依赖项:
poetry install --with dev
启动一个笔记本:
poetry run jupyter notebook
当你运行 poetry install
时,langchain
包会在虚拟环境中以可编辑的方式安装,因此你的新逻辑可以被导入到笔记本中。