跳到主要内容

Lovrabet CLI 风险等级(riskLevel)完全指南

这篇主要给 技能维护者、交付同学、自动化集成人员 看。业务人员一般只需要知道:读写有边界,写入前最好先预览。


riskLevel 是干什么的

riskLevel 是 Lovrabet Runtime CLI 的权限护栏。

它的作用不是决定“你想不想执行”,而是决定“当前配置下允不允许执行”。

如果某个命令的风险等级高于当前 riskLevel,CLI 会直接拦截。


当前只有三档

read < write < high-risk-write
等级代表什么常见命令
read只读dataset listdata filterdata getOnedata aggregatesql execbff exec
write普通写入data createdata updateconfig setapp use
high-risk-write不可逆写入data delete

为什么不能通过 CLI 修改 riskLevel

这是刻意保留的安全边界。

如果 Agent 自己就能执行:

lovrabet config set riskLevel high-risk-write

那它等于可以先提权,再做删除或批量写入,护栏就失效了。

所以当前设计是:

  • 你可以通过 CLI 读取 riskLevel
  • 但不能通过 CLI 修改 riskLevel
  • 真正的修改必须由人手动编辑配置文件完成

现在应该怎么设置

直接改 .lovrabet.json 顶层字段:

{
"accessKey": "ak_xxx",
"env": "production",
"defaultApp": "crm",
"riskLevel": "write"
}

当前 runtime CLI 的主模型是顶层用户意图配置
不要再把重点放在旧的本地多应用 profile 模型上。


默认值是什么

当前默认值是:

write

这意味着:

  • 读操作默认可执行
  • 普通写入默认可执行
  • 删除这类高危动作仍然需要更高风险级别

典型拦截场景

场景 1:当前是 read,却想更新数据

lovrabet data update --code <datasetCode> --params '{"id":123,"status":"completed"}'

CLI 会拒绝执行,因为当前权限只允许读。

场景 2:当前是 write,却想删除数据

lovrabet data delete --code <datasetCode> --params '{"id":123}'

CLI 也会拒绝,因为删除属于 high-risk-write


riskLevel 和 --dry-run 是两个不同的东西

很多人会把它们混在一起,其实它们职责不同:

  • riskLevel:决定这次有没有资格执行
  • --dry-run:决定这次是否真的执行

也就是说:

  • 有权限但不想立刻执行 → 用 --dry-run
  • 没权限 → 先解决 riskLevel

为什么高危删除还要再确认一次

因为 riskLevel 只是在说“允许你做这类动作”,并不代表“这次删的一定就是你想删的那条数据”。

所以删除命令还有第二层保护:

  • 交互模式下弹确认
  • 非交互模式下必须加 --yes

这两层加在一起,才更接近真实生产环境需要的安全程度。


给维护同学的实用建议

如果你主要面向生产环境

推荐偏保守:

{
"riskLevel": "read"
}

这样 Agent 默认只能查,不能写。

如果你在做日常交付或测试环境维护

通常可以用:

{
"riskLevel": "write"
}

这样可以做补录和修正,但还不能直接删数据。

如果你真的要执行删除

请至少同时满足:

  1. riskLevel 已允许
  2. 先看清目标记录
  3. 最好先 --dry-run
  4. 非交互模式下显式加 --yes

给业务侧的一句解释

如果业务人员问:

为什么 Agent 不能直接帮我删掉?

最简单的解释就是:

因为系统默认把删除当成高风险动作,必须由人明确放开权限并确认。

这不是麻烦,而是保护真实业务数据。