跳转至

让 Agent 自主完成任务

Ch01.415 让 Agent 自主完成任务

📊 Level ⭐⭐ | 8.6KB | entities/cli-anything-wechat-demo.md

让 Agent 自主完成任务

CLI-Anything 是香港大学数据科学实验室(HKUDS)的开源项目,核心功能是为任意 GUI 软件自动生成结构化 CLI 接口,让 AI Agent(如 Claude Code、Codex)通过命令行直接驱动 Blender、GIMP、FreeCAD 等专业软件。7 阶段全自动流水线从源码分析到包发布,配合 CLI-Hub 社区注册表实现 Agent 自主发现和安装工具。

原文存档

摘要

当前 AI Agent 的根本局限:文本进文本出,遇到带 GUI 的专业软件就只能绕道。要么手写 wrapper(工作量随深度指数增长),要么靠截图点击的 RPA(换个系统主题就崩溃)。CLI-Anything 的解法是自动生成 CLI 层——把"人用的鼠标+键盘接口"转换为"Agent 用的命令行接口"。一条命令 /cli-anything ./gimp 跑完 7 阶段流水线,就能 pip install 一个可用的 CLI 包。已覆盖 Blender、GIMP、FreeCAD、QGIS、Godot、LibreOffice 等 20+ 软件。

核心要点

7 阶段全自动流水线

  1. 🔍 Analyze — 扫描源码,将 GUI 操作映射到底层 API
  2. 📐 Design — 设计命令分组、状态模型、输出格式
  3. 🔨 Implement — 用 Click 框架实现 CLI,带 REPL 模式、JSON 输出、undo/redo
  4. 📋 Plan Tests — 生成 TEST.md,规划单元测试和端到端测试
  5. 🧪 Write Tests — 跑测试,覆盖真实软件调用
  6. 📝 Document — 更新测试结果文档
  7. 📦 Publish — 生成 setup.py,装进 PATH

SKILL.md:Agent 可读的工具说明书

每个生成的 CLI 附带 SKILL.md 文件,格式专门给 Agent 读:YAML 头部写名称和描述,正文列所有命令组和子命令,加上用法示例和 JSON 输出说明。Agent 读完 SKILL.md 就知道工具能干什么、怎么调、输出什么格式。

CLI-Hub:社区驱动的 CLI 注册表

  • pip install cli-anything-hub + cli-hub install <name>
  • 元技能(Meta-Skill):Agent 可自主读 Hub 目录、选择安装合适的 CLI,无需人工指定
  • 覆盖创意类(Blender/GIMP/Krita/Shotcut)、科学计算(FreeCAD/QGIS)、开发工具(Obsidian/Zotero/n8n)、游戏(Godot)、办公(LibreOffice/Zoom)、AI/ML(Stable Diffusion/ComfyUI/Ollama)
  • 注册表实时更新,社区 PR 合并后立刻生效

真实 Demo

  • Blender 3D 无人机:Agent 逐步搭建轨道中继无人机 3D 模型,每步可实时预览,命令和视觉状态记录进 trajectory.json
  • FreeCAD 月球车:用 cli-anything-freecad 搭建好奇号风格月球车,验证 CLI 覆盖 CAD 功能深度
  • Draw.io HTTPS 握手流程图:Agent 从零画 TCP 三次握手→TLS 协商→加密数据交换→四次挥手,产出 .drawio 和 .png

平台支持

  • Claude Code:/plugin marketplace add HKUDS/CLI-Anything(官方支持)
  • Pi Coding Agent:bash 脚本安装扩展(官方支持)
  • OpenCode:复制命令文件(官方支持)
  • OpenClaw:复制 SKILL.md 到技能目录(社区支持)
  • Codex:bash 安装脚本(社区支持,实验性)
  • GitHub Copilot CLI:copilot plugin install(社区支持)

深度分析

1. CLI 作为 Agent 与 GUI 软件的"接口协议层"

CLI-Anything 解决的核心问题不是"给软件加命令行",而是建立 Agent 与专业软件之间的标准化交互协议。当前 Agent 与软件的交互存在三层断裂:(1) GUI 层是为人眼设计的,Agent 无法可靠操作;(2) API 层虽然结构化,但每个软件的 API 设计哲学不同,Agent 需要逐个学习;(3) CLI 层恰好是中间态——格式清晰、可组合、LLM 天然擅长读写。CLI-Anything 本质上是在做API 翻译:将各软件碎片化的 Python API 统一翻译为 Click CLI 的标准接口。

2. SKILL.md 是 Agent 的"工具使用手册"范式

SKILL.md 的设计思路值得所有 Agent 工具开发者借鉴。当前 Agent 工具的一个普遍问题:Agent 知道一个工具"存在",但不知道"怎么用"。SKILL.md 用结构化格式(YAML 头 + 命令列表 + 用法示例 + 输出格式)解决了这个问题。这与 MCP (Model Context Protocol) 的工具描述机制异曲同工,但更偏向"教程式文档"而非"函数签名"。对于复杂工具,教程式文档比函数签名更有效——Agent 需要"这个工具的工作流是什么样的",而非"这个参数的类型是什么"。

3. 元技能(Meta-Skill):Agent 自主发现工具的起点

CLI-Hub 的"元技能"是最具前瞻性的设计:Agent 不需要人类告诉它"用这个工具",而是自主在注册表中搜索、评估、安装。这实现了从"工具增强 Agent"到"Agent 自主增强自身"的范式转变。但这也带来了新的挑战:如何确保 Agent 选择正确的工具?如何评估社区贡献 CLI 的质量?当前 Hub 仅靠 CI 做基础验证,这对于专业软件的深度功能覆盖可能不够。

4. REPL 模式 + undo/redo:Agent 长流程任务的关键支撑

生成的 CLI 自带 REPL 模式,保持会话状态,支持 undo/redo。这对 Agent 的长流程任务至关重要——不用每次调用都重新初始化软件上下文。会话状态保持是 Agent 可靠执行长任务的基础设施。undo/redo 则为 Agent 提供了"试错-回退"的能力,这与 Harness Engineering 中的"确定性回退路径"理念一致。

5. 7 阶段流水线的工程质量与局限

7 阶段流水线(分析→设计→实现→测试→文档→发布)本身是一个小型软件工程流水线。它的核心假设是:源码的 Python API 封装足够规范,可以通过自动分析映射到底层功能。这个假设对 Blender(成熟的 Python API)成立,对 API 封装混乱的软件可能不成立。生成 CLI 的质量天花板取决于源码的 API 设计质量。文章也诚实地指出了这一点:"如果软件的 Python API 封装得乱七八糟,生成出来的 CLI 覆盖率可能没那么理想。"

实践启示

  1. 为 Agent 接入专业软件时,优先考虑 CLI 层而非 GUI 自动化:RPA 方案(截图+点击)在系统主题切换、分辨率变化、软件更新时都会崩溃。CLI 层是更稳定的 Agent-Software 交互协议。
  2. 为每个 Agent 工具写 SKILL.md 式文档:不要只提供函数签名。写一个结构化的、教程式的工具说明书,包含工作流示例和输出格式。Agent 的工具使用准确率会显著提升。
  3. 长流程任务必须支持会话状态保持和 undo/redo:如果工具每次调用都需要重新初始化,Agent 的长任务执行效率会断崖式下降。REPL 模式是最低要求。
  4. 社区 CLI 注册表需要分层质量保障:CI 基础验证 + 社区评分 + 核心维护者审核。当前仅靠 CI 验证,对于生产使用场景可能不够。
  5. 自动生成 CLI 的覆盖率需要人工验证:7 阶段流水线生成的 CLI 是起点而非终点。对于关键业务软件,人工审查和补充生成 CLI 的覆盖盲区是必要的。

相关实体