DORA Node Manifest 编写指南:用 dora-node.yml 为可复用节点定义类型化契约
DORA Node Manifest 编写指南用 dora-node.yml 为可复用节点定义类型化契约【免费下载链接】doraDORA (Dataflow-Oriented Robotic Architecture) is middleware designed to streamline and simplify the creation of AI-based robotic applications. It offers low latency, composable, and distributed dataflow capabilities. Applications are modeled as directed graphs, also referred to as pipelines.项目地址: https://gitcode.com/GitHub_Trending/do/dora导读本篇技术指南围绕 DORADataflow-Oriented Robotic Architecture的节点清单node manifest即dora-node.yml展开讲解如何把一段普通代码目录变成可被他人一行 YAML 接入的可复用节点包括清单的完整字段、输入/输出类型契约、自定义类型发布、脚手架命令与无索引本地开发流程。读完本文你将掌握如何为 DORA 节点编写、校验并本地验证类型化契约为后续发布到 Dora Hub 做好准备。Node Manifest 是什么node manifestdora-node.yml是 DORA 中一个可复用节点的类型化、带版本号的结构化描述它声明了节点的入口entrypoint、构建命令build、类型化的输入/输出契约contracts以及配置面configuration surface即env。它的存在让一个装满代码的文件夹变成别人可以搜索到、并用一行 YAML 接线的节点nodes: - id: detector hub: dora-yolo^0.5 # ← 从 manifest 解析而来无需关心 PATH inputs: image: camera/image outputs: - bboxmanifest 的定位原则是只保存语言原生 manifest 无法表达的内容DORA 契约与 DORA 接线信息。而名称、版本、依赖等信息继续留在pyproject.toml/Cargo.toml中manifest 从不重复这些内容。这与 guide/src/hub/overview.md 中描述的 Hub 模型一致——Hub 是 DORA 节点的包管理器而 manifest 正是其中的包描述文件。注意hub:是不稳定特性未来版本可能改变行为但 manifest 格式本身apiVersion: 1是稳定的即使不涉及任何索引只要在普通path:节点旁放置dora-node.yml就能获得契约校验见下文本地开发无需索引。一份完整的 manifest以下是一份完整的dora-node.yml示例位于pyproject.toml/Cargo.toml旁# dora-node.yml — lives next to pyproject.toml / Cargo.toml apiVersion: 1 # manifest schema version (currently 1) name: dora-yolo # defaults to [project].name / [package].name namespace: dora-rs # index namespace ( a GitHub org/user) description: YOLO object detection on camera frames categories: [ml-inference] # from the fixed category list keywords: [vision, detection, yolo] runtime: python # python | rust | c | cpp entrypoint: dora-yolo # what to run, relative to the nodes working dir build: pip install . # how to build it (run in the working dir) platforms: [] # optional allowlist, e.g. [linux-x86_64, # linux-aarch64]; empty all dora: 0.4 # optional supported dora version range inputs: image: type: std/media/v1/Image # type URN (see Type Annotations) required: true description: BGR frame to run detection on outputs: bbox: type: std/vision/v1/BoundingBox description: detected bounding boxes # a node may have zero inputs (a source) or zero outputs (a sink) env: # configuration surface, documented typed MODEL: default: yolov8n.pt description: model weights file CONFIDENCE: type: float default: 0.4 types: {} # optional custom type definitions, keyed by # type URN (see below); omit when there are none example: | # snippet shown by dora hub info - id: detector hub: dora-yolo^0.5 inputs: image: camera/image outputs: - bbox字段速查表字段必填说明apiVersion是manifest 模式版本当前为1name可缺省回退到[project].name/[package].name按 PEP 503 规范化namespace是索引键为namespace/name等同于一个 GitHub org/userruntime是python|rust|c|cppentrypoint是工作目录内的相对路径——不允许绝对路径、不允许..见下文build推荐构建命令在工作目录内执行pip install .、cargo build --release、cmake 调用等inputs、outputs是可为空sink 无输出source 无输入inputs.*.type等推荐类型 URN省略则该端口保持无类型校验会跳过它platforms、dora推荐平台白名单按os-arch形态校验驱动dora hub search --platform过滤 DORA 兼容版本范围description、categories、keywords推荐驱动dora hub searchenv、types、requirements、example可选配置面、随包发布的类型、声明的需求、文档片段从 JSON Schema 看字段细节该 manifest 模式以 JSON Schema 形式随仓库发布在 libraries/core/dora-node-schema.json可用于编辑器自动补全。从这份 Schema 中还能提取出若干实现级细节categories是固定枚举sensor、actuator、robot、transform、filter、ml-inference、llm、speech、communication、recorder、visualization、simulator、debugSchema 中标注扩展需通过 index PR 讨论。env支持类型化配置每个环境变量可声明type取值限定为string默认、int、float、booldefault必须是字面量。Schema 中特别说明manifest 会被原样发布进索引因此默认值不能使用$VAR引用展开必须能在每台机器上解析出相同结果。env有安全过滤PATH、PYTHONPATH、LD_*、DYLD_*等安全敏感的环境变量名在校验阶段会被拒绝。requirements仅为信息性声明可声明hardware如[cuda]v1 实际只探测cuda与system按包管理器/平台键控的系统包需求由dora hub info展示、构建开始时提示永远不会被自动安装。PortDef的required仅在 input 上有效校验会拒绝在 output 上使用required省略type的端口在校验时被跳过。entrypoint 规则entrypoint被校验为节点工作目录内的相对路径——绝对路径和包含..的路径都会被拒绝Python托管环境PATH上的控制台脚本即[project.scripts]中定义的名称例如dora-yolo。Rust / C / C构建产物例如target/release/dora-yolo或build/lidar。从 Hub 包解析时entrypoint只在节点自身的工作目录或托管环境中查找——不会去搜索宿主机的全局$PATH因此一个拼写错误会直接报错失败而不是静默运行宿主机上的某个同名二进制。类型化契约inputs / outputs输入和输出类型使用 DORA 既有的类型 URN 系统std/category/v1/TypeName支持嵌套结构体 Schema、参数化类型以及加宽兼容图。当hub:或相邻的path:节点被组合进 dataflow 时manifest 的inputs/outputs类型会作为该节点的input_types/output_types呈现并走常规校验管线dora validate dataflow.yml # producer/consumer URN 兼容性、字段差异检查 dora build dataflow.yml # 同样的检查在任何东西运行之前执行若发生不匹配——比如把std/vision/v1/BoundingBox输出接到期望std/media/v1/Image的输入上——会在组合compose阶段、任何进程启动之前以 producer/consumer 双方的 URN 报错。此外dataflow 作者自己在 YAML 中的注解优先级始终高于manifest 中的声明。关于类型系统的补充事实来自 guide/src/concepts/types.md类型 URN 形如std/category/vversion/TypeName例如std/core/v1/Float32、std/media/v1/Image、std/vision/v1/BoundingBox部分结构体类型支持参数以区分变体如std/media/v1/AudioFrame[sample_typef32,channels2]同基类 一侧未参数化视为通配兼容参数值不同则判为不匹配除精确匹配外类型检查器还支持隐式加宽转换如UInt8→UInt32→UInt64、Float32→Float64、任意类型→Bytes通用汇加宽传递深度上限为 3std/前缀为保留命名空间用户类型不得使用。随节点发布自定义类型节点可以在自己的 manifest 中携带自定义类型定义YAML 形状与 libraries/core/types/std/*/v1.yml 下的标准库类型一致。这些类型必须位于包自身的命名空间之下——std/及其他命名空间会被拒绝namespace: acme types: acme/lidar/v1/PointCloud: arrow: Struct fields: - name: x type: Float32 - name: y type: Float32 outputs: cloud: type: acme/lidar/v1/PointCloud随节点发布的类型会在解析resolution阶段被加载进 dataflow 的类型注册表因此消费者可以在自己的端口检查中引用这些类型。从 JSON Schema 的TypeDef定义可见类型声明支持arrowArrow 数据类型名如Float32、Struct、LargeBinary、fields仅 Struct 类型、metadata要求的元数据键与params类型参数声明如 AudioFrame 的sample_type。使用dora hub init脚手架dora hub init会在你的pyproject.toml或Cargo.toml旁写出一份初始dora-node.yml并尽可能从原生 manifest 预填内容名称、从[project.scripts]/ 二进制目标推导的 entrypoint、描述cd my-node dora hub init # writes ./dora-node.yml dora hub init path/to/node # or target a specific directory从源码 binaries/cli/src/command/hub/init.rs 可以看到脚手架的具体行为预填的名称、命名空间、entrypoint 若违反 manifest 的严格规则如std组织名、foo--bar形式的名字、奇特的 console-script 名称会被安全占位符替代——name回退为my-node、namespace回退为your-namespaceRust/C/C 节点的 entrypoint 回退为target/release/name脚手架生成后会调用NodeManifest::validate()自检而非仅parse()确保dora validate --node-manifest可以立即通过无需手工修正。填充你的inputs/outputs类型和env之后可以单独校验这份 manifestdora validate --node-manifest dora-node.yml该标志在 binaries/cli/src/command/validate.rs 中定义dora validate默认校验 dataflow--node-manifest则切换为校验dora-node.yml本身两者互斥。本地开发无需索引你不需要发布任何东西就能获得契约校验。只要把dora-node.yml放在一个普通path:节点旁它就会被自动识别nodes: - id: detector path: target/release/detector # dora-node.yml lives at the nodes root inputs: image: camera/imagedora build/dora validate会读取相邻的 manifest注入其类型化端口并检查你的接线——与 Hub 消费者获得的校验完全一致。这是编写节点契约时推荐的内循环inner loop工作流不需要任何索引参与即可反复迭代输入/输出契约。构建位置指引Build-location guidance从源码构建节点意味着运行它的机器上必须能完成编译。DORA 的多守护进程multi-daemon流程中每个 daemon 都负责构建自己的节点——在笔记本上没问题但在资源受限设备上可能极慢甚至无法完成例如 Jetson 编译重型节点时可能热降频或内存不足。目标机编译Compile-on-target默认适用于性能足够的机器与轻量节点。宿主机构建再分发Build-on-a-host-and-ship嵌入式推荐在性能足够的机器上为目标架构构建再通过离线缓存流程部署产物让机器人端永远不需要编译。经验法则不要在资源受限的 daemon 上运行重型构建。关于离线缓存与源码镜像可进一步阅读 guide/src/hub/reproducible-builds.md 与dora hub fetch。小结dora-node.yml是 DORA 生态中把代码变成可复用节点的关键一步它用稳定的apiVersion: 1格式承载了语言原生 manifest 无法表达的 DORA 契约与接线信息通过dora validate --node-manifest可在发布前独立校验通过相邻path:节点即可在本地获得完整的类型契约检查。无论是准备发布到 Hub 的正式节点还是仅在项目内部沉淀可复用组件编写一份准确的 node manifest 都是让 DORA 的类型系统真正端到端生效的起点。进一步阅读可参见 guide/src/hub/overview.mdHub 整体模型、guide/src/hub/using-nodes.md消费侧接线与 guide/src/hub/publishing.md发布与命名空间管理。【免费下载链接】doraDORA (Dataflow-Oriented Robotic Architecture) is middleware designed to streamline and simplify the creation of AI-based robotic applications. It offers low latency, composable, and distributed dataflow capabilities. Applications are modeled as directed graphs, also referred to as pipelines.项目地址: https://gitcode.com/GitHub_Trending/do/dora创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

IDEA中Git分支多个提交合并为一个提交并搬到新分支的完整指南

IDEA中Git分支多个提交合并为一个提交并搬到新分支的完整指南

如果你和我一样,每天都在 IDEA 里和 Git 分支打交道,那你一定遇到过这种尴尬时刻:做一个小功能,随手提交了七八次,每次提交信息都是“修改”“再修改”“最终版”“真的是最终版”。等到要把这个功能合并到测试分支或者…

2026/9/18 20:32:24 阅读更多 →
VS2022 + Qt6 环境配置完整指南:从安装到项目互通避坑手册

VS2022 + Qt6 环境配置完整指南:从安装到项目互通避坑手册

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/18 20:32:24 阅读更多 →
QMK Bubble75 Hotswap 键盘固件实战指南:从编译烧录到 RGB 矩阵定制

QMK Bubble75 Hotswap 键盘固件实战指南:从编译烧录到 RGB 矩阵定制

QMK Bubble75 Hotswap 键盘固件实战指南:从编译烧录到 RGB 矩阵定制 【免费下载链接】qmk_firmware Open-source keyboard firmware for Atmel AVR and Arm USB families 项目地址: https://gitcode.com/GitHub_Trending/qm/qmk_firmware 导读 Bubble75 是 …

2026/9/18 20:31:23 阅读更多 →

最新新闻

ascend-transformer-boost 中 Unpad 算子的源码路径导航与实现原理

ascend-transformer-boost 中 Unpad 算子的源码路径导航与实现原理

ascend-transformer-boost 中 Unpad 算子的源码路径导航与实现原理 【免费下载链接】ascend-transformer-boost 本项目是CANN提供的是一款高效、可靠的Transformer加速库,基于华为Ascend AI处理器,提供Transformer定制化场景的高性能融合算子。 项目地…

2026/9/18 21:20:46 阅读更多 →
ValidX校验库集成指南:Maven与Gradle完整配置与排错技巧

ValidX校验库集成指南:Maven与Gradle完整配置与排错技巧

做Java后端和Android开发的同学,最近多多少少应该都听过ValidX这个校验库。它和传统的JSR-303(javax.validation)用法完全不是一回事,不依赖一堆注解在实体类上东标西注,而是把校验逻辑收敛到链式API里,代码…

2026/9/18 21:20:46 阅读更多 →
工业旧上位机零停机接入声光语音终端的TCP字节帧桥接方案

工业旧上位机零停机接入声光语音终端的TCP字节帧桥接方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/18 21:20:46 阅读更多 →
嵌入式PID参数整定实战:从临界振荡到波形判据的四步法

嵌入式PID参数整定实战:从临界振荡到波形判据的四步法

简介:本资源是一份面向自动化控制、工业仪表及过程控制领域初学者与工程实践者的PID参数整定系统性学习资料,聚焦解决实际项目中控制器调试难、响应不稳、超调过大等典型问题。文件为单个PDF文档(493KB),内容结构清晰、…

2026/9/18 21:20:46 阅读更多 →
量子疤痕态与协同本体论:量子混沌系统的特殊现象

量子疤痕态与协同本体论:量子混沌系统的特殊现象

1. 量子疤痕态:一个令人着迷的物理现象量子疤痕态(Quantum Scarred States)是量子混沌系统中一种特殊的本征态,表现为经典不稳定周期轨道在量子波函数中的"痕迹"。这种现象最早由Heller在1984年研究体育场量子台球问题时…

2026/9/18 21:20:46 阅读更多 →
图像分辨率本质:PPI/DPI/PPCM与场景适配指南

图像分辨率本质:PPI/DPI/PPCM与场景适配指南

1. 图像分辨率到底在说什么:不是像素越多越好,而是“匹配场景”才对你打开手机相册,随手点开一张照片,右上角弹出“57603240”,再点开微信里朋友发来的截图,显示“10801920”——这两个数字看起来差不多&am…

2026/9/18 21:19:45 阅读更多 →

日新闻

Matlab手写逻辑回归:从数学原理到多变量概率预测模型实现

Matlab手写逻辑回归:从数学原理到多变量概率预测模型实现

很多朋友第一次看到"逻辑回归"这四个字,第一反应就是——这玩意儿是个回归模型吧?我当年也是在Matlab里跑完一段代码,看着输出的0.73、0.86这种概率值,才回过神来:这家伙其实是披着回归外衣的分类神器&#…

2026/9/18 0:00:28 阅读更多 →
高值医用耗材研报PDF:用Python完成字段抽取、清洗与趋势预测

高值医用耗材研报PDF:用Python完成字段抽取、清洗与趋势预测

简介:这份报告是2023-2028年高值医用耗材行业调研及发展前景趋势预测报告,面向医疗器械企业管理者、投资机构、行业研究人员及关注政策变化的从业者,用于把握行业监管动向、市场格局与未来趋势。报告以PDF格式呈现,共1个文件、整体…

2026/9/18 0:00:28 阅读更多 →
三维高斯场赋能世界模型:几何语义蒸馏与机器人决策实战

三维高斯场赋能世界模型:几何语义蒸馏与机器人决策实战

先把我自己的背景交代一下:我之前在搞具身智能和机器人导航相关的项目,很长一段时间里都被“环境表示”这件事卡着。传统做法是用点云或者网格做几何建模,语义信息另外再跑分割模型,两套东西各管各的,时间一长就会发现…

2026/9/18 0:00:28 阅读更多 →

周新闻

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验 【免费下载链接】ai The AI Toolkit for TypeScript. From the creators of Next.js, the AI SDK is a free open-source library for building AI-powered applications and ag…

2026/9/16 19:03:19 阅读更多 →
Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化

Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化

Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化 【免费下载链接】refine A React Framework for building internal tools, admin panels, dashboards & B2B apps with unmatched flexibility. 项目地址: https://gitcode.com/GitH…

2026/9/17 7:57:36 阅读更多 →
Flutter应用改名全指南:从Android到iOS的配置与工具实践

Flutter应用改名全指南:从Android到iOS的配置与工具实践

刚接一个外包项目时,甲方要求把工程里临时用的应用名改成正式产品名。我本来觉得“改名”这种小事,打开配置文件改一行不就完了?结果真动手才发现,Flutter项目里“应用名称”根本不是一处配置,而是一整套散落在 Androi…

2026/9/17 10:19:14 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/16 22:31:27 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/15 21:39:18 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/16 22:32:59 阅读更多 →