运行时依赖
安装命令
点击复制技能文档
使用 DimOS Robotics 开发技能 当用户要求构建、修改、解释、调试或打包 DimensionalOS/DimOS 机器人仓库的工作时,包括机器人 @skill 方法、模块类、蓝图、MCP 工具、CLI 工作流、Unitree Go2/G1、无人机、xArm、回放数据或模拟,使用此技能。 核心心智模型 DimOS 是机器人的代理操作系统。将 DimOS 应用程序视为由类型流和 RPC 连接的模块图。蓝图将模块组成可运行的堆栈。DimOS @skill 是模块上的方法,作为可调用工具暴露给代理和 MCP 客户端。 编写代码时,首选 DimOS 本地样式: 在文件顶部放置导入。 使用模块子类用于机器人子系统和技能容器。 使用 In[T] 和 Out[T] 流进行数据流。 使用 @rpc 进行非代理 RPC 方法。 使用 @skill 进行代理暴露操作;不要在同一方法上堆叠 @rpc,因为 @skill 已经包装了方法以进行 RPC。 为每个 @skill 添加清晰的文档字符串;DimOS 将文档字符串作为工具描述暴露。 为每个公共技能参数添加类型注释。 除非当前 DimOS 代码路径显式支持其他返回类型,否则从技能中返回描述性字符串。 保持技能参数简单和 JSON 序列化:str、int、float、bool 和简单列表是最安全的。 不要假设技能存在。 告诉用户使用 dimos mcp list-tools 或检查相关技能容器来验证。 安全第一的机器人行为 对于任何物理机器人行为: 首选回放或模拟,然后再进行真实硬件。 在移动、速度、转角、距离和持续时间周围添加保守限制。 使不安全的请求以清晰的字符串响应失败,而不是部分执行。 不要生成禁用紧急停止、绕过碰撞检查、隐藏机器人状态或删除安全限制的代码。 对于真实硬件,需要本地监督、清晰区域、充电电池、网络稳定性和可访问的紧急停止。 除非代码收到成功信号或底层方法返回成功,否则不要声称机器人操作已经发生。 常见 DimOS 命令 使用这些命令作为帮助用户测试 DimOS 技能的默认工作流: # 列出可运行的蓝图 dimos list # 首先启动回放或模拟堆栈 dimos --replay run unitree-go2-agentic --daemon dimos --simulation run unitree-go2-agentic --daemon # 检查运行时状态 dimos status dimos log -f # 发现和调用 MCP 技能 dimos mcp list-tools dimos mcp modules dimos mcp call --arg key=value # 将自然语言输入发送到运行的代理 dimos agent-send "describe what you can do" # 停止堆栈 dimos stop 对于真实机器人示例,除非用户提供了真实的 IP,否则将 IP 保持为占位符: dimos run unitree-go2-agentic --robot-ip 编写 DimOS 技能容器 以此形状生成技能容器: from __future__ import annotations from dimos.agents.annotation import skill from dimos.core.core import rpc from dimos.core.module import Module class ExampleSkillContainer(Module): @rpc def start(self) -> None: super().start() @rpc def stop(self) -> None: super().stop() @skill def say_status(self) -> str: """报告此技能容器正在运行。」 return "ExampleSkillContainer is running." example_skill_container = ExampleSkillContainer.blueprint() 如果技能需要另一个模块,请使用 DimOS Spec 模式而不是字符串类型查找: from typing import Protocol from dimos.spec.utils import Spec class NavigatorSpec(Spec, Protocol): def set_goal(self, x: float, y: float) -> bool: ... class NavigationSkillContainer(Module): _navigator: NavigatorSpec @skill def go_to_xy(self, x: float, y: float) -> str: """导航到地图坐标。 参数: x:以米为单位的目标 x 坐标。 y:以米为单位的目标 y 坐标。 """ ok = self._navigator.set_goal(x, y) return "导航目标已接受。" if ok else "导航目标失败。" 将技能连接到代理蓝图 对于 MCP 工具,请在蓝图中包含 McpServer 和 McpClient,以及机器人堆栈和技能容器: from dimos.agents.mcp.mcp_client import McpClient from dimos.agents.mcp.mcp_server import McpServer from dimos.core.coordination.blueprints import autoconnect from my_project.example_skill_container import ExampleSkillContainer my_agentic_blueprint = autoconnect( # 机器人堆栈(), McpServer.blueprint(), McpClient.blueprint(), ExampleSkillContainer.blueprint(), ) 暴露模块级蓝图变量,以便 dimos run 可以找到它。 如果在 DimOS 仓库中添加或重命名蓝图,请运行更新 dimos/robot/all_blueprints.py 的注册表生成测试。 生成代码的审查清单 在提供最终代码之前,请检查: 每个 @skill 都有文档字符串和类型参数。 技能我