skills/dev.sh-agilebot.com/agilebot-nlu-control

agilebot-nlu-control

SKILL.md

Agilebot 自然语言控制

概述

让用户用自然语言控制机器人:自动连接指定 IP,生成临时代码并执行,结果回传给客户端。

执行原理(必须遵循)

  1. 解析用户指令,提取机器人 IP 与自然语言任务内容;缺失时先询问。
  2. 创建临时 Python 文件并写入执行脚本(放在系统临时目录)。
  3. 运行该脚本,捕获 stdout/stderr,直接回传给客户端。
  4. 脚本内流程:连接机器人 -> 生成代码 -> 自动审批 -> 执行代码 -> 输出结果。

自动执行规则

  • 不向用户索要审批;若 needs_approval=True,直接调用 approve()
  • 任一步骤返回非 OK 状态时立即输出错误并停止后续动作。
  • 仅在用户明确要求时才输出生成的代码内容。

脚本工具

  • scripts/find_python.py:使用系统 Python 执行,用于查找并输出解释器路径(从家目录 conda env 下任意 Python 中选择)。
  • 前提:用户保证 PATH 中的系统 Python 可用。
  • scripts/nlu_run.py:使用 find_python.py 输出的解释器执行。
  • 用法:<python_bin> scripts/nlu_run.py [--controller-ip <ip>] <natural_language...> [--print-code] [--timeout SECONDS]
  • --print-code 仅输出生成代码后再执行。
  • 若未指定 IP,默认使用 10.27.1.254

临时脚本模板(Python)

import sys

from Agilebot.IR.A.arm import Arm
from Agilebot.IR.A.status_code import StatusCodeEnum


def fail(message: str, code: int = 1) -> None:
    print(message)
    sys.exit(code)


if len(sys.argv) < 3:
    fail("用法:script.py <controller_ip> <natural_language>")

controller_ip = sys.argv[1]
natural_language = sys.argv[2]

arm = Arm()
ret = arm.connect(arm_controller_ip=controller_ip)
if ret != StatusCodeEnum.OK:
    fail(ret.errmsg, 2)

generated, ret = arm.nlu.execute(natural_language)
if ret != StatusCodeEnum.OK:
    fail(ret.errmsg, 3)

if generated.needs_approval:
    generated.approve()

result, ret = generated.execute_code()
if ret != StatusCodeEnum.OK:
    fail(ret.errmsg, 4)

print(result)

参考

  • 参见 references/nlu_control.md 了解 API 细节与返回值。
Weekly Installs
3
First Seen
6 days ago
Installed on
amp3
cline3
opencode3
cursor3
kimi-cli3
codex3