贡献指南
贡献指南
相关源文件
本章引用的主要源码文件:
.github/workflows/cd.yml.github/workflows/cli-node-cd.yml.github/workflows/openclaw-cd.yml.github/workflows/ts-sdk-cd.yml.github/workflows/vercel-ai-cd.ymlCONTRIBUTING.mddocs/components/vectordbs/dbs/pinecone.mdxdocs/contributing/development.mdxdocs/contributing/documentation.mdxmem0/configs/vector_stores/pinecone.pymem0/vector_stores/pinecone.pytests/vector_stores/test_pinecone.py
本文档记录了 Mem0 仓库的贡献流程,包括开发环境搭建、代码质量标准、测试流程以及持续集成/持续部署(CI/CD)工作流。内容涵盖 Python 和 Node.js 生态系统的代码与文档贡献。
贡献工作流
Mem0 采用标准的 Fork 和拉取请求工作流。所有贡献必须通过 GitHub 拉取请求提交,并在合并前通过自动化质量检查。
拉取请求提交流程
贡献要求:
- 功能分支:使用专用的功能分支,例如
feature/my-new-featuredocs/contributing/development.mdx:16-16或feature/f1CONTRIBUTING.md:10-10。 - 需要测试:如果修改了代码(新功能或缺陷修复),请添加相应的测试
CONTRIBUTING.md:11-11。 - 文档:包含适当的文档/文档字符串以及运行该功能的示例
CONTRIBUTING.md:12-12。 - 验证:确保所有测试在所有支持的版本上通过后再提交
CONTRIBUTING.md:13-13,CONTRIBUTING.md:61-61。
来源:CONTRIBUTING.md:5-16, CONTRIBUTING.md:61-61, docs/contributing/development.mdx:9-25
开发环境搭建
Mem0 使用 hatch 管理 Python 环境,使用 pnpm 管理 Node.js/TypeScript 组件。
Python 环境架构
环境激活命令
| 语言 | 工具 | 命令 | 用途 |
|---|---|---|---|
| Python | hatch | hatch shell dev_py_3_11 | 激活 Python 3.11 开发环境 CONTRIBUTING.md:27-27 |
| Python | hatch | hatch build --clean | 构建二进制 Wheel 包和源码压缩包 .github/workflows/cd.yml:32-32 |
| Python | pre-commit | pre-commit install | 安装 Git 钩子 CONTRIBUTING.md:40-40 |
| Python | make | make install_all | 安装所有可选依赖 docs/contributing/development.mdx:44-44 |
| Node.js | pnpm | pnpm install --frozen-lockfile | 在子包中安装依赖 .github/workflows/openclaw-cd.yml:34-34 |
来源:CONTRIBUTING.md:19-33, CONTRIBUTING.md:35-41, docs/contributing/development.mdx:29-45, .github/workflows/cd.yml:22-33
代码标准与质量
为了保持代码库的一致性,贡献者必须遵守特定的代码检查和格式化标准。
标准检查清单
- 代码检查:使用
ruff通过make lint捕获样式问题docs/contributing/development.mdx:59-65。 - 格式化:使用
make format格式化代码docs/contributing/development.mdx:67-73。 - 配置校验:新组件(如向量存储)必须使用
pydantic.BaseModel进行配置校验,包括使用model_validator进行跨字段检查mem0/configs/vector_stores/pinecone.py:7-55。
实现示例:向量存储提供者
添加新提供者时,请遵循 PineconeDB 中建立的模式:
- 继承自
VectorStoreBasemem0/vector_stores/pinecone.py:25-25。 - 实现核心方法:
create_col、insert、search、update、get、deletemem0/vector_stores/pinecone.py:93-210。 - 在
mem0/configs/vector_stores/中提供配置类mem0/configs/vector_stores/pinecone.py:7-7。
来源:docs/contributing/development.mdx:49-82, mem0/vector_stores/pinecone.py:25-210, mem0/configs/vector_stores/pinecone.py:7-55
测试要求
所有代码变更必须包含测试,并通过现有测试套件。Python 测试通过 pytest 和 make 管理。
运行 Python 测试
# 使用默认 Python 版本运行测试
make test
# 测试特定 Python 版本
make test-py-3.9
make test-py-3.10
make test-py-3.11
make test-py-3.12
CONTRIBUTING.md:45-59
测试模式
测试应使用 unittest.mock 隔离外部依赖,并使用 pytest.fixture 实现可复用的设置 tests/vector_stores/test_pinecone.py:1-17。
来源:CONTRIBUTING.md:45-59, tests/vector_stores/test_pinecone.py:1-191
文档系统
Mem0 使用 Mintlify 管理文档。
本地文档搭建
- 前置条件:Node.js 版本 23.6.0 或更高
docs/contributing/documentation.mdx:11-11。 - 安装:
npm i -g mintlifydocs/contributing/documentation.mdx:24-24。 - 执行:在
docs/目录下运行mintlify devdocs/contributing/documentation.mdx:38-38。
来源:docs/contributing/documentation.mdx:1-55
持续部署与发布
Mem0 使用 GitHub Actions 进行自动化发布。发布通过创建带有特定标签前缀的 GitHub Release 来触发。
发布标签系统
| 包 | 注册表 | 标签前缀 | 示例标签 | 工作流文件 |
|---|---|---|---|---|
mem0ai(Python SDK) | PyPI | v* | v0.1.31 | .github/workflows/cd.yml |
mem0-cli(Python CLI) | PyPI | cli-v* | cli-v0.2.1 | - |
mem0ai(TS SDK) | npm | ts-v* | ts-v2.4.6 | .github/workflows/ts-sdk-cd.yml |
@mem0/cli(Node CLI) | npm | cli-node-v* | cli-node-v0.1.2 | .github/workflows/cli-node-cd.yml |
@mem0/vercel-ai-provider | npm | vercel-ai-v* | vercel-ai-v2.0.6 | .github/workflows/vercel-ai-cd.yml |
@mem0/openclaw-mem0 | npm | openclaw-v* | openclaw-v1.0.1 | .github/workflows/openclaw-cd.yml |
来源:CONTRIBUTING.md:71-78
部署工作流(Python 示例)
发布详情:
- PyPI:通过
pypa/gh-action-pypi-publish使用 OIDC 可信发布.github/workflows/cd.yml:43-45。 - npm:通过 npm CLI(>= 11.5.1)使用
--provenance进行 OIDC 可信发布.github/workflows/ts-sdk-cd.yml:43-45。 - 前置条件:在创建 Release 之前,必须在
pyproject.toml或package.json中更新版本号CONTRIBUTING.md:82-82。
来源:.github/workflows/cd.yml:1-46, .github/workflows/ts-sdk-cd.yml:1-47, CONTRIBUTING.md:65-92