
如果看过智能体尝试使用 CLI,就会见过它卡在答不上来的交互式提示里,或者对着一页没有示例的帮助文档硬解析。大多数 CLI 的设计前提是键盘前坐着一个人。下面是一些经验,能让它们对智能体更好用:
尽量做成非交互式。 如果 CLI 在执行到一半突然进入提示输入,智能体就会卡住。它没法按方向键,也很难在恰当的时刻输入 y。所有输入都应该能通过 flag 传入。交互模式可以在缺少 flag 时作为兜底,但不该是主路径。
$ mycli deploy --env production --tag v1.2.3 --dry-run
Would deploy v1.2.3 to production
- Stop 3 running instances
- Pull image registry.io/app:v1.2.3
- Start 3 new instances
No changes made.
$ mycli deploy --env production --tag v1.2.3
✓ Deployed v1.2.3 to production
别一上来就把所有文档倾倒给它。 智能体运行 mycli,看到子命令,挑一个,再运行 mycli deploy --help,拿到需要的信息。它不会为用不上的命令浪费上下文。让它在使用过程中逐步发现就行。
让 --help 真正有用。 每个子命令都要有 --help,而且每份 --help 都要带示例。示例能完成大部分工作。智能体对 mycli deploy --env staging --tag v1.2.3 这种模式做匹配,比读一段描述要快得多。
deployed v1.2.3 to staging
url: https://staging.myapp.com
deploy_id: dep_abc123
duration: 34s
所有东西都接受 flags 和 stdin。 智能体用管道思考。它们想把命令串起来,把输出在工具之间用管道传递。别要求位置参数按奇怪的顺序摆放,也别在缺值时退回交互式提示。
$ mycli deploy --help
Options:
--env Target environment (staging, production)
--tag Image tag (default: latest)
--force Skip confirmation
Examples:
mycli deploy --env staging
mycli deploy --env production --tag v1.2.3
mycli deploy --env staging --force
尽早失败,并给出可执行的错误信息。 如果缺少必填 flag,别挂住不动。立刻报错,并展示正确的调用方式。只要给出可以照着改的东西,智能体很擅长自我修正。
# this blocks an agent
$ mycli deploy
? Which environment? (use arrow keys)
# this works
$ mycli deploy --env staging
让命令具备幂等性。 智能体会频繁重试。网络超时、任务做到一半上下文丢了都很常见。同一个 deploy 跑两次,应该返回 已经部署过了,无操作,而不是创建一份重复的部署。
为破坏性操作增加 --dry-run。 智能体应该能先预览一次部署或删除将会做什么,再决定是否提交执行。让它先验证计划,然后再正式运行。
cat config.json | mycli config import --stdin
mycli deploy --env staging --tag $(mycli build --output tag-only)
用 --yes / --force 跳过确认。 人类会看到 你确定吗,智能体则会传 --yes 来绕过。默认走安全路径,但也要允许绕过。
让命令结构可预测。 如果智能体学会了 mycli service list,它也应该能猜到 mycli deploy list 和 mycli config list。选一个模式,比如 资源 + 动作,然后全局一致。
成功时返回数据。 给出 deploy ID 和 URL。表情符号挺可爱,但真的没必要。
Error: No image tag specified.
mycli deploy --env staging --tag <image-tag>
Available tags: mycli build list --output tags
如果在做会被智能体使用的 CLI,这些模式能省下大量排错时间。大多数工作只是把人类默认会做的事显式化而已。