跳到主要内容
欢迎随时贡献代码!无论是修复错误、添加功能还是提高性能,您的贡献都有助于为成千上万的开发者提供更好的开发体验。
在提交大型的新功能或重构之前,请先在论坛中讨论您的想法。这确保了与项目目标的一致性并防止重复工作。这不适用于错误修复或小改进,您可以直接通过拉取请求贡献。请务必在您的 PR 描述中链接任何相关问题。使用在 PR 合并时自动关闭问题。新集成应遵循集成指南

理念

所有代码贡献都应遵循以下核心原则

入门

快速修复:提交错误修复

对于简单的错误修复,您可以立即开始
1

分叉仓库

LangChainLangGraph 仓库 Fork 到您的个人 GitHub 帐户
2

克隆并设置

git clone https://github.com/your-username/name-of-forked-repo.git

# For instance, for LangChain:
git clone https://github.com/parrot123/langchainjs.git

# For LangGraph:
git clone https://github.com/parrot123/langgraphjs.git
# Inside your repo, install dependencies
pnpm install
# Create a build for all packages to resolve workspace dependencies
pnpm build
3

创建分支

git checkout -b your-username/short-bugfix-name
4

进行更改

遵循我们的 代码质量标准 修复错误
5

添加测试

包含在没有您的修复时会失败的 单元测试。这使我们能够验证错误已解决并防止回归
6

运行构建

运行构建命令以确保包仍能正常构建
pnpm build
# or build a specific workspace package
pnpm --filter @langchain/core build
7

运行测试

在提交 PR 之前,请确保所有测试都在本地通过
pnpm lint
pnpm test

# For bugfixes involving integrations, also run:
pnpm test:int

# Or run tests in a specific workspace package
cd libs/langchain-core
pnpm test
pnpm lint

# Or run tests for a specific package from the root of the repo
pnpm --filter @langchain/core test
pnpm --filter @langchain/core lint
8

提交拉取请求

遵循提供的 PR 模板。如果适用,使用 关闭关键字 引用您正在修复的问题(例如 Fixes #123)。

完整开发设置

对于持续开发或更大规模的贡献
1

开发环境

按照下面的 设置指南 设置您的环境
2

仓库结构

了解 仓库结构 和包组织
3

开发流程

学习我们的 开发流程,包括测试和 Linting
4

贡献指南

查看我们针对功能、错误修复和集成的 贡献指南

开发环境

我们的 JS/TS 项目使用 pnpm 进行依赖管理。请确保您已安装最新版本,或运行 corepack enable(Node 24+)来设置所需的 pnpm 版本。
为您正在处理的包设置开发环境。
  • LangChain
  • LangGraph
对于 langchain-core 的更改
pnpm install
# Run tests for a package from the package directory
cd libs/langchain-core
pnpm test

# Or run tests for a package from the root of the repo
pnpm --filter @langchain/core test

对于 langchain 的更改
pnpm install
pnpm --filter langchain test  # Ensure tests pass before starting development
对于 合作伙伴集成 的更改
pnpm install
pnpm --filter @langchain/{provider} test  # Ensure tests pass before starting development
对于 社区集成 的更改
pnpm install
pnpm --filter @langchain/community test  # Ensure tests pass before starting development

仓库结构

  • LangChain
  • LangGraph
LangChain 作为一个多包仓库组织

核心包

  • langchain(位于 libs/langchain/):包含链、代理和检索逻辑的主包
  • @langchain/core(位于 libs/langchain-core/):基本接口和核心抽象
位于 libs/providers/ 中,这些是针对特定集成独立版本化的包。例如:

开发流程

测试要求

目录是相对于您正在处理的包的。
每个代码更改都必须包含全面的测试。
1

单元测试

位置src/tests/FILENAME_BEING_TESTED.test.ts要求
  • 不允许网络调用
  • 测试所有代码路径,包括边缘情况
  • 使用模拟对象进行外部依赖
# Run the entire test suite
pnpm test
# Or run a specific test file
pnpm test src/tests/FILENAME_BEING_TESTED.test.ts
# Or run a specific test function
pnpm test -t "the test that should be run"
2

集成测试

集成测试需要访问外部服务/提供者 API(可能需要付费),因此默认情况下不运行。并非每个代码更改都需要集成测试,但请记住,我们将在审查过程中单独要求/运行集成测试。位置src/tests/FILENAME_BEING_TESTED.int.test.ts要求
  • 测试与外部服务的真实集成
  • 使用环境变量作为 API 密钥
  • 如果凭据不可用,则优雅地跳过
pnpm test:int
3

测试质量清单

  • 当您的代码损坏时,测试会失败
  • 边缘情况和错误条件已测试
  • 正确使用夹具和模拟对象

代码质量标准

质量要求
  • 类型提示
  • 文档
  • 代码风格
必需:所有函数的完整类型
function processDocuments(
    docs: Document[],
    processor: DocumentProcessor,
    batchSize: number = 100
): ProcessingResult {
    // ...
}

贡献指南

向后兼容性

除了关键安全修复之外,不允许对公共 API 进行破坏性更改。有关主要版本发布的详细信息,请参阅我们的版本控制策略
保持兼容性
始终保留:
  • 函数签名和参数名称
  • 类接口和方法名称
  • 返回值结构和类型
  • 公共 API 的导入路径
可接受的修改:
  • 添加新的可选参数/类型参数
  • 向类添加新方法
  • 在不改变行为的情况下提高性能
  • 添加新模块或函数
  • 这会破坏现有用户代码吗?
  • 检查您的目标是否公开
  • 测试中是否存在现有使用模式?

错误修复

对于错误修复贡献
1

重现问题

创建一个最小的测试用例来演示该错误。维护者和其他贡献者应该能够在没有额外设置或修改的情况下运行此测试并看到故障
2

编写失败测试

添加在没有您的修复时会失败的单元测试
3

实施修复

进行解决问题所需的最小更改
4

验证修复

确保测试通过且未引入回归
5

记录更改

如果行为更改,更新文档字符串;为复杂逻辑添加注释

新功能

我们旨在保持新功能的高门槛。除非有现有问题表明迫切需要它们,否则我们通常不接受外部贡献者提交新的核心抽象、基础设施更改、依赖项更改或新的代理/链。 通常,功能贡献要求包括:
1

设计讨论

打开一个问题描述
  • 您正在解决的问题
  • 建议的 API 设计
  • 预期使用模式
2

实现

  • 遵循现有代码模式
  • 包含全面的测试和文档
  • 考虑安全影响
3

集成注意事项

  • 这与现有功能如何交互?
  • 是否存在性能影响?
  • 这是否引入了新的依赖项?
我们将拒绝可能导致安全漏洞或报告的功能。

安全指南

安全至关重要。切勿引入漏洞或不安全的模式。
安全清单
  • 验证并清理所有用户输入
  • 在模板和查询中正确转义数据
  • 切勿使用 eval(),因为这可能导致任意代码执行漏洞
  • 使用特定的异常类型
  • 不要在错误消息中泄露敏感信息
  • 实现适当的资源清理
  • 避免添加硬依赖
  • 保持可选依赖最小化
  • 审查第三方包是否存在安全问题

测试和验证

本地运行测试

在提交 PR 之前,请确保您已完成以下步骤。请注意,LangChain 和 LangGraph 的要求略有不同。
  • LangChain
  • LangGraph
1

单元测试

pnpm test
所有单元测试必须通过
2

集成测试

pnpm test:int
(如果您的更改影响集成,则运行)
3

格式

pnpm format
pnpm lint
代码必须通过所有样式检查
4

PR 提交

推送您的分支并打开拉取请求。遵循提供的表单模板。使用关闭关键字注明相关问题。提交后,等待并检查以确保 CI 检查通过。如果任何检查失败,请及时解决问题——维护者可能会在合理的时间范围内关闭未通过 CI 的 PR。

测试编写指南

为了编写有效的测试,需要遵循一些良好实践
  • 将测试封装在描述被测试组件的 describe 块中
  • 使用自然语言描述测试名称
  • 断言要详尽
  • 仅对合理大小的数据对象使用快照
  • 单元测试
  • 集成测试
  • 模拟用法
describe("DocumentProcessor", () => {
    it("Should handle empty document list", () => {
        const processor = new DocumentProcessor();
        const result = processor.process([]);

        expect(result.success).toBe(true);
        expect(result.processedCount).toBe(0);
        expect(result.errors).toHaveLength(0);
    });
});

获取帮助

我们的目标是提供最便捷的开发设置。如果您在设置过程中遇到任何困难,请在社区 Slack 中提问或在论坛中发帖。
您现在已准备好为 LangChain 贡献高质量代码!

以编程方式连接这些文档到 Claude、VSCode 等,通过 MCP 获取实时答案。
© . This site is unofficial and not affiliated with LangChain, Inc.