Reality · 部件、安装关系与工程方案
传感器、执行器、计算模组等部件有自己的身份与规格。同系列不代表相同 SKU,宣称兼容不代表已被某台机器人采用。BOM 表达具体配置与数量,不能从一条营销描述推导完整物料清单。
Model · Identity → Spec → Evidence
Part 的有 MPN 身份以规范厂商与 normalized_mpn 约束;原始 MPN、型号、变体和 Series 分别保留。规格逐条关联 Evidence,包含值、单位、有效时间和 supersedesId 修订链,摘要不能代替规格主张。
relationshipType | 含义 | 能否表述为默认安装 |
|---|---|---|
installed | 实际安装 | 仍需核对证据、配置与有效期 |
optional | 选配 | 不计入默认配置 |
compatible | 工程兼容 / 可适配 | 不能 |
replacement | 替换 / 维修关系 | 不能据此推定原装配置 |
reference_design | 参考设计 | 不能 |
Interface · 先探测,再读取
先读取 Parts capability。当前实现逐表探测 schema,返回 schemaVersion: parts-bom-v1,且 write.parts、write.robotPartUsages、write.bom 均为 false,blockedBySchema 为 true。该阻塞标志目前固定返回,不能从它单独断言所有读取表都不存在,也不能因表存在就解锁写入。
| 读取任务 | 入口与参数 |
|---|---|
| 部件列表 | /api/parts:q/manufacturer/mpn/category/subtype/status/limit/offset;limit 默认 50、上限 200 |
| 详情 | /api/parts/{id}:Part UUID;逐条规格、证据与关联机器人 |
| 系列矩阵 | /api/parts/series/{id}:Series UUID;字段和变体比较 |
| 机器人组成 | /api/robots/{id}/parts:使用机器人规范 ID;status 默认 approved |
| 约束匹配 | /api/parts/match?category=…&spec=…&limit=… |
列表 status 支持 approved(默认)、pending、any。公共可读不代表每一条均已批准,尤其是详情中的候选规格。列表按系列筛选存在参数命名差异,见 REST 当前限制。当前没有公开 BOM 写入 API,也没有 MCP 部件工具。
curl -fsS https://www.aiman.world/api/parts/capability
curl -fsS -G https://www.aiman.world/api/parts/match \
--data-urlencode 'category=actuator' \
--data-urlencode 'spec=peak_torque:gte:25:Nm,interface:contains:CAN' \
--data-urlencode 'limit=10'
这是查询语法示例,不保证有匹配记录。字段应从实际部件规格确认。约束格式为 field:op:value[:unit],多个条件用逗号分隔;操作符为 eq/gte/lte/contains,当前值内不支持逗号。前三种操作符比较数值,contains 比较文本。
Agent behavior · 匹配不等于可交付
匹配使用 approved、未被修订替代的规格主张。明确不满足的候选会被排除;返回候选分为 matched、partial、missing,必须继续检查每条约束的 outcome、证据、unknownCount 与 missingCount。当前总类 missing 也可能包含全部无法比较的 unknown,不能只看总类猜原因。
已支持且同族的单位可换算;未知单位或不同量纲可能得到 unknown。当前一侧没有单位时仍可能按数值比较,因此客户端必须额外核对单位、精度与测试条件。匹配结果不验证供货、价格、库存或现场性能,也不处理所有时间冲突。
缺失规格保持缺失;同字段未解决的冲突与不同版本请回到 Evidence 核对。compatible 不能变成“这台机器人采用了该部件”。
实现依据:emibot-rs/src/routes/parts.rs、docs/adr/0005-parts-bom-domain-schema.md。