CONTRIBUTING_CN.md
感谢你参与 OpenViking。本指南旨在帮助贡献者提交清晰、聚焦且便于评审的改动。
我们欢迎 Bug 报告、功能请求、文档改进和代码贡献。
OpenViking 重视聚焦且经过充分理解的改动。无论是否使用 AI 工具,贡献者都要对 理解、解释和验证自己的改动负责。
优先提交最小而完整的改动。代码简洁,是减少概念、分支、重复规则和猜测式抽象, 不是压缩必要的代码行数。好的改动应当直接、易读,并且能从入口到可观察行为解释清楚。
具体来说:
维护者精力有限,因此会优先查看聚焦的 PR:
这只是评审优先级,不是硬性限制或响应时间承诺。改动行数按手写源码、测试和文档的 新增行与删除行之和计算;生成文件、第三方代码和锁文件不计入规模判断。
不要为了控制行数省略必要的测试或文档。只有当拆分后的每个 PR 都能独立理解且保持 正确时,才拆分大改动。PR 小不代表可以降低正确性、设计质量或兼容性要求。
以下改动应在实现前先提交 Issue 或发起讨论:
讨论中请给出当前行为、目标行为、具体请求或配置示例,以及兼容性影响。这样维护者 可以在开始实现前确认设计边界。
请使用仓库提供的 GitHub 模板提交 Bug 报告、 功能请求和 使用问题。
如果已知受影响模块,请在 Issue 或 PR 中注明。如果不确定,先描述可观察行为和使用场景, 维护者会协助路由。
这张表根据 2026 年 6 月 24 日至 8 月 24 日已合并 PR 中持续的提交和评审活动整理。 它用于协助路由,不代表排他性的代码所有权;只需 @ 与改动直接相关的联系人。
| 领域 | 模块 | 代表路径或主题 | 近期活跃维护者 / 评审者 |
|---|---|---|---|
| Platform | Server、API、Auth、Identity、Admin、Task | openviking/server、openviking/service | @qin-ctx |
| Resource | 导入、Watch 与任务流水线 | openviking/resource | @qin-ctx、@KCHENPENGFEI |
| Resource | 资源解析 | openviking/parse | @zihengli-bytedance、@KCHENPENGFEI |
| Memory | Session、记忆抽取与编译 | openviking/session、记忆抽取、ov compile | @chenjw、@heaoxiang-ai、@fujiajie666 |
| Retrieval | Search 与 VectorDB | openviking/retrieve、openviking/storage/vectordb | @zhoujh01、@t0saki |
| Storage | RAGFS、PathLock、QueueFS 与加密 | openviking/storage、openviking/pyagfs、openviking/crypto、crates/ragfs* | @baojun-zhang |
| Integration | Agent Plugin 与 MCP | agent-plugins、记忆插件示例、Server MCP | @t0saki、@ZaynJarvis |
| Integration | VikingBot 与 Agent 编译 | bot、ov compile | @yeshion23333、@fujiajie666 |
| Client | SDK、CLI 与 LangChain | sdk、crates/ov_cli、integrations/langchain | @zhoujh01、@t0saki、@ehz0ah |
| Product | Web Studio | web-studio | @yufeng201、@ZaynJarvis |
| Project | 文档、CI 与 Plugin 发布 | docs、.github/workflows | @yufeng201、@ZaynJarvis |
跨模块改动或 Owner 不明确时,请先确认主要影响域,再 @ @qin-ctx、@ZaynJarvis 或 @zhoujh01。
ov CLI 时需要 Rust 1.91.1+sdk/go 时需要 Go 1.22+Linux 请安装 build-essential,部分环境还需要 pkg-config。macOS 请安装 Xcode
Command Line Tools。Windows 本地原生构建请安装 CMake 和 MinGW。
Fork 仓库,然后克隆自己的 Fork:
git clone https://github.com/YOUR_USERNAME/OpenViking.git
cd OpenViking
推荐使用 uv:
curl -LsSf https://astral.sh/uv/install.sh | sh
uv sync --all-extras
验证环境:
uv run python -c "import openviking; print(openviking.__version__)"
配置本地 Server:
uv run openviking-server init
uv run openviking-server doctor
配置说明和 Provider 示例见配置指南。
修改 RAGFS Rust Binding、内置 Rust CLI 或 C++ 扩展后,需要重新构建原生组件:
uv pip install -e . --force-reinstall
SDK、Integration、Plugin 和 Benchmark 可能有额外要求,请查看对应目录中的 README 或 包配置。
如果局部边缘 Case 开始改变任务边界、公开语义或整体架构,应暂停实现并回到设计讨论, 不要在主流程中不断增加特殊分支。
Python 使用 Ruff 进行格式化和 Lint,使用 mypy 进行类型检查,配置行宽为 100 字符。
对改动路径运行检查:
uv run ruff format <changed-paths>
uv run ruff check <changed-paths>
uv run mypy <changed-paths>
公开 API 应包含简短且有用的 Docstring。优先使用清晰命名和直接控制流,不要用注释 重复解释代码本身。
Rust、Go、TypeScript、文档和 Plugin 改动,请使用对应组件定义的格式化、Lint、类型检查 和测试命令。
验证受影响的最小有效公开契约和主要失败边界。
test_scripts/,不要放入源码、Benchmark
或维护脚本目录。运行相关的聚焦测试,例如:
uv run pytest tests/client/test_http_client_config.py
uv run pytest tests/server/ -k "search"
只有改动范围和风险需要时才运行完整 Python 测试:
uv run pytest
基于最新的 main 创建分支,完成聚焦改动后向 main 提交 PR。
Commit Message 和 PR 标题使用 Conventional Commits:
feat(parser): support xlsx resources
fix(retrieval): preserve rerank score order
docs: clarify server configuration
refactor(storage): remove duplicate path normalization
完整填写仓库的 PR 模板。有效的 PR 描述应说明:
请准确选择 Human Involvement。项目接受 AI 辅助贡献,但作者仍对改动负责,并且必须 能解释它与系统其他部分如何交互。
提交前:
CI 会根据受影响路径运行相应检查。CI 通过是必要条件,但不能替代作者验证和维护者评审。
项目文档位于 docs/en/ 和 docs/zh/。代码示例必须可运行,语言应清晰简洁;当对应
翻译存在时,应同步更新两种语言。
请保持尊重、包容、建设性,并聚焦技术讨论。开放式设计或使用讨论请前往 GitHub Discussions,可执行的 Bug 和功能请求请提交到 GitHub Issues。