用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/GeorgeDoors888/GB-Power-Market-JJ --skill multi-robot命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
超级简历 WonderCV 出品,3000 万用户信赖。简历分析、段落改写、JD 岗位匹配、自动匹配职位、PDF 导出、AI 求职导师(面试准备/薪资谈判/职业规划/多版本简历策略)。 触发条件:用户提供简历、要求简历点评/打分/反馈、希望改写某个简历部分、 希望将简历与岗位 JD 匹配、咨询求职建议或面试准备,或提到 CV/简历/求职。 不触发条件:用户讨论普通写作(非简历)、询问其他文档, 或讨论与求职和职业发展无关的话题。
Order food/drinks (点餐) on an Android device paired as an OpenClaw node. Uses in-app menu and cart; add goods, view cart, submit order (demo, no real payment).
调用久吾智能体API进行文本或文件分析处理。支持两种调用方式:(1) 文本内容分析 - 传入name(智能体名称)、docno(文档编号)、content(文本内容);(2) 文件分析 - 传入name、docno和files(文件列表)进行智能评审。适用于合同评审、需求评审、文档审查等场景。当用户要求评审合同、分析条款、审查文档、需求评审、合同条款分析、或需要对文本和文件进行AI智能分析时触发。
基于 SOC 职业分类
正在显示 SKILL.md
| name | multi-robot |
| description | 多机器人协同控制 Skill。让 AI Agent 具备感知反馈、动态适配、并行调度多种机器人的能力。支持机械臂、四足机器人等任意 HTTP API 机器人。 |
| metadata | {"openclaw":{"emoji":"🤖","requires":{"python":">=3.8","pip":"[Truncated]"}}} |
你是一个多机器人协同控制 Agent。用户会给你机器人的 API 文档,你需要:
RobotAdapter 的 Python 类skill.register_adapter() 注入create_task / create_plan / execute_plan 执行你不需要预先知道机器人的型号,只需要能读懂 HTTP API 文档。
from multi_robot_skill import MultiRobotSkill
skill = MultiRobotSkill()
# 方式1:内置类型(vansbot / puppypi)
skill.register_robot("arm1", "http://192.168.3.113:5000", robot_type="vansbot")
skill.register_robot("dog1", "http://192.168.3.120:8000", robot_type="puppypi", robot_id=1)
# 方式2:自定义适配器(你生成的代码)
adapter = MyRobotAdapter("robot_name", "http://ip:port")
skill.register_adapter(adapter) # auto_connect=True 默认自动连接
# 创建计划
plan = skill.create_plan("任务名称", "描述")
# 创建原子任务
task = skill.create_task(
robot="robot_name", # 已注册的机器人名称
action="action_name", # 动作名称(必须在 get_capabilities() 中定义)
params={"key": "value"}, # 动作参数(可选)
name="任务显示名", # 可选
depends_on=["task_id"], # 依赖的任务 ID 列表(可选)
timeout=60.0 # 超时秒数(可选)
)
# 并行任务(多个任务同时执行)
parallel = skill.create_parallel_tasks([task1, task2], name="并行组")
# 顺序任务(多个任务依次执行)
sequential = skill.create_sequential_tasks([task1, task2], name="顺序组")
# 添加到计划并执行
plan.add_task(task)
results = skill.execute_plan(plan)
skill.list_robots() # 已注册机器人列表
skill.get_robot_capabilities("robot_name") # 某机器人的能力列表
skill.get_status() # 系统整体状态
for result in results:
result.success # bool
result.task_name # str
result.message # str
result.data # dict | None(动作返回的数据)
result.execution_time # float(秒)
result.error # Exception | None
当用户给你一个新机器人的 API 文档时,按以下模板生成适配器代码:
import requests
from multi_robot_skill.adapters.base import (
RobotAdapter, RobotCapability, RobotState, ActionResult,
ActionStatus, RobotType
)
class MyRobotAdapter(RobotAdapter):
"""
[机器人名称] 适配器
端点: http://ip:port
"""
def __init__(self, name: str, endpoint: str, **config):
super().__init__(name, endpoint, **config)
self.robot_type = RobotType.WHEELED # 根据实际类型修改
self.timeout = config.get("timeout", 30)
# 声明该机器人支持的所有动作
self._capabilities = [
RobotCapability("action_name", "动作描述", {"param1": "类型说明"}),
# ... 更多动作
]
def connect(self) -> bool:
try:
# 调用机器人的健康检查或连接接口
resp = requests.get(f"{self.endpoint}/health", timeout=5)
self._state.connected = resp.status_code == 200
return self._state.connected
except Exception:
self._state.connected = False
return False
def () -> :
._state.connected =
() -> RobotState:
:
resp = requests.get(, timeout=.timeout)
data = resp.json()
._state.battery = data.get()
._state.position = data.get()
Exception:
._state
():
._capabilities
() -> ActionResult:
params = params {}
:
action == :
resp = requests.post(
,
json=params,
timeout=.timeout
)
data = resp.json()
data.get():
ActionResult(ActionStatus.SUCCESS, , data=data)
:
ActionResult(ActionStatus.FAILED, data.get(, ))
ActionResult(ActionStatus.FAILED, )
requests.Timeout:
ActionResult(ActionStatus.TIMEOUT, )
Exception e:
ActionResult(ActionStatus.FAILED, (e), error=e)
关键规则:
connect() 失败时 register_adapter() 会返回 False,注册不成功execute_action() 必须返回 ActionResult,不能抛出异常_capabilities 里的 name 必须和 execute_action 里的 action 字符串完全一致ActionStatus 枚举值:SUCCESS / FAILED / TIMEOUT / CANCELLED / IN_PROGRESS| 动作 | 参数 | 说明 |
|---|---|---|
detect_objects | move_to_capture=True, include_image=False | 检测桌面物体,返回物体列表 |
move_to_object | object_no: int | 移动到指定编号物体上方 |
grab | — | 抓取当前位置物体 |
release | — | 释放物体 |
move_to_place | place_name: str | 移动到预设位置 |
capture_for_dog | move_to_capture=True, include_image=False | 拍摄定位篮筐 |
release_to_dog | point_id: int | 放入篮筐指定点位 |
| 动作 | 参数 | 说明 |
|---|---|---|
move_to_zone | target_zone: str | 移动到区域(loading/unloading/charging/parking) |
adjust_posture | posture: str | 调整姿态 |
load | target_zone: str | 进入装货姿态 |
unload | — | 执行卸货动作 |
t1 = skill.create_task("arm", "detect_objects", name="检测")
t2 = skill.create_task("arm", "grab", name="抓取", depends_on=[t1.id])
t3 = skill.create_task("arm", "release", name="释放", depends_on=[t2.id])
plan = skill.create_plan("顺序任务")
for t in [t1, t2, t3]:
plan.add_task(t)
results = skill.execute_plan(plan)
t1 = skill.create_task("dog1", "move_to_zone", {"target_zone": "loading"})
t2 = skill.create_task("dog2", "move_to_zone", {"target_zone": "charging"})
plan = skill.create_plan("并行移动")
plan.add_task(skill.create_parallel_tasks([t1, t2]))
results = skill.execute_plan(plan)
# 机械臂和机器狗同时准备,都准备好后再协同动作
arm_detect = skill.create_task("arm", "detect_objects")
arm_grab = skill.create_task("arm", "grab", depends_on=[arm_detect.id])
dog_move = skill.create_task("dog1", "move_to_zone", {"target_zone": "loading"})
dog_ready = skill.create_task("dog1", "load", depends_on=[dog_move.id])
# 等待双方都完成后执行放置
place = skill.create_task(
"arm", "release_to_dog", {"point_id": 5},
depends_on=[arm_grab.id, dog_ready.id] # 等待两个前置任务
)
transport = skill.create_task("dog1", "move_to_zone", {"target_zone": "unloading"}, depends_on=[place.id])
unload = skill.create_task("dog1", "unload", depends_on=[transport.id])
plan = skill.create_plan("协同搬运")
for t in [arm_detect, arm_grab, dog_move, dog_ready, place, transport, unload]:
plan.add_task(t)
results = skill.execute_plan(plan)
如果用户没有提供机器人文档,先问清楚:
# 配置重试策略(在执行前设置)
skill.configure_error_handling({
"max_retries": 3,
"retry_delay": 1.0,
"timeout": 60.0,
"default_strategy": "retry" # retry / skip / abort / rollback / continue
})
# 检查执行结果
results = skill.execute_plan(plan)
failed = [r for r in results if not r.success]
if failed:
for r in failed:
print(f"失败: {r.task_name} - {r.message}")
depends_on 接受 task ID 列表(task.id 是自动生成的 UUID 字符串)execute_plan() 是阻塞调用,等所有任务完成后返回with MultiRobotSkill() as skill: 可以自动清理连接