Rule 与 Grant
面向接入 OpenBot 客户端或扩展服务端的开发者。示例需要本页说明的访问权限。从开发者手册开始。
关于请求的决定不必一次又一次地重做。OpenBot 用两种形式保存它们:
| 形式 | 示例 | 由谁检查 |
|---|---|---|
| Grant | apps.call 作用于 conn-7/search_orders,允许,在这个 Chat 中有效 |
OpenBot,精确匹配 |
| Rule | “The Programmer may read any repository of the openbot organization, but asks before a push.” | 评判模型 |
Grant 快速而精确。Rule 能覆盖一整类请求。
Grant(授权)是对某个 Bot 的某一项能力保存下来的决定。Bot 永远看不到自己的 Grant。它只能看到有些调用能运行,有些被拒绝。
| 字段 | 含义 |
|---|---|
capability |
action、target(* 表示所有目标),以及可选的确切 arguments。 |
effect |
allow 或 deny。拒绝优先。 |
scope |
once(一次调用后用完)、chat(在一个 Chat 中)或 lifetime。 |
grantedBy |
做出决定的人、Bot 或 Rule。 |
parent |
这个 Grant 来源于决策者的哪个 Grant。 |
chat |
范围为 chat 的 Grant 所属的 Chat。 |
status |
active、used 或 revoked。 |
OpenBot 把一个 Bot 的有效 Grants 放进一个策略,每个 Grant 对应一条规则。拒绝的 Grant 胜过每个允许的 Grant,与顺序无关。当多个允许的 Grant 都涵盖一次调用时,由第一个给出答案。给出答案的
once Grant 随后就用完了。见权限。
决策者回答请求时,OpenBot 会创建 Grant。你也可以自己创建:
curl -H "Authorization: Bearer $OPENBOT_TOKEN" \ -H "Content-Type: application/json" \ -d '{"capability":{"action":"bots.create","target":"*"},"effect":"allow","scope":"lifetime"}' \ https://api.example.com/v1/bots/$BOT/grantsGET /v1/bots/:botId/grants 列出 Grant。加上 ?status=active
只看有效的 Grant。
DELETE /v1/bots/:botId/grants/:grantId
撤销一个 Grant。OpenBot 还会撤销所有来源于它的 Grant,因此下方的 Bot 会失去通过它得到的权限。
Rule(规则)是为某个 Bot 写的一句自然语言。当没有 Grant 能对请求做出决定时,评判模型会阅读这个 Bot 的有效 Rule。
- 只有当某条 Rule 明确允许这个请求时,评判模型才会允许;只有当某条 Rule 明确禁止它时,才会拒绝。其他情况下,请求交给决策者。
- 每次允许或拒绝都必须引用一条 Rule 的原文。OpenBot 会检查引用。没有真实的引用,就没有决定。
- 拒绝优先于允许。
- 评判模型出错或太慢时,没有决定。
由 Bot 写的 Rule,只有在这个 Bot 位于本 Bot 的所有者链上方,并且自己也能使用这项能力时,才会生效。
curl -H "Authorization: Bearer $OPENBOT_TOKEN" \ -H "Content-Type: application/json" \ -d '{"text":"The Programmer may read any repository of the openbot organization, but must ask before it pushes to main."}' \ https://api.example.com/v1/bots/$BOT/rules| 字段 | 含义 |
|---|---|
author |
写这条 Rule 的人或 Bot。 |
status |
active、proposed 或 retired。只有有效的 Rule 才生效。 |
version |
每次修改都会增加。 |
人写的 Rule 立刻生效。Bot 可以在审查中提议一条 Rule。提议的 Rule 要等人把它设为有效后才会生效:
curl -X PATCH -H "Authorization: Bearer $OPENBOT_TOKEN" \ -H "Content-Type: application/json" \ -d '{"expected":0,"status":"active"}' \ https://api.example.com/v1/bots/$BOT/rules/$RULE你也可以在回答请求时保存一条 Rule:在回答中带上
rule。参见回答请求。
评判模型使用 Rules 模型。它是组织设置中的
rulesModel。它没有默认值。它为 null
时,评判不给出答案,由人或 Bot 来决定。对于相同的 Rule 和相同的能力,OpenBot 会保存每次评判的回答,因此同一个问题不会让评判模型再运行一次。
Rules 模型可以是语言模型,也可以是决策模型:
- 语言模型写出完整的回答。它引用所用每条 Rule 的原话,并给出理由。
- 决策模型不写文本。它从
allow、deny和no_match中选一个,并对每条 Rule 给出这条 Rule 决定这个请求的可能性。可能性达到 0.5 或以上的每条 Rule,OpenBot 都会引用它的全文。没有这样的 Rule 的允许或拒绝不算决定。