Webhook 与事件
任何服务发来事件时启动智能体的工作,通过你自己运行的一个小网关接入。
事件订阅 会在某个服务发来消息时启动智能体的工作:pull request 有了变化、收到一笔付款、某个脚本跑完了。每个事件都会在智能体 Runner 上、它的单聊里执行这个订阅的任务。
你自己运行一个 网关,用你自己的 HTTPS 地址接收服务的请求,验证之后交给 Lorca,由 Lorca 加密后发给智能体的 Runner,所以请求不会以明文离开你的电脑。如果是想跟进一个 pull request,或者给例行任务一个任何服务都能调用的 URL,这些都用不着:Lorca 托管了这两样,见关注 pull request和 Webhook。
接收 GitHub pull request 事件
订阅要在智能体的 Runner 上用命令行创建。lorca status 会列出你的智能体和它们的 id。
描述订阅
{
"name": "PR changes",
"source": "gateway_hmac",
"bot_id": "bot-12345678",
"prompt": "总结 PR 的新动态。先读这个 PR 确认它的当前状态,再告诉我哪些需要我处理。",
"event_types": ["github.pull_request"],
"filters": [
{ "pointer": "/repository/full_name", "equals": "acme/project" },
{ "pointer": "/action", "equals": "synchronize" }
],
"queue_policy": "fifo",
"is_enabled": true
}prompt 是智能体对每个事件要做的事。只有事件类型在列表里、并且每个过滤条件都满足时才会运行:pointer 是事件 JSON 里的路径。queue_policy 为 fifo 时,事件按顺序一个一个运行;为 latest 时,只保留等待中的最新一个。
lorca events add pr-events.json
lorca events route <id> ~/private/pr-route.jsonroute 会把网关用的密钥和事件的发送目标写进一个私有文件。
运行网关
网关是 scripts/event-gateway.py。在 Runner 上,或在你另一台运行着 lorca serve 的电脑上运行它,并准备好上一步的路由文件,以及一个存放随机 GitHub webhook 密钥(至少 32 个字符)的文件:
python3 event-gateway.py --route ~/private/pr-route.json \
--github-secret-file ~/private/github-secret --lorca "$(command -v lorca)"它监听 127.0.0.1:8984/github。在前面加上你的 HTTPS 反向代理或隧道。
在 GitHub 上添加 webhook
在仓库的 webhook 设置里,填入你的公网地址,内容类型选 JSON,密钥填同一个,事件选 Pull requests。
智能体如何处理事件
聊天里会显示 Event · PR changes,然后智能体执行任务。服务发来的内容只是供智能体参考的信息,绝不是指令。运行时没人能回答问题,所以本来要问你的操作会留下来等你审核。这些工作计入这个聊天的上限,或者那个例行任务的上限。
如果你七天没有在任何聊天里发过消息,事件会先等着,等你回来再运行。每个事件最多运行一次,服务重复发送也一样。
管理订阅
| 命令 | 作用 |
|---|---|
lorca events list | 每个订阅的状态、在等待的事件、最近的投递,以及被搁置的原因。从不显示密钥或事件内容。 |
lorca events edit <id> <file> | 替换配置。智能体和例行任务保持不变。 |
lorca events pause <id>、resume <id> | 暂停处理(事件照样到达),以及恢复处理。 |
lorca events reconnect <id> | 生成新的密钥;之后要重新导出路由。 |
lorca events retry <delivery>、discard <delivery> | 看过聊天后,重新运行失败的事件,或丢弃它。 |
lorca events remove <id> | 删除订阅。 |
事件处理失败或被打断时,后面的事件会等着,直到你重试或丢弃它,关注事项里会列出“Events on hold”。网关的密钥失效时,会显示“Events refused”。