面向 LLM 与 Agent 的 Rerun 仓库开发指南:从构建体系、代码生成到数据架构全解析
【免费下载链接】rerunVisualize, query, and stream to train on multimodal robotics data.项目地址: https://gitcode.com/GitHub_Trending/re/rerun
导读:本文以 Rerun 仓库根目录的 CLAUDE.md 为骨架,系统讲解这个时间感知多模态数据栈(robotics / spatial AI / computer vision 领域)的开发工作流。你将掌握:用
pixi完成构建、格式化与测试的完整命令体系;理解re_type_definitions → codegen → 多语言 SDK的代码生成链路与其三层类型系统;摸清crates/build|store|top|viewer的分层架构与从 SDK 到 Viewer 的数据流;学会用 MCP 服务器驱动运行中的 egui UI,以及文档、测试、代码规范等仓库约定。本文所有结论均可在仓库内找到对应源码与配置佐证。
Rerun 是什么:时间感知的多模态数据栈
CLAUDE.md 开篇给出了项目定位:Rerun 是一个时间感知(time-aware)的多模态数据栈与可视化工具,面向机器人、空间 AI、计算机视觉等方向。它提供 Python、Rust、C++ 三种 SDK,用于记录图像、点云、张量等富数据类型,并通过 Rerun Viewer 进行可视化。
从仓库结构看,SDK 与 Viewer 分布在 crates/top(re_sdk、rerun、rerun-cli、rerun_c)与 crates/viewer(re_viewer及其数十个视图/渲染 crate)中,Python 绑定位于 rerun_py,C++ SDK 位于 rerun_cpp。这与 CLAUDE.md 的概述相互印证。
构建系统:pixi 是唯一入口
Rerun 使用pixi统一管理任务与依赖,pixi.toml(pixi.toml)是全部任务的权威清单。运行任务的通用形式是pixi run <task>,pixi run <task> -- <args>可透传额外参数;用pixi task list可查看全部任务。
构建命令
| 任务 | 作用 | 底层实现(来自 pixi.toml) |
|---|---|---|
pixi run py-build | 构建 Python SDK 并装入本地.venv(基于 uv) | uv run maturin develop --uv --manifest-path rerun_py/Cargo.toml ...,环境变量RERUN_ALLOW_MISSING_BIN=1允许 maturin 在缺少rerunCLI 二进制时运行 |
pixi run rerun-build | 构建原生 Viewer(不含 web viewer) | cargo build --package rerun-cli --no-default-features --features release_no_web_viewer |
pixi run rerun-build-web | 构建 Web Viewer(Wasm) | cargo run -p re_dev_tools -- build-web-viewer ... --debug |
pixi run cpp-build-all | 构建全部 C++ 产物 | 先cmake -G 'Ninja' -B build/debug ...(cpp-prepare),再cmake --build build/debug --target ALL |
pixi run rerun-build-native-and-web | 与发布版一致的原生+Web 构建 | 依赖rerun-build-web后执行release_fullfeature 构建 |
此外 pixi.toml 还提供了rerun-build-release、rerun-perf(带 Tracy 性能分析)、rerun-build-fast(Cranelift 后端快速编译)等变体,满足调试与性能分析场景。
运行命令
pixi run rerun:编译并运行 Viewer(底层cargo run --package rerun-cli --no-default-features --features release_no_web_viewer --),可附加.rrd文件参数直接打开数据;pixi run uvpy script.py:通过 uv 运行 Python 脚本(带 Rerun SDK);cargo run -p <package_name>:运行特定 Rust 示例,如cargo run -p dna;pixi run rerun-web:编译并运行 Web Viewer(--web-viewer参数)。
格式化与代码生成
pixi run codegen # 从 re_type_definitions 生成 Rust/Python/C++ 代码 pixi run rs-fmt # 格式化全部 Rust 文件(改动后必跑) pixi run py-fmt # 格式化 Python 文件(ruff check --fix + ruff format) pixi run cpp-fmt # 格式化 C++ 文件(clang-format) pixi run toml-fmt # 格式化 TOML 文件(taplo fmt)其中rs-fmt有个特殊细节:由于docs/snippets/all/*.rs片段会被build.rs复制进 crate,cargo fmt --all覆盖不到它们,因此任务还会对含fn main()的片段直接执行rustfmt --edition 2024,并应用 docs/snippets/rustfmt.toml(max_width=80)。
测试体系:nextest、快照与图像对比
CLAUDE.md 明确要求 Rust 测试使用cargo nextest而非cargo test,以获得更好的输出与并行度,且"除非有明确理由,始终使用--all-features",并用--no-fail-fast在一次运行中收集全部失败。
cargo clippy -p <crate_name> # 构建前的 Rust 检查 cargo nextest run --all-features --no-fail-fast -p <crate_name> # 单 crate 测试 cargo nextest run --all-features --no-fail-fast -p re_view_spatial仓库的测试体系分为两类快照:
- insta 文本快照:随常规 Rust 测试运行,失败时执行
cargo insta review交互式审阅(需cargo install cargo-insta); - 图像对比测试:基于
egui_kittest的Harness::snapshot渲染图像并与检入的参考图对比,用TestContext模拟 Viewer 环境。结果保存于tests/snapshots/,失败产生diff.png。更新参考图:本地设UPDATE_SNAPSHOTS=1,CI 失败可用 scripts/update_snapshots_from_ci.sh 批量更新。
一键更新所有快照的聚合任务也在 pixi.toml 中定义:pixi run rs-update-snapshot-tests(INSTA_UPDATE=always UPDATE_SNAPSHOTS=1 cargo nextest run --all-targets --all-features ...)与pixi run py-update-snapshot-tests(pytest + inline-snapshot + syrupy.ambr)。
驱动运行中的 egui UI:给 Agent 的 MCP 通道
CLAUDE.md 为"用 Agent 操作运行中 UI"提供了两条 MCP 服务器路径,这是该文档中颇具特色的部分:
rerun viewer-mcp:通过 gRPC 驱动运行中的 Rerun Viewer,文档位于 docs/content/reference/viewer/mcp.md,对应源码 crate 是 crates/viewer/re_viewer_mcp;egui-mcp:驱动任意以EGUI_INSPECTION=1启动的 egui 应用(包括示例应用和无头egui_kittestharness),暴露attach、query_tree、click、type_text、screenshot、wait_for等能力。
典型操作循环:以EGUI_INSPECTION=1启动应用 → 调用attach(默认 host127.0.0.1、port5719)→query_tree定位控件 →click/type_text交互 →screenshot指定save_path后查看截图。文档特别提醒:egui-mcp需要应用持续绘制帧(macOS 上窗口应用不可被遮挡),因此优先使用无头 harness;无头 harness 通过egui_inspection::attach_from_env(&harness.ctx, label)接入,示例见EGUI_INSPECTION=1 cargo run -p re_agent_ui --example agent_app -- --headless。
代码生成系统:一处定义,三语 SDK
CLAUDE.md 反复强调一条铁律:绝不直接编辑生成文件——所有生成文件顶部都带 "DO NOT EDIT" 标记(已确认存在于 crates/store/re_sdk_types/src/archetypes 下的生成代码中)。
类型定义流水线
re_type_definitions → pixi run codegen → 生成代码 (Rust/Python/C++) + 文档 (docs/content/reference/types/)- 类型定义位于 crates/build/re_type_definitions/rerun,以
*.def.rs形式组织:encodings/*.def.rs:底层类型(Vec3D、Mat4x4 等);components/*.def.rs:组件类型(Position3D、Color 等);archetypes/*.def.rs:Archetype(Points3D、Image 等);blueprint/*.def.rs:蓝图系统类型;
- 代码生成实现位于 crates/build/re_types_builder,它解析这些
#[rerun::rerun_type]标注的 Rust 定义,并分派到codegen/rust、codegen/python、codegen/cpp三个后端; - 修改定义后运行
pixi run codegen重新生成,pixi run lint-codegen(即cargo run --package re_types_builder -- --check)可在 CI 中校验生成结果与定义一致。
三层类型系统
以 crates/build/re_type_definitions/rerun/archetypes/points3d.def.rs 为实例,可以看到类型系统自上而下的三个层次:
- Encodings(
rerun.encodings.*):基础类型,如 Vec3D、Color; - Components(
rerun.components.*):带语义的命名包装,如 Position3D、Radius; - Archetypes(
rerun.archetypes.*):组件集合,如 Points3D、Image。
每个 Archetype 对字段标注三档属性(源码中由#[rerun(required)]、#[rerun(recommended)]、#[rerun(optional)]显式声明):
- Required:必须提供(Points3D 的
positions); - Recommended:有良好默认值(Points3D 的
colors、radii); - Optional:纯可选(Points3D 的
labels、class_ids、keypoint_ids等)。
除了字段标注,定义文件还携带#[docs(category)]、#[docs(view_types)]、#[rerun(state)]、#[rerun(visualizer)]等元数据,以及\example文档注释,这些会一并驱动 API 文档与代码生成。
扩展模式:_ext文件
要给生成类型添加自定义功能,正确的做法是创建_ext文件(已确认仓库中存在大量此类文件,例如 crates/store/re_sdk_types/src/archetypes/points3d_ext.rs、crates/store/re_sdk_types/src/components/color_ext.rs):
- Rust:
filename_ext.rs,由 codegen 自动导入; - Python:
filename_ext.py,与生成类混入合并; - C++:
filename_ext.cpp,自动编译包含,codegen 可将其中部分标记为复制进头文件。
架构概述:crate 分层与数据流
Crate 组织(四层)
CLAUDE.md 给出了顶层划分,ARCHITECTURE.md 提供了完整 crate 表格与依赖图(crate_graph.svg):
crates/ ├── build/ # 代码生成(re_types_builder 等) ├── store/ # 数据类型、存储、查询(re_chunk_store、re_datafusion、re_entity_db 等) ├── top/ # 面向用户的 SDK 与 CLI(re_sdk、rerun、rerun-cli、rerun_c) └── viewer/ # Viewer UI 与渲染(re_viewer、re_renderer、re_view_spatial 等)分层规则是"下层依赖单向向下":一个 crate 只能依赖同层或更低层,scripts/check_crate_layers.py 在 CI 中强制校验。增删/重命名 crate 后必须更新 ARCHITECTURE.md:将 crate 加入对应表格,并按文件中的注释手动更新 FigJam 组织图;随后运行pixi run crate-graph重新生成依赖图(底层用scripts/generate_crate_graph.py从cargo metadata生成表格与 SVG)。注意pixi run crate-graph-check在 CI 中是禁用的,因为 graphviz 在 macOS 与 Linux 上布局可能不同——这正是"必须手动运行生成命令"的原因。
数据流
CLAUDE.md 用一张清晰的链路概括了从记录到渲染的完整旅程:
SDK (log archetype) ↓ 编码为 Apache Arrow LogMsg (编码数据) ↓ 传输 (gRPC / 文件 / 内存) re_chunk_store (索引化时序数据库) ↓ 查询 Viewer (立即模式渲染)这与 ARCHITECTURE.md 的说明一致:SDK 用 Apache Arrow 编码数据,可写入.rrd文件或经 gRPC 发给 Viewer/Server;re_chunk_store(crates/store/re_chunk_store)是内存中的索引化时序存储。跨语言一致性的佐证是文档片段对比测试(见下文"文档片段"节)。
蓝图系统(Blueprint)
蓝图是 Viewer 的配置层:
- 存储在独立 store(
re_entity_db)中,使用独立的 "blueprint" timeline; - 定义视图布局、可见性、按实体的覆盖项(overrides)、视图属性;
- 与日志数据共用同一套类型系统(因此蓝图 archetype 也定义在 crates/build/re_type_definitions/rerun/blueprint 中);
- 基本路径层级:
/viewport/、/view/{uuid}/、/container/{uuid}/。
可视化器与立即模式
每种视图类型(Spatial3D、TimeSeries 等)都注册了对应可视化器(visualizer):它们决定哪些实体/Archetype 可被可视化,并在每帧执行"查询数据 → 处理 → 生成渲染命令"。典型例子有Points3DVisualizer、LineStripsVisualizer、MeshVisualizer。
Viewer 采用立即模式(immediate mode):每一帧都从零开始查询 store 并重绘,消除了状态管理与回调,蓝图的显示状态永远与屏幕同步。这意味着代码必须持续优化查询与渲染路径——这是 Rerun 追求响应式 GUI 的核心工程策略。
Python 开发工作流:uv 与 pixi 双轨制
Python 使用独立的uv 管理的.venv(而非 pixi 的 conda 环境),这一点在 pixi.toml 中有详细注释:
pixi run py-build # 构建 rerun-sdk 并装入 .venv pixi run uvpy script.py # 通过 uv 运行 Python 脚本 pixi run uv run script.py # 显式 uv run隔离的关键机制:uv包装脚本会unsetCONDA_PREFIX,确保 uv 环境不会被 pixi conda 环境泄漏污染(scripts/pixi/activate.sh会把这个包装脚本加入 PATH)。因此只做 Rust 开发时,默认环境即可;涉及 C++ 绑定则需pixi run -e cpp ...切换到cpp环境——注意该环境会把 C/C++ 编译器设为系统编译器,目前会破坏 macOS 上的 Web Viewer 构建(见 pixi.toml 环境注释)。
文档片段与跨语言一致性验证
CLAUDE.md 指向 docs/snippets/README.md:文档片段(snippets)是位于docs/snippets/all/的自包含小示例,按类别(archetypes、howto、tutorials、views 等)组织,多数片段同时提供同名.py、.rs、.cpp版本,并自动用作 Archetype API 的 docstring。
片段运行方式:
- C++:
pixi run -e cpp cpp-build-snippets,然后./build/debug/docs/snippets/snippets <name>; - Python:
pixi run py-build && pixi run uvpy <path>; - Rust:
cargo run -p snippets -- <name> [args]。
其构建机制是:Rust 的build.rs与 C++ 的CMakeLists.txt都会自动把all/下的源码复制进工程、把main重命名为按片段命名的函数并生成 dispatcher,因此不要直接编辑src/snippets/。INDEX.md是由 codegen 自动生成的片段索引。配置见 docs/snippets/snippets.toml。
跨语言一致性由 docs/snippets/compare_snippet_output.py 验证:它对三种 SDK 执行相同的记录命令,写入不同.rrd文件并对比,CI 自动运行。这既是"三语 SDK 行为一致"的回归测试,也天然成为文档与代码同步的保障。
文档系统与 Python docstring 规范
CLAUDE.md 强调了文档系统的分工(详见 docs/README.md):
- 主文档站点由
docs/content/构建; docs/content/reference/types/由pixi run codegen自动生成——禁止手编;docs/content/reference/cli.md由pixi run man(即cargo run --package rerun-cli --all-features -- man)自动生成——禁止手编;- Python API 文档用MkDocs + mkdocstrings(不是 Sphinx),本地预览
pixi run py-docs-serve;C++ 文档用 Doxygen(pixi run -e cpp cpp-docs);JS 文档用 TypeDoc。
Python docstring 格式化规则(对生成代码与手写扩展都适用):
- 交叉引用用
[`ClassName`][](mkdocstrings 语法),禁用:class:/:func:/:meth:; - 警告/注意用 MkDocs admonitions(
!!! warning+ 缩进正文),禁用.. warning::; - 弃用说明用
@deprecated装饰器,不在 docstring 中重复写.. deprecated::; - 代码块用 markdown 围栏(
```),禁用.. code-block::; - 参数文档用 numpy 风格(
Parameters/Returns加----------)。
代码约定与开发须知
CLAUDE.md 记录的约定可从 CODE_STYLE.md 与 DESIGN.md 找到更完整版本,核心条目包括:
- 用
…而非...;markdown 每行一句(渲染不受影响,但 diff 更易审阅); - 错误与日志消息中错误信息在前、文件路径放最后(如
Failed to import: {err}\nFile path: {path}),便于复制粘贴时剥离可能很长或敏感的信息; - 散文风格遵循 DESIGN.md:空格分隔的长破折号
—,不用无空格连写,–只用于数值范围; - 用
format!("{x}")而非format!("{}, x); - 不写毫无信息量的琐碎注释;
- 自定义约定可用
pixi run lint-rerun <file>校验(不传文件则检查全部)。
环境与注意事项速查
CLAUDE.md 列出的关键注意事项,均有仓库配置佐证:
- PyO3 配置错误:运行
pixi run ensure-pyo3-build-cfg(由 scripts/pixi/activate.sh 激活流程调用); - git-lfs:测试快照需要,安装后执行
git lfs install; - 立即模式:整个 Viewer 每帧从头渲染,无状态管理回调;
- Arrow Native:数据以 Apache Arrow 数组存储、传输与查询;
- 多语言联动:修改
re_type_definitions会同时影响 Rust、Python、C++ 三个 SDK。
贡献须知与开发参考
CLAUDE.md 明确要求:除非被明确要求,不要直接开 Pull Request 或 Issue;一旦需要,应遵循 PR/Issue 模板(见仓库.github/目录)并披露自己是 LLM。
供深入阅读的仓库文档清单:
- ARCHITECTURE.md:详细架构文档(含完整 crate 表格与依赖图生成方法);
- BUILD.md:完整构建说明;
- CODE_STYLE.md:代码风格指南;
- CONTRIBUTING.md:贡献指南;
- DESIGN.md:UI/CLI/文档/日志消息设计准则;
- docs/README.md:文档系统架构;
- rerun_py/README.md:Python SDK 说明。
结语
Rerun 的开发者体验建立在三块基石之上:pixi 统一编排的构建/测试/格式化任务、由re_type_definitions驱动的三语言代码生成、以及以 Arrow 为核心、立即模式渲染的清晰数据架构。对 LLM 与 Agent 而言,CLAUDE.md 既是操作手册,也是一份"仓库心智模型":遵守生成文件不可编辑、crate 分层单向依赖、文档由 codegen 维护等约束,就能在修改定义、运行测试、扩展 SDK 时避免踩坑,并借助 MCP 通道直接"看见"运行中的 UI,完成从代码到可视化的闭环调试。
【免费下载链接】rerunVisualize, query, and stream to train on multimodal robotics data.项目地址: https://gitcode.com/GitHub_Trending/re/rerun
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考